One-button deployment installation

# coding=utf8import requestsimport osfrom requests_toolbelt.multipart.encoder import MultipartEncoderimport sysimport timeimport jsonimport urllibusername='admin'password='Omp123!'file_path=r'C:\Users\ Administrator\Desktop\UYUN-Platform-smc-V2.0.R16.0.tar.gz'server_ip='10.1.61.123'host_ips='10.1.61.123'host_ips=host_ips.split(',')port = 7500headers = {'Content-Type':'application/json'}def login(username,password): global server_ip, port,headers login_data = {'username': username,'passwd': password} conn = requests.Session() login_url ='http://{}:{}/omp/api/v1/user/login'.format(server_ip, port) response = conn.post( url=login_url, json=login_data, headers=headers) if response. status_code != 200: print('Login failed reason:()'.format(response.text.decode())) sys.exit(1) else: print'login success' return conndef upload_file(file_path): global serv er_ip, port, conn file_name = file_path.split(os.sep)[-1] url ='http://{}:{}/omp/api/v1/pkgs/upload'.format(server_ip, port) encoded_name = urllib.quote(file_name) with open(file_path,'rb') as f: m = MultipartEncoder( fields=('file': (encoded_name, f,'application/gzip')}) decoded_m = m.to_string() response = conn.post(url, data=decoded_m, headers={'Content-Type': m.content_type,'charset':'UTF-8'}, verify=False) if response.status_code==200: print ' upload success' else: print'upload fail', response.text sys.exit(1) return file_namedef analysis(file_name): global server_ip, port, conn url ='http://{}:{}/omp/api/ v1/pkgs/analysis?fileName={}'.format(server_ip, port, file_name) headers = {'Content-Type':'application/json'} response = conn.get(url, headers=headers, verify=False) if response.status_code==200: print'analysis success' else: print'analysis fail:', response.text sys.exit(1)def check_install_list(upload_time): global server_ip, port, conn products = {} pkg_ids = {} j = 1 while 1: main_url ='http://{}:{}/omp/api/v1/pkgs/query'.format(server_ip, port) main_params = {'pageSize ': 40,'pageIndex': j) j += 1 response = conn.get(main_url, params=main_params) if response.status_code != 200: print('query error') sys.exit(1) else: res = json.loads(response.text) pkg_names = res.get('data') lens = 0 for i in pkg_names: pkg_name = i['pkgName'] # print pkg_name,i['pkgs'] for module in i[ 'pkgs']: # print module lens += 1 if int(module['addTi me']) >= int(upload_time) * 1000: pkg_id = module['pkgId'] products.update({pkg_name: module['version']}) pkg_ids.update({pkg_name: pkg_id}) if lens <40 : break # print'install products', products, pkg_ids if not products: print'The module package to be installed is not found' sys.exit(1) else: print'check install list success' return products, pkg_idsdef check_uninstall_list(host_ips,products ): global server_ip, port, conn uninstall_list = {} install_products = products.keys() j = 1 while 1: main_url ='http://{}:{}/omp/api/v1/installed_pkgs/query'.format (server_ip, port) main_params = {'pageSize': 40,'pageIndex': j) j += 1 response = conn.get(main_url, params=main_params) if response.status_code != 200: print('query error' ) sys.exit(1) else: res = json.loads(response.text) pkg_names = res.ge t('data') lens = 0 for i in pkg_names: pkg_name = i['pkgName'] for pkg_module in i['installedDiffInfoVOs']: lens += 1 if pkg_module['ip'] not in host_ips: continue # print pkg_name,pkg_module pkg_id = pkg_module['pkgId'] host_ip = pkg_module['hostId'] if products.get(pkg_name) and (pkg_module['version'] <= products.get(pkg_name) or pkg_module['status']! = 1): # print pkg_name,pkg_id if not uninstall_list.get(host_ip): uninstall_list.update({host_ip: []}) uninstall_list[host_ip].append({pkg_name: pkg_id}) elif products.get(pkg_name) and pkg_module['version']> products.get(pkg_name) and pkg_module['status'] == 1: i nstall_products.remove(pkg_name) if lens <40: break # print uninstall_list install_list = [] # print install_products # print pkg_ids for k, v in pkg_ids.items(): if k in install_products: install_list.append(v) print'check install list success' return install_list,uninstall_listdef uninstall(uninstall_list): global server_ip, port, conn main_url ='http://{}:{}/omp/api/v1/pkgs/uninstall'.format(server_ip, port) for host_id, v in uninstall_list.items(): for pkg in v: pkg_name = pkg.keys()[0] pkg_id = pkg.values()[0] main_params = {'pkgId': pkg_id,'hostIds': [host_id ],'forceDelete': True} print main_params response = conn.post(main_url, json=main_params, headers=headers) if response.status_code != 200: print('{} uninstall {} error:'.format(host_id, pkg_name)) print response.text sys.exit(1) else: print ('{} uninstall {} success'.format(host_id, pkg_name))def get_hosts(host_ips): global server_ip, port, conn host_ip=host_ips[0] url ='http://{}:{} /omp/api/v1/hosts/query'.format(server_ip, port) response = conn.get(url) host_id_infos = [] content = response.content if response.status_code != 200: print('Get host info failed :{}'.format(content.decode())) sys.exit(1) else: print content host_ids = json.loads(content) for i in host_ids: if host_ip and i['ip'] == host_ip: host_id_infos = [i['hostId']] break host_id_infos.append(i['hostId']) print('host_id:', host_id_infos) return host_id_infosdef check_all(modules,pkg_install_info,host_id_infos,order=0): try: global server_ip , port # print pkg_install_info,order # print modules node_url ='http://{}:{}/omp/api/v1/pkgs/installation_info/nodes_check'.format( server_ip, port) data = {"pkgId": list(pkg_install_info[order].values())[0], "pkgName": list(pkg_install_info[order].keys())[0], "hostIds": host_id_infos , "products": [{"modules": modules, "order": order}]} # print'check data',data response = conn.post(node_url, data=json.dumps(data), headers=headers) if response.status_code != 200: print('check failed:()'.format(response.text.decode())) sys.exit(1) else: print(response.text) return data except Exception as e: print edef install(install_list_temp,host_id_infos): pkg_install_info = {} install_list={} for i in install_list_temp: install_list.update({i: 0}) for pkg_id, status in install_list.items(): install_ids = [] install_names = [ ] print'Start installation', pkg_id check_url ='http://{}:{}/omp/api/v1/pkgs/verify_install'.format(server_ip, port) # print check_url,pkg_id response = conn.ge t(check_url, params={'pkgId': pkg_id}) if response.status_code != 200: print('verify_install error:') print response.text sys.exit(1) else: print'verify_install', response.text conf_url ='http://{}:{}/omp/api/v1/pkgs/dependent_pkgs/query'.format(server_ip, port) response = conn.get(conf_url, params={'pkgId': pkg_id}) if response.status_code != 200: print('query dependent pkgs error') print response.text sys.exit(1) else: print('query dependent pkgs success') pkgs = json.loads(response.text) # print 'pkgs',pkgs for i in pkgs: # print i for pkg in i['modules']: if pkg['pkgId'] == pkg_id: pkg_tag_name = pkg['name'] pkg_install_info.update({pkg[' order']: {pkg['name']: pkg['pkgId']}}) print'pkg_install_info', pkg_install_info length = len(pkg_install_info.keys()) # print(length) modules = [] for i in range(0, length): data = check_all(modules,pkg_install_info,host_id_infos, order=i) # print data modules.append( {"order": i, "pkgId": data["pkgId"], "pkgName": data["pkgName"], "hostIds": host_id_infos}) print'module check', modules # environment check check_url ='http ://{}:{}/omp/api/v1/pkgs/installation_env/check'.format(server_ip, port) install_datas = {} data = [] for k, v in pkg_install_info.items(): pkg_item_id = list (v.values())[0] if pkg_item_id in install_list.keys() and install_list[pkg_item_id] == 0: display = True install_ids.append(pkg_item_id) else: display = False data.append({"pkgId": pkg_item_id, "hostIds": host_id_infos, "display": display}) # print data response = conn.post(check_url, data=json.dumps(data), header s=headers) if response.status_code != 200: print(response.text) print('The installation package check error, please check') sys.exit(1) else: print('The installation package check succeeded') print(response .text) check_url ='http://{}:{}/omp/api/v1/pkgs/installation_info/confirm'.format(server_ip, port) response = conn.post(check_url, data=json.dumps(data ), headers=headers) if response.status_code != 200: print(response.text) print('Environment confirmation error during installation, please check') sys.exit(1) else: print(response.text) print(' Environment confirmation is successful') insert_url ='http://{}:{}/omp/api/v1/tasks/insert'.format(server_ip, port) data = [] for pkg in pkgs[0]['modules' ]: # print(pkg) pkg_install_info.update({pkg['order']: {pkg['name']: pkg['pkgId']}}) for k, v in pkg_install_info.items(): item_id = list (v.values())[0] if item_id in install_list.keys() and install_list[item_id] == 0: display = True else: display = False data.append({"pkgId": item_id, "hostIds": host_id_infos, "display": display, "order": k}) # print data response = conn.post(insert_url, data =json.dumps(data), headers=headers) if response.status_code != 200: print(response.text) print('Insert task error, please check') sys.exit(1) else: task_id = json.loads (response.text)['taskId'] print('Insert task successfully') t = time.time() add_time = int(round(t * 1000)) data = [] for k, v in pkg_install_info.items() : id = list(v.values())[0] if id in install_list.keys() and install_list[item_id] == 0: display = True install_names.append(list(v.keys())[0]) else: display = False data.append({"pkgId": id, "hostIds": host_id_infos, "display": display, "order": k, "opts": [], "taskId": task_id}) # print data install_url ='http://{}:{}/omp/api/v1/pkgs/install'.format(server_ip, port) response = conn.post(install_url, data=json.dumps( data), headers=headers) if response.status_code != 200: print(response.text) print('Error executing installation task, please check') sys.exit(1) else: print(response.text) print(' The installation task begins to execute') print'pkg_install_info', pkg_install_info length = 0 nums = 1 while length 

# coding=utf8import requestsimport osfrom requests_toolbelt.multipart.encoder import MultipartEncoderimport sysimport timeimport jsonimport urllibusername='admin'password='Omp123!'file_path=r'C:\Users\Administrator\Desktop\UYUN- Platform-smc- V2.0.R16.0.tar.gz'server_ip='10.1.61.123'host_ips='10.1.61.123'host_ips=host_ips.split(',')port = 7500headers = {'Content-Type':'application/ json')def login(username,password): global server_ip, port,headers login_data = {'username': username,'passwd': password} conn = requests.Session() login_url ='http://{}:{ }/omp/api/v1/user/login'.format(server_ip, port) response = conn.post( url=login_url, json=login_data, headers=headers) if response.status_code != 200: print('Login failed reason:{}'.format(response.text.decode())) sys.exit(1) else: print'login success' return conndef upload_file(file_path): global server_ip, port, conn file_name = file_path.split(os .sep)[-1] url ='http://{}:{}/omp/api/v1/pkgs/upload'.format(server_ip, port) encoded_name = urllib.quote(file_name) with open(file_path, 'rb') as f: m = MultipartEncoder( fields={'file': (encoded_n ame, f,'application/gzip')}) decoded_m = m.to_string() response = conn.post(url, data=decoded_m, headers={'Content-Type': m.content_type,'charset':'UTF -8'), verify=False) if response.status_code==200: print'upload success' else: print'upload fail', response.text sys.exit(1) return file_namedef analysis(file_name): global server_ip, port , conn url ='http://{}:{}/omp/api/v1/pkgs/analysis?fileName={}'.format(server_ip, port, file_name) headers = {'Content-Type':'application /json') response = conn.get(url, headers=headers, verify=False) if response.status_code==200: print'analysis success' else: print'analysis fail:', response.text sys.exit(1 )def check_install_list(upload_time): global server_ip, port, co nn products = {} pkg_ids = {} j = 1 while 1: main_url ='http://{}:{}/omp/api/v1/pkgs/query'.format(server_ip, port) main_params = {'pageSize ': 40,'pageIndex': j) j += 1 response = conn.get(main_url, params=main_params) if response.status_code != 200: print('query error') sys.exit(1) else: res = json.loads(response.text) pkg_names = res.get('data') lens = 0 for i in pkg_names: pkg_name = i['pkgName'] # print pkg_name,i['pkgs'] for module in i[ 'pkgs']: # print module lens += 1 if int(module['addTime']) >= int(upload_time) * 1000: pkg_id = module['pkgId'] products.update({pkg_name: module['version ']}) pkg_ids.update({pkg_name: pkg_id}) if lens <40: break # print'install products', products, pkg_ids if not products: print'The module package to be installed was not found' sys.exit(1) else: print'check install list success' return products, pkg_idsdef check_uninstall_list(host_ips,products): global server_ip, port , conn uninstall_list = {} install_products = products.keys() j = 1 while 1: main_url ='http://{}:{}/omp/api/v1/installed_pkgs/query'.format(server_ip, port) main_params = {'pageSize': 40,'pageIndex': j) j += 1 response = conn.get(main_url, params=main_params) if response.status_code != 200: print('query error') sys.exit(1 ) else: res = json.loads(response.text) pkg_names = res.get('data') lens = 0 for i in pkg_names: pkg_name = i['pkgName'] for pkg_module in i['installedDiffInfoVOs']: lens += 1 if pkg_module['ip'] not in host_ips: continue # print pkg_name,pkg_module pkg_id = pkg_module['pkgId'] host_ip = pkg_module['hostId'] if products.get(pkg_name) and (pkg_module['version'] <= products.get(pkg_name) or pkg_module['status' ] != 1): # print pkg_name,pkg_id if not uninstall_list.get(host_ip): uninstall_list.update({host_ip: []}) uninstall_list[host_ip].append({pkg_name: pkg_id}) elif products.get(pkg_name ) and pkg_module['version']> products.get(pkg_name) and pkg_module['status'] == 1: install_products.remove(pkg_name) if lens <40: break # print uninstall_list install_list = [] # print install_products # print pkg_ids for k, v in pkg_ids.items(): if k in install_products: install_list.append(v) p rint'check install list success' return install_list,uninstall_listdef uninstall(uninstall_list): global server_ip, port, conn main_url ='http://{}:{}/omp/api/v1/pkgs/uninstall'.format(server_ip, port) for host_id, v in uninstall_list.items(): for pkg in v: pkg_name = pkg.keys()[0] pkg_id = pkg.values()[0] main_params = {'pkgId': pkg_id,'hostIds' : [host_id],'forceDelete': True} print main_params response = conn.post(main_url, json=main_params, headers=headers) if response.status_code != 200: print('{} uninstall {} error:'.format (host_id, pkg_name)) print response.text sys.exit(1) else: print ('() uninstall {) success'.format(host_id, pkg_name))def get_hosts(host_ips): global server_ip, port, conn host_ip= host_ips[0] url ='http://{}:{}/omp/api/v1/hosts/query'.format(server_ip, port) response = conn.get(url) host_i d_infos = [] content = response.content if response.status_code != 200: print('Get host info failed:{}'.format(content.decode())) sys.exit(1) else: print content host_ids = json.loads(content) for i in host_ids: if host_ip and i['ip'] == host_ip: host_id_infos = [i['hostId']] break host_id_infos.append(i['hostId']) print('host_id :', host_id_infos) return host_id_infosdef check_all(modules,pkg_install_info,host_id_infos,order=0): try: global server_ip, port # print pkg_install_info,order # print modules node_url ='http://{}:{}/omp/api /v1/pkgs/installation_info/nodes_check'.format(server_ip, port) data = {"pkgId": list(pkg_install_info[order].values())[0], "pkgName": list(pkg_install_info[order].keys ())[0], "hostIds": host_id_infos, "products": [{"modules": modules, "order": order}]} # print'check data',data respons e = conn.post(node_url, data=json.dumps(data), headers=headers) if response.status_code != 200: print('check failed:()'.format(response.text.decode())) sys.exit(1) else: print(response.text) return data except Exception as e: print edef install(install_list_temp,host_id_infos): pkg_install_info = {} install_list={} for i in install_list_temp: install_list.update({i: 0}) for pkg_id, status in install_list.items(): install_ids = [] install_names = [] print'Start installation', pkg_id check_url ='http://{}:{}/omp/api/v1/pkgs/ verify_install'.format(server_ip, port) # print check_url,pkg_id response = conn.get(check_url, params={'pkgId': pkg_id}) if response.status_code != 200: print('verify_install error:') print response .text sys.exit(1) else: print'verify_install', response.text conf_url ='http://{}:{}/omp/api/ v1/pkgs/dependent_pkgs/query'.format(server_ip, port) response = conn.get(conf_url, params={'pkgId': pkg_id}) if response.status_code != 200: print('query dependent pkgs error') print response.text sys.exit(1) else: print('query dependent pkgs success') pkgs = json.loads(response.text) # print'pkgs',pkgs for i in pkgs: # print i for pkg in i ['modules']: if pkg['pkgId'] == pkg_id: pkg_tag_name = pkg['name'] pkg_install_info.update({pkg['order']: {pkg['name']: pkg['pkgId' ]}}) print'pkg_install_info', pkg_install_info length = len(pkg_install_info.keys()) # print(length) modules = [] for i in range(0, length): data = check_all(modules,pkg_install_info,host_id_infos, order =i) # print data modules.append({"order": i, "pkgId": data["pkgI d"], "pkgName": data["pkgName"], "hostIds": host_id_infos}) print'module check', modules # environment check check_url ='http://{}:{}/omp/api/v1 /pkgs/installation_env/check'.format(server_ip, port) install_datas = {} data = [] for k, v in pkg_install_info.items(): pkg_item_id = list(v.values())[0] if pkg_item_id in install_list .keys() and install_list[pkg_item_id] == 0: display = True install_ids.append(pkg_item_id) else: display = False data.append({"pkgId": pkg_item_id, "hostIds": host_id_infos, "display": display} ) # print data response = conn.post(check_url, data=json.dumps(data), headers=headers) if response.status_code != 200: print(response.text) print('Installation package check error, please check' ) sys.exit(1) else: print('Installation package check successful') print(response.text) check_url ='http://{}:{}/omp/api/v1/pkgs/installation_info /confirm'.format(server_ip, port) response = conn.post(check_url, data=json.dumps(data), headers=headers) if response.status_code != 200: print(response.text) print('when installed Environment confirmation error, please check') sys.exit(1) else: print(response.text) print('Environment confirmation success') insert_url ='http://{}:{}/omp/api/v1/tasks /insert'.format(server_ip, port) data = [] for pkg in pkgs[0]['modules']: # print(pkg) pkg_install_info.update({pkg['order']: {pkg['name' ]: pkg['pkgId']}}) for k, v in pkg_install_info.items(): item_id = list(v.values())[0] if item_id in install_list.keys() and install_list[item_id] == 0: display = True else: display = False data.append({"pkgId": item_id, "hostIds": host_id_infos, "display": display, "order": k}) # print data response = conn.post(insert_url , data=json.dumps(data), headers=headers) if response.status_code != 200: print(response.text) print('Insert task error, please check') sys.exit(1) else: task_id = json.loads(response.text)['taskId'] print( 'Insert task succeeded') t = time.time() add_time = int(round(t * 1000)) data = [] for k, v in pkg_install_info.items(): id = list(v.values())[ 0] if id in install_list.keys() and install_list[item_id] == 0: display = True install_names.append(list(v.keys())[0]) else: display = False data.append({"pkgId ": id, "hostIds": host_id_infos, "display": display, "order": k, "opts": [], "taskId": task_id}) # print data install_url ='http://{}:{ }/omp/api/v1/pkgs/install'.format(server_ip, port) response = conn.post(install_url, data=json.dumps(data), headers=headers) if response.status_code != 200: print( response.text) print('Execution of installation task error, please check') sys.exit(1) else: print(response.text) print('Installation task begins execution') print'pkg_install_info', pkg_install_info length = 0 nums = 1 while length < nums: time.sleep(60) query_url ='http://{}:{}/omp/api/v1/logs/exerecord/abnormal_info/count'.format(server_ip, port) data = {'taskId': task_id ,'completed': 0} response = conn.get( url=query_url, params=data) if response.status_code != 200: print ('query warn failed reason:{)'.format(response.content.decode() )) sys.exit(1) else: res = json.loads(response.text) # print res if res.get('warningCnt') != 0: print ('A warning message appears') elif res.get(' errorCnt') != 0: print ('An error occurred') sys.exit(1) # Check the module Block print'check module', pkg_tag_name query_url ='http://{}:{}/omp/api/v1/installed_pkgs/query'.format(server_ip, port) data = {'keyWord': pkg_tag_name,'status' : 1) response = conn.get( url=query_url, params=data) if response.status_code != 200: print ('query product pkg failed reason:{}'.format(response.content.decode())) sys .exit(1) else: res = json.loads(response.text) print'res', res for i in res['data']: for j in i['installedDiffInfoVOs']: if j['pkgId'] == pkg_id and j['status'] != 1: print ('Some module installation errors') sys.exit(1) elif j['pkgId'] == pkg_id: length += 1 # print'length', length if length == nums: print'{}installation successful'.format(pkg_tag_name) break install_list.update({pkg_id: 1})conn=login(username,password)upload_time = int(time.time())file_name=upload_file(file_path)analysis(file_name )products, pkg_ids=check_install_list(upload_time)install_list,uninstall_list=check_uninstall_list(host_ips,products)print install_list,uninstall_listif uninstall_list: uninstall(uninstall_list)hosts=get_hosts(host_ips)install(install_list,hosts)

< p>

Leave a Comment

Your email address will not be published.