예제 #1
0
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
예제 #2
0
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")
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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
예제 #8
0
        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")