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))
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))
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))
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'])
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)])
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'])
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")
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)])
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)])
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'])