import paramiko import sys import json def load_config(config_file): try: with open(config_file) as infile: try: json_dict = json.load(infile) #logging.info(json_dict) return json_dict["remotes"], json_dict["jobs"], json_dict["settings"] except json.JSONDecodeError as e: logging.warning('exception caught: ', exc_info = True) sys.exit(1) except FileNotFoundError: logging.warning('exception caught: ', exc_info = True) sys.exit(1) def create_remote(config, settings): type_r = config["remote_type"] if type_r == "sftp": import remote_sftp remote = remote_sftp.sftp_remote(config, settings) elif type_r == "local_dir": import remote_local_dir remote = remote_local_dir.local_dir_remote(config) return remote def distribute_files(path_list, dest): for pathfile in path_list: if not str(pathfile).endswith('.bsp'): continue if not dest.put(pathfile, dest.path): log_msg = ''.join(["failed putting file: ", str(pathfile)]) print(log_msg) sys.exit(1) def main(): config_file = 'config_maps.json' ip = sys.argv[1] username = sys.argv[2] password = sys.argv[3] remotes, jobs, settings = load_config(config_file) remotes["sftp_ovh_ze_maps_dest"]["hostname"] = ip remotes["sftp_ovh_ze_maps_dest"]["username"] = username settings["sftp"][ip] = {} settings["sftp"][ip][username] = {"password": password} for index, job in enumerate(jobs): src = create_remote(remotes[job["src"]], settings) dest = create_remote(remotes[job["dest"]], settings) source_files = src.list_dir() distribute_files(source_files, dest) for pathfile in source_files: src.delete_local_map(pathfile) if __name__ == '__main__': main()