Ejemplo n.º 1
0
def mktorrent(image):
    if (image is None):
        squashfs_file = get_from_config("images", "trg_img", dist)
    else:
        squashfs_file = image
    seeders = get_from_config("p2p", "seeders", dist)
    trackers_port = get_from_config("p2p", "trackers_port", dist)
    trackers_schema = get_from_config("p2p", "trackers_schema", dist)
    seeding_service = get_from_config("p2p", "seeding_service", dist)
    init_stop = get_from_config("p2p", "init_stop", dist)
    init_start = get_from_config("p2p", "init_start", dist)

    # trackers is a dictionary with pairs nodeset and torrent file
    trackers = {}
    for e in get_from_config("p2p", "trackers", dist).split(";"):
        k, v = e.split(":")
        trackers[k] = v

    if not os.path.isfile(squashfs_file):
        clara_exit("The file {0} doesn't exist".format(squashfs_file))

    # Remove old torrent files
    for f in trackers.values():
        if os.path.isfile(f):
            os.remove(f)

    clush(seeders, init_stop.format(seeding_service))

    for e in trackers.keys():
        announce = []
        for t in list(ClusterShell.NodeSet.NodeSet(e)):
            announce.append("{0}://{1}:{2}/announce".format(trackers_schema, t, trackers_port))
        run(["/usr/bin/mktorrent", "-a", ",".join(announce), "-o", trackers[e], squashfs_file])

    clush(seeders, init_start.format(seeding_service))
Ejemplo n.º 2
0
def mktorrent(image):
    if (image is None):
        squashfs_file = get_from_config("images", "trg_img", dist)
    else:
        squashfs_file = image
    trackers_port = get_from_config("p2p", "trackers_port", dist)
    trackers_schema = get_from_config("p2p", "trackers_schema", dist)
    seeding_service = get_from_config("p2p", "seeding_service", dist)
    init_stop = get_from_config("p2p", "init_stop", dist)
    init_start = get_from_config("p2p", "init_start", dist)

    # trackers is a dictionary with pairs nodeset and torrent file
    trackers = {}
    for e in get_from_config("p2p", "trackers", dist).split(";"):
        k, v = e.split(":")
        trackers[k] = v

    # seeders in the config file is a dictionary with pairs nodeset and torrent file
    seeders_dict = {}
    for e in get_from_config("p2p", "seeders", dist).split(";"):
        k, v = e.split(":")
        seeders_dict[k] = v
    seeders = ",".join(seeders_dict.keys())

    if not os.path.isfile(squashfs_file):
        clara_exit("{0} doesn't exist".format(squashfs_file))

    # Remove old torrent files
    for f in trackers.values():
        if os.path.isfile(f):
            os.remove(f)

    clush(seeders, init_stop.format(seeding_service))

    sftp_mode = has_config_value("p2p", "sftp_user", dist)
    if sftp_mode:
        sftp_user = get_from_config("p2p", "sftp_user", dist)
        sftp_private_key = get_from_config("p2p", "sftp_private_key", dist)
        sftp_passphrase = get_from_config_or("p2p", "sftp_passphrase", dist, None)
        sftp_client = sftp.Sftp(seeders.split(','), sftp_user, sftp_private_key, sftp_passphrase)

    for e in trackers.keys():
        announce = []
        for t in list(ClusterShell.NodeSet.NodeSet(e)):
            announce.append("{0}://{1}:{2}/announce".format(trackers_schema, t, trackers_port))
        run(["/usr/bin/mktorrent", "-a", ",".join(announce), "-o", trackers[e], squashfs_file])
        if sftp_mode:
            sftp_client.upload([trackers[e]], os.path.dirname(trackers[e]))

    clush(seeders, init_start.format(seeding_service))
Ejemplo n.º 3
0
def mktorrent(image):
    if (image is None):
        squashfs_file = get_from_config("images", "trg_img", dist)
    else:
        squashfs_file = image
    trackers_port = get_from_config("p2p", "trackers_port", dist)
    trackers_schema = get_from_config("p2p", "trackers_schema", dist)
    seeding_service = get_from_config("p2p", "seeding_service", dist)
    init_stop = get_from_config("p2p", "init_stop", dist)
    init_start = get_from_config("p2p", "init_start", dist)

    # trackers is a dictionary with pairs nodeset and torrent file
    trackers = {}
    for e in get_from_config("p2p", "trackers", dist).split(";"):
        k, v = e.split(":")
        trackers[k] = v

    # seeders in the config file is a dictionary with pairs nodeset and torrent file
    seeders_dict = {}
    for e in get_from_config("p2p", "seeders", dist).split(";"):
        k, v = e.split(":")
        seeders_dict[k] = v
    seeders = ",".join(seeders_dict.keys())

    if not os.path.isfile(squashfs_file):
        clara_exit("The file {0} doesn't exist".format(squashfs_file))

    # Remove old torrent files
    for f in trackers.values():
        if os.path.isfile(f):
            os.remove(f)

    clush(seeders, init_stop.format(seeding_service))

    for e in trackers.keys():
        announce = []
        for t in list(ClusterShell.NodeSet.NodeSet(e)):
            announce.append("{0}://{1}:{2}/announce".format(
                trackers_schema, t, trackers_port))
        run([
            "/usr/bin/mktorrent", "-a", ",".join(announce), "-o", trackers[e],
            squashfs_file
        ])

    clush(seeders, init_start.format(seeding_service))
Ejemplo n.º 4
0
def main():
    logging.debug(sys.argv)
    dargs = docopt.docopt(__doc__)

    global dist
    dist = get_from_config("common", "default_distribution")
    if dargs["<dist>"] is not None:
        dist = dargs["<dist>"]
    if dist not in get_from_config("common", "allowed_distributions"):
        clara_exit("{0} is not a known distribution".format(dist))

    trackers_dict = {}
    for e in get_from_config("p2p", "trackers", dist).split(";"):
        k, v = e.split(":")
        trackers_dict[k] = v
    trackers = ",".join(trackers_dict.keys())

    seeders_dict = {}
    for e in get_from_config("p2p", "seeders", dist).split(";"):
        k, v = e.split(":")
        seeders_dict[k] = v
    seeders = ",".join(seeders_dict.keys())

    tracking_service = get_from_config("p2p", "tracking_service", dist)
    seeding_service = get_from_config("p2p", "seeding_service", dist)

    if dargs['status']:
        init_status = get_from_config("p2p", "init_status")
        clush(trackers, init_status.format(tracking_service))
        clush(seeders, init_status.format(seeding_service))
    elif dargs['restart']:
        init_stop = get_from_config("p2p", "init_stop")
        clush(seeders, init_stop.format(seeding_service))
        clush(trackers, init_stop.format(tracking_service))
        time.sleep(1)
        init_start = get_from_config("p2p", "init_start")
        clush(trackers, init_start.format(tracking_service))
        clush(seeders, init_start.format(seeding_service))
    elif dargs['mktorrent']:
        mktorrent(dargs['--image'])
Ejemplo n.º 5
0
def main():
    logging.debug(sys.argv)
    dargs = docopt.docopt(__doc__)

    debug = []
    if conf.ddebug:
        debug = ["--verbose", "--details"]

    if dargs['resume']:
        run(["scontrol"] + debug +
            ["update", "NodeName=" + dargs['<nodeset>'], "State=RESUME"])
    elif dargs['drain']:
        if dargs['<nodeset>'] is None:
            show_nodes("drain")
        else:
            if len(dargs['<reason>']) == 0:
                clara_exit("You must specify a reason when DRAINING a node")
            else:
                run(["scontrol"] + debug + [
                    "update", "NodeName=" +
                    dargs['<nodeset>'], "State=DRAIN", 'Reason="' +
                    " ".join(dargs['<reason>']) + '"'
                ])
    elif dargs['undrain']:
        run(["scontrol"] + debug +
            ["update", "NodeName=" + dargs['<nodeset>'], "State=UNDRAIN"])
    elif dargs['fail']:
        if dargs['<nodeset>'] is None:
            show_nodes("fail")
        else:
            if len(dargs['<reason>']) == 0:
                clara_exit("You must specify a reason when FAILING a node")
            else:
                run(["scontrol"] + debug + [
                    "update", "NodeName=" +
                    dargs['<nodeset>'], "State=FAIL", 'Reason="' +
                    " ".join(dargs['<reason>']) + '"'
                ])
    elif dargs['down']:
        if dargs['<nodeset>'] is None:
            show_nodes("down")
        else:
            run(["scontrol"] + debug +
                ["update", "NodeName=" + dargs['<nodeset>'], "State=DOWN"])
    elif dargs['power']:
        if dargs['<state>'] == 'up':
            run(["scontrol"] + debug +
                ["update", "NodeName=" + dargs['<nodeset>'], "State=POWER_UP"])
        elif dargs['<state>'] == 'down':
            run(["scontrol"] + debug + [
                "update", "NodeName=" + dargs['<nodeset>'], "State=POWER_DOWN"
            ])
        else:
            clara_exit("Only 'up' and 'down' are valid states")
    elif dargs['health']:
        script_slurm_health = get_from_config("slurm", "script_slurm_health")
        if (len(script_slurm_health) > 0):
            clush(dargs['<nodeset>'], script_slurm_health)
        else:
            clara_exit(
                "You must set a health check program in the configuration file."
            )
    else:
        cmd_list = [
            'job', 'node', 'steps', 'frontend', 'partition', 'reservation',
            'block', 'submp'
        ]

        # /!\ ∀ x, ∀ y, op_list[x][y] ⇒ op_list[x][y] ∈ cmd_list
        op_list = {
            'show': [
                'job', 'node', 'partition', 'reservation', 'steps', 'frontend',
                'block', 'submp'
            ],
            'update': [
                'job', 'node', 'partition', 'reservation', 'steps', 'frontend',
                'block', 'submp'
            ],
            'create': ['partition', 'reservation'],
            'delete': ['partition', 'reservation']
        }

        # /!\ ∀ x ∈ cmd_list ⇒ x ∈ keys_list.keys()
        key_list = {
            'job': 'JobId',
            'steps': 'StepId',
            'node': 'NodeName',
            'frontend': 'FrontendName',
            'partition': 'PartitionName',
            'reservation': 'Reservation',
            'block': 'BlockName',
            'submp': 'SubMPName'
        }

        cmd = dargs['<cmd>']
        subject = dargs['<subject>']
        op = dargs['<op>']
        spec = dargs['<spec>']

        if cmd not in cmd_list:
            clara_exit("Known commands are: {0}".format(" ".join(cmd_list)))

        if spec is None:
            if op is not None and "=" in op:
                spec = [op]
            op = 'show'

        if "=" in op:
            spec = [op] + spec
            op = 'show'

        if op not in op_list:
            clara_exit("Known operations are: {0}".format(" ".join(op_list)))

        if cmd not in op_list[op]:
            clara_exit("You can't use {0} with {1}".format(cmd, op))

        if op == 'show':
            # spec should be empty
            run(["scontrol"] + debug + [op, cmd, subject])
        else:
            run(["scontrol"] + debug + \
                [op,
                 "{0}={1}".format(key_list[cmd], subject),
                 " ".join(spec)])
Ejemplo n.º 6
0
def main():
    dargs = docopt.docopt(__doc__)

    trackers = get_from_config("p2p", "trackers")
    seeders = get_from_config("p2p", "seeders")

    if dargs['status']:
        clush(trackers, "service mldonkey-server status")
        clush(seeders, "service ctorrent status")
    elif dargs['restart']:
        clush(seeders, "service ctorrent stop")
        clush(trackers, "service mldonkey-server stop")
        time.sleep(1)
        clush(trackers, "service mldonkey-server start")
        clush(seeders, "service ctorrent start")
    elif dargs['mktorrent']:
        mktorrent(dargs['--image'])
Ejemplo n.º 7
0
def mktorrent(image):
    ml_path = "/var/lib/mldonkey"
    trg_dir = get_from_config("images", "trg_dir")
    if (image is None):
        squashfs_file = get_from_config("images", "trg_img")
    else:
        squashfs_file = image
    seeders = get_from_config("p2p", "seeders")
    trackers = get_from_config("p2p", "trackers")
    trackers_port = get_from_config("p2p", "trackers_port")
    trackers_schema = get_from_config("p2p", "trackers_schema")

    if not os.path.isfile(squashfs_file):
        sys.exit("The file {0} doesn't exist".format(squashfs_file))

    if os.path.isfile(trg_dir + "/image.torrent"):
        os.remove(trg_dir + "/image.torrent")

    clush(seeders, "service ctorrent stop")
    clush(trackers, "service mldonkey-server stop")

    for files in ["torrents/old", "torrents/seeded", "torrents/tracked"]:
        clush(trackers, "rm -f {0}/{1}/*".format(ml_path, files))

    clush(trackers, "ln -sf {0} {1}/incoming/files/".format(squashfs_file, ml_path))

    clush(trackers, "awk 'BEGIN{verb=1}; / tracked_files = / {verb=0}; /^$/ {verb=1}; {if (verb==1) print}' /var/lib/mldonkey/bittorrent.ini > /var/lib/mldonkey/bittorrent.ini.new")
    clush(trackers, "mv {0}/bittorrent.ini.new {0}/bittorrent.ini".format(ml_path))

    announce = []
    for t in list(ClusterShell.NodeSet.NodeSet(trackers)):
        announce.append("{0}://{1}:{2}/announce".format(trackers_schema, t, trackers_port))
    run(["/usr/bin/mktorrent", "-a", ",".join(announce), "-o", trg_dir + "/image.torrent", squashfs_file])
    clush(trackers, "ln -sf {0}/image.torrent {1}/torrents/seeded/".format(trg_dir, ml_path))

    clush(trackers, "service mldonkey-server start")
    clush(seeders, "service ctorrent start")
Ejemplo n.º 8
0
def main():
    dargs = docopt.docopt(__doc__)

    if dargs['resume']:
        run(["scontrol", "update", "NodeName="+dargs['<nodeset>'],
             "State=RESUME"])
    elif dargs['drain']:
        if dargs['<nodeset>'] is None:
            show_nodes("drain")
        else:
            if len (dargs['<reason>']) == 0:
                sys.exit("You must specify a reason when DRAINING a node")
            else:
                run(["scontrol", "update", "NodeName="+dargs['<nodeset>'],
                     "State=DRAIN", 'Reason="'+" ".join(dargs['<reason>'])+'"'])
    elif dargs['down']:
        if dargs['<nodeset>'] is None:
            show_nodes("down")
        else:
            run(["scontrol", "update", "NodeName="+dargs['<nodeset>'],
                 "State=DOWN"])
    elif dargs['health']:
        clush(dargs['<nodeset>'],
              "/usr/lib/slurm/check_node_health.sh --no-slurm")
    else:
        cmd_list = ['job', 'node', 'steps', 'frontend', 'partition', 'reservation',
                    'block', 'submp']

        # /!\ ∀ x, ∀ y, op_list[x][y] ⇒ op_list[x][y] ∈ cmd_list
        op_list = {
            'show': ['job', 'node', 'partition', 'reservation', 'steps',
                     'frontend', 'block', 'submp'],
            'update': ['job', 'node', 'partition', 'reservation', 'steps',
                       'frontend', 'block', 'submp'],
            'create': ['partition', 'reservation'],
            'delete': ['partition', 'reservation']
        }

        # /!\ ∀ x ∈ cmd_list ⇒ x ∈ keys_list.keys()
        key_list = {
            'job': 'JobId',
            'steps': 'StepId',
            'node': 'NodeName',
            'frontend': 'FrontendName',
            'partition': 'PartitionName',
            'reservation': 'Reservation',
            'block': 'BlockName',
            'submp': 'SubMPName'
            }

        cmd = dargs['<cmd>']
        subject = dargs['<subject>']
        op = dargs['<op>']
        spec = dargs['<spec>']

        if cmd not in cmd_list:
            sys.exit("Known commands are: {0}".format(" ".join(cmd_list)))

        if spec is None:
            if op is not None and "=" in op:
                spec = [op]
            op = 'show'

        if "=" in op:
            spec = [op] + spec
            op = 'show'

        if op not in op_list:
            sys.exit("Known operations are: {0}".format(" ".join(op_list)))

        if cmd not in op_list[op]:
            sys.exit("You can't use {0} with {1}".format(cmd, op))

        if op == 'show':
            # spec should be empty
            run(["scontrol", op, cmd, subject])
        else:
            run(["scontrol",
                 op,
                 "{0}={1}".format(key_list[cmd], subject),
                 " ".join(spec)])
Ejemplo n.º 9
0
def main():
    logging.debug(sys.argv)
    dargs = docopt.docopt(__doc__)

    debug = []
    if conf.ddebug:
        debug = ["--verbose", "--details"]

    if dargs['resume']:
        run(["scontrol"] + debug + ["update", "NodeName=" + dargs['<nodeset>'],
             "State=RESUME"])
    elif dargs['drain']:
        if dargs['<nodeset>'] is None:
            show_nodes("drain")
        else:
            if len(dargs['<reason>']) == 0:
                clara_exit("You must specify a reason when DRAINING a node")
            else:
                run(["scontrol"] + debug + ["update", "NodeName=" + dargs['<nodeset>'],
                     "State=DRAIN", 'Reason="' + " ".join(dargs['<reason>']) + '"'])
    elif dargs['down']:
        if dargs['<nodeset>'] is None:
            show_nodes("down")
        else:
            run(["scontrol"] + debug + ["update", "NodeName=" + dargs['<nodeset>'],
                 "State=DOWN"])
    elif dargs['health']:
        script_slurm_health = get_from_config("slurm", "script_slurm_health")
        if (len(script_slurm_health) > 0):
            clush(dargs['<nodeset>'], script_slurm_health)
        else:
            clara_exit("You must set a health check program in the configuration file.")
    else:
        cmd_list = ['job', 'node', 'steps', 'frontend', 'partition', 'reservation',
                    'block', 'submp']

        # /!\ ∀ x, ∀ y, op_list[x][y] ⇒ op_list[x][y] ∈ cmd_list
        op_list = {
            'show': ['job', 'node', 'partition', 'reservation', 'steps',
                     'frontend', 'block', 'submp'],
            'update': ['job', 'node', 'partition', 'reservation', 'steps',
                       'frontend', 'block', 'submp'],
            'create': ['partition', 'reservation'],
            'delete': ['partition', 'reservation']
        }

        # /!\ ∀ x ∈ cmd_list ⇒ x ∈ keys_list.keys()
        key_list = {
            'job': 'JobId',
            'steps': 'StepId',
            'node': 'NodeName',
            'frontend': 'FrontendName',
            'partition': 'PartitionName',
            'reservation': 'Reservation',
            'block': 'BlockName',
            'submp': 'SubMPName'
            }

        cmd = dargs['<cmd>']
        subject = dargs['<subject>']
        op = dargs['<op>']
        spec = dargs['<spec>']

        if cmd not in cmd_list:
            clara_exit("Known commands are: {0}".format(" ".join(cmd_list)))

        if spec is None:
            if op is not None and "=" in op:
                spec = [op]
            op = 'show'

        if "=" in op:
            spec = [op] + spec
            op = 'show'

        if op not in op_list:
            clara_exit("Known operations are: {0}".format(" ".join(op_list)))

        if cmd not in op_list[op]:
            clara_exit("You can't use {0} with {1}".format(cmd, op))

        if op == 'show':
            # spec should be empty
            run(["scontrol"] + debug + [op, cmd, subject])
        else:
            run(["scontrol"] + debug + \
                [op,
                 "{0}={1}".format(key_list[cmd], subject),
                 " ".join(spec)])
Ejemplo n.º 10
0
def main():
    logging.debug(sys.argv)
    dargs = docopt.docopt(__doc__)

    global dist
    dist = get_from_config("common", "default_distribution")
    if dargs["<dist>"] is not None:
        dist = dargs["<dist>"]
    if dist not in get_from_config("common", "allowed_distributions"):
        clara_exit("{0} is not a know distribution".format(dist))

    trackers = get_from_config("p2p", "trackers", dist)
    seeders = get_from_config("p2p", "seeders", dist)

    tracking_service = get_from_config("p2p", "tracking_service", dist)
    seeding_service = get_from_config("p2p", "seeding_service", dist)

    if dargs['status']:
        init_status = get_from_config("p2p", "init_status")
        clush(trackers, init_status.format(tracking_service))
        clush(seeders, init_status.format(seeding_service))
    elif dargs['restart']:
        init_stop = get_from_config("p2p", "init_stop")
        clush(seeders, init_stop.format(seeding_service))
        clush(trackers, init_stop.format(tracking_service))
        time.sleep(1)
        init_start = get_from_config("p2p", "init_start")
        clush(trackers, init_start.format(tracking_service))
        clush(seeders, init_start.format(seeding_service))
    elif dargs['mktorrent']:
        mktorrent(dargs['--image'])