def list_nodegroups(nodegroups): all_groups = make_all_groups() for nodegroup in nodegroups: if not nodegroup in all_groups: stderr("no such nodegroup '%s' defined" % nodegroup) sys.exit(1) arr = get_nodes_in_groups(nodegroups) arr.sort() for node in arr: if node in synctool_param.IGNORE_GROUPS: if OPT_INTERFACE: node = get_node_interface(node) elif OPT_HOSTNAME: node = get_node_hostname(node) if not OPT_FILTER_IGNORED: print "%s (ignored)" % node else: if OPT_INTERFACE: node = get_node_interface(node) elif OPT_HOSTNAME: node = get_node_hostname(node) print node
def read_config(): """read the config file and set a bunch of globals""" global CONFIGPARSER_MODULE if not os.path.isfile(synctool_param.CONF_FILE): stderr("no such config file '%s'" % synctool_param.CONF_FILE) sys.exit(-1) errors = synctool_configparser.read_config_file(synctool_param.CONF_FILE) # if missing, set default directories if synctool_param.MASTERDIR == None: synctool_param.MASTERDIR = "." # hmmm ... nice for debugging, but shouldn't this be /var/lib/synctool ? if not synctool_param.OVERLAY_DIRS: synctool_param.OVERLAY_DIRS.append(os.path.join(synctool_param.MASTERDIR, "overlay")) if not os.path.isdir(synctool_param.OVERLAY_DIRS[0]): stderr("error: no such directory: %s" % synctool_param.OVERLAY_DIRS[0]) errors = errors + 1 if not synctool_param.DELETE_DIRS: synctool_param.DELETE_DIRS.append(os.path.join(synctool_param.MASTERDIR, "delete")) if not os.path.isdir(synctool_param.DELETE_DIRS[0]): stderr("error: no such directory: %s" % synctool_param.DELETE_DIRS[0]) errors = errors + 1 if not synctool_param.TASKS_DIRS: synctool_param.TASKS_DIRS.append(os.path.join(synctool_param.MASTERDIR, "tasks")) if not os.path.isdir(synctool_param.TASKS_DIRS[0]): stderr("error: no such directory: %s" % synctool_param.TASKS_DIRS[0]) errors = errors + 1 if not synctool_param.SCRIPT_DIR: synctool_param.SCRIPT_DIR = os.path.join(synctool_param.MASTERDIR, "scripts") if not os.path.isdir(synctool_param.SCRIPT_DIR): stderr("error: no such directory: %s" % synctool_param.SCRIPT_DIR) errors = errors + 1 if errors > 0: sys.exit(-1) # implicitly add 'nodename' as first group for node in get_all_nodes(): insert_group(node, node) # implicitly add group 'all' if not synctool_param.GROUP_DEFS.has_key("all"): synctool_param.GROUP_DEFS["all"] = None for node in get_all_nodes(): if not "all" in synctool_param.NODES[node]: synctool_param.NODES[node].append("all") # implicitly add group 'none' if not synctool_param.GROUP_DEFS.has_key("none"): synctool_param.GROUP_DEFS["none"] = None if not "none" in synctool_param.IGNORE_GROUPS: synctool_param.IGNORE_GROUPS.append("none")
def list_nodes(nodenames): groups = [] for nodename in nodenames: if not synctool_param.NODES.has_key(nodename): stderr("no such node '%s' defined" % nodename) sys.exit(1) if OPT_INTERFACE: print get_node_interface(nodename) elif OPT_HOSTNAME: print get_node_hostname(nodename) else: for group in get_groups(nodename): if not group in groups: groups.append(group) # groups.sort() # group order is important for group in groups: if group in synctool_param.IGNORE_GROUPS: if not OPT_FILTER_IGNORED: print "%s (ignored)" % group else: print group
def set_action(a, opt): global ACTION, ACTION_OPTION if ACTION > 0: stderr("options %s and %s can not be combined" % (ACTION_OPTION, opt)) sys.exit(1) ACTION = a ACTION_OPTION = opt
def list_commands(cmds): """display command setting""" for cmd in cmds: if cmd == "diff": print synctool_param.DIFF_CMD elif cmd == "ssh": print synctool_param.SSH_CMD elif cmd == "rsync": print synctool_param.RSYNC_CMD elif cmd == "synctool": print synctool_param.SYNCTOOL_CMD elif cmd == "pkg": print synctool_param.PKG_CMD else: stderr("no such command '%s' available in synctool" % cmd)
def list_commands(cmds): '''display command setting''' for cmd in cmds: if cmd == 'diff': print synctool_param.DIFF_CMD elif cmd == 'ssh': print synctool_param.SSH_CMD elif cmd == 'rsync': print synctool_param.RSYNC_CMD elif cmd == 'synctool': print synctool_param.SYNCTOOL_CMD elif cmd == 'pkg': print synctool_param.PKG_CMD else: stderr("no such command '%s' available in synctool" % cmd)
def main(): get_options() if ACTION == ACTION_VERSION: print synctool_param.VERSION sys.exit(0) if OPT_INTERFACE and OPT_HOSTNAME: stderr("options --interface, --ipaddress and --hostname can not be combined") sys.exit(1) read_config() if ACTION == ACTION_LIST_NODES: list_all_nodes() elif ACTION == ACTION_LIST_GROUPS: list_all_groups() elif ACTION == ACTION_NODES: if not ARG_NODENAMES: stderr("option '--node' requires an argument; the node name") sys.exit(1) list_nodes(ARG_NODENAMES) elif ACTION == ACTION_GROUPS: if not ARG_GROUPS: stderr("option '--node-group' requires an argument; the node group name") sys.exit(1) list_nodegroups(ARG_GROUPS) elif ACTION == ACTION_MASTERDIR: print synctool_param.MASTERDIR elif ACTION == ACTION_CMDS: list_commands(ARG_CMDS) elif ACTION == ACTION_NUMPROC: print synctool_param.NUM_PROC elif ACTION == ACTION_PREFIX: print os.path.abspath(os.path.dirname(sys.argv[0])) elif ACTION == ACTION_LOGFILE: print synctool_param.LOGFILE elif ACTION == ACTION_NODENAME: add_myhostname() if synctool_param.NODENAME == None: stderr( "unable to determine my nodename (%s), please check %s" % (synctool_config.HOSTNAME, synctool_param.CONF_FILE) ) sys.exit(1) if synctool_param.NODENAME in synctool_param.IGNORE_GROUPS: if not synctool_param.OPT_FILTER_IGNORED: if OPT_INTERFACE: print "none (%s ignored)" % get_node_interface(synctool_param.NODENAME) else: print "none (%s ignored)" % synctool_param.NODENAME sys.exit(0) if OPT_INTERFACE: print get_node_interface(synctool_param.NODENAME) else: print synctool_param.NODENAME elif ACTION == ACTION_LIST_DIRS: list_dirs() elif ACTION == ACTION_PKGMGR: print synctool_param.PACKAGE_MANAGER else: raise RuntimeError, "bug: unknown ACTION code %d" % ACTION
usage() sys.exit(1) except getopt.GetoptError, (reason): print print "%s: %s" % (progname, reason) print usage() sys.exit(1) except: usage() sys.exit(1) if args != None and len(args) > 0: stderr("error: excessive arguments on command-line") sys.exit(1) errors = 0 for opt, arg in opts: if opt in ("-h", "--help", "-?"): usage() sys.exit(1) if opt in ("-c", "--conf"): synctool_param.CONF_FILE = arg continue if opt in ("-l", "--list-nodes"): set_action(ACTION_LIST_NODES, "--list-nodes")