def run(*args): #print("args:", args) groups = args[0] cmd = args[2] # 对所有配置的服务器执行命令 if groups == "*": hosts = parser.load_host_all() else: # 根据组名执行命令 hosts = parser.search_host_by_group(groups) if len(hosts) == 0: print("\033[31;1m no group name ' {0} ' found \033[0M".format(groups)) sys.exit(0) # 设置5个进程池 pool = Pool(5) for ip in hosts.keys(): host_info = parser.host_info_by_ip(ip) pool.apply_async(_ssh_exec_cmd, args=(cmd,), kwds=host_info) pool.close() pool.join()
def run(*args): """ 执行ftp传文件功能 :param args: :return: """ # 进行操作的主机字典 exec_hosts = {} # 获取要执行的package名称 exec_group = args[0] package_name = args[2] # 加载 package 文件 package_file = os.path.join(settings.package_path, "{name}.sls".format(name=package_name)) # 判断执行package文件是否存在 if not os.path.exists(package_file): print("\n\033[31;1m package '{0}' not found! \033[0m".format(package_name)) sys.exit(0) # 加载文件信息 sftp_data = parser.get_package_date(package_file) # 根据组获取组内的所有主机信息 host_in_group = parser.search_host_by_group(exec_group) if len(host_in_group) == 0: print("\n\033[31;1m no groupname '{0}' found! \033[0m".format(exec_group)) sys.exit(0) # 如果配置文件中指定hosts:all,对组中所有主机进行配置执行 if sftp_data['hosts'] == 'all': for k, v in host_in_group.items(): exec_hosts.update(parser.host_info_by_ip(k)) else: # 如果是指定部分IP执行 ip1,ip2 ip_list = sftp_data['hosts'].split(",") for ip in ip_list: exec_hosts.update(parser.host_info_by_ip(ip)) runpackage(sftp_data, exec_hosts)