1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python实现批量变更阿里云DNS解析记录状态

python实现批量变更阿里云DNS解析记录状态

时间:2021-02-21 18:59:12

相关推荐

python实现批量变更阿里云DNS解析记录状态

包含两个脚本,一个是阿里云和维格表的同步脚本ali_dns.py,另一个是执行阿里云解析记录的开启暂停脚本ali_modify.py。

使用阿里云的sdk,ali_dns.py将所有域名解析拉取后写入维格表()中,在维格表添加状态字段,ali_modify.py脚本识别维格表中的状态去批量变更线上域名解析的状态。

ali_dns.py代码:

#!/usr/bin/env python#coding=utf-8import jsonfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkdomain.request.v0129.QueryDomainListRequest import QueryDomainListRequestfrom aliyunsdkalidns.request.v0109.DescribeDomainsRequest import DescribeDomainsRequestfrom aliyunsdkalidns.request.v0109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequestfrom aliyunsdkcore.auth.credentials import AccessKeyCredentialfrom aliyunsdkcore.auth.credentials import StsTokenCredentialfrom vika import Vikaimport timeimport sysimport osimport subprocessdef get_vige_index(vika,vika_index_id):datasheet = vika.datasheet(vika_index_id, field_key="name")records = datasheet.records.all()for record in records:tj_ali_sheet = record.json().get('tianjin_ali')bj_ali_sheet = record.json().get('beijing_ali')breakreturn tj_ali_sheet,bj_ali_sheetdef tj_viga_get(vika,tj_ali_sheet):# 通过 datasheetId 来指定要从哪张维格表操作数据。datasheet = vika.datasheet(tj_ali_sheet, field_key="name")# 返回所有记录的集合records = datasheet.records.all()tj_ali_viga_list = []for record in records:tj_ali_viga_list.append(record.json())return tj_ali_viga_listdef bj_viga_get(vika,bj_ali_sheet):# 通过 datasheetId 来指定要从哪张维格表操作数据。datasheet = vika.datasheet(bj_ali_sheet, field_key="name")# 返回所有记录的集合records = datasheet.records.all()bj_ali_viga_list = []for record in records:bj_ali_viga_list.append(record.json())return bj_ali_viga_listdef tj_viga_del(vika,tj_ali_sheet,id):# 通过 datasheetId 来指定要从哪张维格表操作数据。datasheet = vika.datasheet(tj_ali_sheet, field_key="name")record = datasheet.records.get(id=id)# 删除单条记录record.delete()# time.sleep(1)def bj_viga_del(vika,bj_ali_sheet,id):# 通过 datasheetId 来指定要从哪张维格表操作数据。datasheet = vika.datasheet(bj_ali_sheet, field_key="name")record = datasheet.records.get(id=id)# 删除单条记录record.delete()# time.sleep(1)def tj_viga_update(tj_ali_sheet,vika,status,line,weight,type,rr,domain,ip,id,option='run'):# 通过 datasheetId 来指定要从哪张维格表操作数据。datasheet = vika.datasheet(tj_ali_sheet, field_key="name")row = datasheet.records.get(id=id)row.update({"status": "%s" %status,"line": "%s" %line,"type": "%s" %type,"rr": "%s" %rr,"domain": "%s" %domain,"ip": "%s" %ip,"weight": weight,"id": "%s" %id,"option": "%s" %option})def bj_viga_update(bj_ali_sheet,vika,status,line,weight,type,rr,domain,ip,id,option='run'):# 通过 datasheetId 来指定要从哪张维格表操作数据。datasheet = vika.datasheet(bj_ali_sheet, field_key="name")row = datasheet.records.get(id=id)row.update({"status": "%s" %status,"line": "%s" %line,"type": "%s" %type,"rr": "%s" %rr,"domain": "%s" %domain,"ip": "%s" %ip,"weight": weight,"id": "%s" %id,"option": "%s" %option})def tj_viga_add(tj_ali_sheet,vika,status,line,weight,type,rr,domain,ip,id,option='run'):# 通过 datasheetId 来指定要从哪张维格表操作数据。datasheet = vika.datasheet(tj_ali_sheet, field_key="name")row = datasheet.records.create({"status": "%s" %status,"line": "%s" %line,"type": "%s" %type,"rr": "%s" %rr,"domain": "%s" %domain,"ip": "%s" %ip,"weight": weight,"id": "%s" %id,"option": "%s" %option})def bj_viga_add(bj_ali_sheet,vika,status,line,weight,type,rr,domain,ip,id,option='run'):# 通过 datasheetId 来指定要从哪张维格表操作数据。datasheet = vika.datasheet(bj_ali_sheet, field_key="name")row = datasheet.records.create({"status": "%s" %status,"line": "%s" %line,"type": "%s" %type,"rr": "%s" %rr,"domain": "%s" %domain,"ip": "%s" %ip,"weight": weight,"id": "%s" %id,"option": "%s" %option})def tj_ali_domain_list(vika,tj_ali_client,tj_ali_sheet):ali_request = DescribeDomainsRequest()ali_request.set_accept_format('json')ali_request.set_PageNumber(1)ali_request.set_PageSize(100)ali_response = tj_ali_client.do_action_with_exception(ali_request)ali_data = json.loads(str(ali_response, encoding='utf-8'))tj_ali_list = []for i in ali_data.get('Domains').get('Domain'):tj_ali_list = tj_ali_ns_request(vika,i["DomainName"],tj_ali_client,tj_ali_sheet,tj_ali_list)return tj_ali_listdef bj_ali_domain_list(vika,bj_ali_client,bj_ali_sheet):ali_request = DescribeDomainsRequest()ali_request.set_accept_format('json')ali_request.set_PageNumber(1)ali_request.set_PageSize(100)ali_response = bj_ali_client.do_action_with_exception(ali_request)ali_data = json.loads(str(ali_response, encoding='utf-8'))bj_ali_list = []for i in ali_data.get('Domains').get('Domain'):bj_ali_list = bj_ali_ns_request(vika,i["DomainName"],bj_ali_client,bj_ali_sheet,bj_ali_list)return bj_ali_listdef tj_ali_ns_request(vika,domain,tj_ali_client,tj_ali_sheet,tj_ali_list):request = DescribeDomainRecordsRequest()request.set_accept_format('json')request.set_DomainName(domain)request.set_PageSize(500)response = tj_ali_client.do_action_with_exception(request)ali_data = json.loads(str(response, encoding='utf-8'))for i in ali_data.get('DomainRecords').get('Record'):if 'Weight' not in i:weight = 0else:weight = i['Weight']tj_ali_dict = dict(domain = i['DomainName'], rr = i['RR'], type = i['Type'], ip = i['Value'], line = i['Line'], weight = weight, id = i['RecordId'], status = i['Status'])tj_ali_list.append(tj_ali_dict)return tj_ali_listdef bj_ali_ns_request(vika,domain,bj_ali_client,bj_ali_sheet,bj_ali_list):request = DescribeDomainRecordsRequest()request.set_accept_format('json')request.set_DomainName(domain)request.set_PageSize(500)response = bj_ali_client.do_action_with_exception(request)ali_data = json.loads(str(response, encoding='utf-8'))for i in ali_data.get('DomainRecords').get('Record'):if 'Weight' not in i:weight = 0else:weight = i['Weight']bj_ali_dict = dict(domain = i['DomainName'], rr = i['RR'], type = i['Type'], ip = i['Value'], line = i['Line'], weight = weight, id = i['RecordId'], status = i['Status'])bj_ali_list.append(bj_ali_dict)return bj_ali_listdef tianjin(vika,tj_access_key,tj_secret_key,tj_ali_sheet):tj_ali_viga_list = tj_viga_get(vika,tj_ali_sheet)tj_ali_client = AcsClient(tj_access_key, tj_secret_key) #tianjin_aliyuntj_ali_list = tj_ali_domain_list(vika,tj_ali_client,tj_ali_sheet)middle_list = []for i in tj_ali_list:for j in tj_ali_viga_list:if i['id'] == j['id']:if i['type'] == j['type'] and i['rr'] == j['rr'] and i['domain'] == j['domain'] and i['ip'] == j['ip'] and i['line'] == j['line'] and i['weight'] == j['weight'] and i['status'] == j['status']:passelse:tj_viga_update(tj_ali_sheet,vika,i['status'],i['line'],i['weight'],i['type'],i['rr'],i['domain'],i['ip'],i['id'])middle_list.append(i['id'])else:passfor i in tj_ali_viga_list:if i['id'] not in middle_list:tj_viga_del(vika,tj_ali_sheet,i['id'])else:passfor i in tj_ali_list:if i['id'] not in middle_list:if 'weight' not in i:weight = 0else:weight = i['weight']tj_viga_add(tj_ali_sheet,vika,i['status'],i['line'],weight,i['type'],i['rr'],i['domain'],i['ip'],i['id'])else:passdef beijing(vika,bj_access_key,bj_secret_key,bj_ali_sheet):bj_ali_viga_list = bj_viga_get(vika,bj_ali_sheet)bj_ali_client = AcsClient(bj_access_key, bj_secret_key) #beijing_aliyunbj_ali_list = bj_ali_domain_list(vika,bj_ali_client,bj_ali_sheet)middle_list = []for i in bj_ali_list:for j in bj_ali_viga_list:if i['id'] == j['id']:if i['type'] == j['type'] and i['rr'] == j['rr'] and i['domain'] == j['domain'] and i['ip'] == j['ip'] and i['line'] == j['line'] and i['weight'] == j['weight'] and i['status'] == j['status']:passelse:bj_viga_update(bj_ali_sheet,vika,i['status'],i['line'],i['weight'],i['type'],i['rr'],i['domain'],i['ip'],i['id'])middle_list.append(i['id'])else:passfor i in bj_ali_viga_list:if i['id'] not in middle_list:bj_viga_del(vika,bj_ali_sheet,i['id'])else:passfor i in bj_ali_list:if i['id'] not in middle_list:if 'weight' not in i:weight = 0else:weight = i['weight']bj_viga_add(bj_ali_sheet,vika,i['status'],i['line'],weight,i['type'],i['rr'],i['domain'],i['ip'],i['id'])else:passdef get_ali_key(pms_api_token):dev_null = open(os.devnull, 'w')response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/924/accounts/1587/password' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)vika_token = res['operation']['Details']['PASSWORD']response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/1213/accounts/1850' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)for i in res['operation']['Details']['CUSTOM FIELD']:if i['CUSTOMFIELDLABEL'] == 'AK':bj_access_key = i['CUSTOMFIELDVALUE']response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/1213/accounts/1850/password' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)bj_secret_key = res['operation']['Details']['PASSWORD']response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/1214/accounts/1851' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)for i in res['operation']['Details']['CUSTOM FIELD']:if i['CUSTOMFIELDLABEL'] == 'AK':tj_access_key = i['CUSTOMFIELDVALUE']response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/1214/accounts/1851/password' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)tj_secret_key = res['operation']['Details']['PASSWORD']return vika_token,bj_access_key,bj_secret_key,tj_access_key,tj_secret_keyif __name__ == '__main__':vika_index_id = sys.argv[1] #维格表index的sheet_idpms_api_token = sys.argv[2] #pms的api用户的tokenvika_token,bj_access_key,bj_secret_key,tj_access_key,tj_secret_key = get_ali_key(pms_api_token)vika = Vika(vika_token)tj_ali_sheet,bj_ali_sheet = get_vige_index(vika,vika_index_id)tianjin(vika,tj_access_key,tj_secret_key,tj_ali_sheet) #tianjin_aliyunbeijing(vika,bj_access_key,bj_secret_key,bj_ali_sheet) #beijing_aliyun

ali_modify.py

#!/usr/bin/env python#coding=utf-8import osimport subprocessimport sysfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkcore.auth.credentials import AccessKeyCredentialfrom aliyunsdkcore.auth.credentials import StsTokenCredentialfrom aliyunsdkalidns.request.v0109.SetDomainRecordStatusRequest import SetDomainRecordStatusRequestfrom aliyunsdkdomain.request.v0129.QueryDomainListRequest import QueryDomainListRequestfrom aliyunsdkalidns.request.v0109.DescribeDomainsRequest import DescribeDomainsRequestfrom aliyunsdkalidns.request.v0109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequestfrom vika import Vikaimport jsondef get_vige_index(vika,vika_index_id):datasheet = vika.datasheet(vika_index_id, field_key="name")records = datasheet.records.all()for record in records:ali_domain_tj = record.json().get('Domain_tj')action = record.json().get('Action')tj_ali_sheet = record.json().get('tianjin_ali')bj_ali_sheet = record.json().get('beijing_ali')ali_domain_bj = record.json().get('Domain_bj')breakreturn ali_domain_tj,action,tj_ali_sheet,bj_ali_sheet,ali_domain_bjdef request_tj_lb_vige(vika,ali_domain,tj_ali_client,action,tj_ali_sheet):datasheet = vika.datasheet(tj_ali_sheet, field_key="name")#records = datasheet.records.all()records = datasheet.records.filter(option="pause")if records:for record in records:if record.json().get('domain') == ali_domain:ali_id = record.json().get('id')#print(ali_id)tianjin_aliyun(ali_id,tj_ali_client,action)else:domain = record.json().get('domain')print('%s存在option是pause的解析记录' %domain)else:print("维格表中没有option是pause的解析记录")def request_bj_lb_vige(vika,ali_domain,bj_ali_client,action,bj_ali_sheet):datasheet = vika.datasheet(bj_ali_sheet, field_key="name")#records = datasheet.records.all()records = datasheet.records.filter(option="pause")if records:for record in records:if record.json().get('domain') == ali_domain:ali_id = record.json().get('id')#print(ali_id)beijing_aliyun(ali_id,bj_ali_client,action)else:domain = record.json().get('domain')print('%s存在option是pause的解析记录' %domain)else:print("维格表中没有option是pause的解析记录")def tianjin_aliyun(ali_id,tj_ali_client,action):request = SetDomainRecordStatusRequest()request.set_accept_format('json')if action == '启用':request.set_Status("enable")#开启域名解析elif action == '暂停':request.set_Status("disable")#暂停域名解析else:print('输入错误,开启解析请输入y,暂停解析请输入n')request.set_RecordId(ali_id)response = tj_ali_client.do_action_with_exception(request)print(str(response, encoding='utf-8'))def beijing_aliyun(ali_id,bj_ali_client,action):request = SetDomainRecordStatusRequest()request.set_accept_format('json')if action == '启用':request.set_Status("enable")#开启域名解析elif action == '暂停':request.set_Status("disable")#暂停域名解析else:print('输入错误,开启解析请输入y,暂停解析请输入n')request.set_RecordId(ali_id)response = bj_ali_client.do_action_with_exception(request)print(str(response, encoding='utf-8'))def get_ali_key(pms_api_token):dev_null = open(os.devnull, 'w')response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/924/accounts/1587/password' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)vika_token = res['operation']['Details']['PASSWORD']response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/1213/accounts/1850' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)for i in res['operation']['Details']['CUSTOM FIELD']:if i['CUSTOMFIELDLABEL'] == 'AK':bj_access_key = i['CUSTOMFIELDVALUE']response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/1213/accounts/1850/password' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)bj_secret_key = res['operation']['Details']['PASSWORD']response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/1214/accounts/1851' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)for i in res['operation']['Details']['CUSTOM FIELD']:if i['CUSTOMFIELDLABEL'] == 'AK':tj_access_key = i['CUSTOMFIELDVALUE']response = subprocess.check_output('curl -k -H "AUTHTOKEN:%s" /restapi/json/v1/resources/1214/accounts/1851/password' %pms_api_token, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')res = json.loads(response)tj_secret_key = res['operation']['Details']['PASSWORD']return vika_token,bj_access_key,bj_secret_key,tj_access_key,tj_secret_keydef request_vige_domain(vika,tj_ali_sheet,record_id):datasheet = vika.datasheet(tj_ali_sheet, field_key="name")return datasheet.records.all(recordIds=record_id)[0].json()['domain']if __name__ == '__main__':vika_index_id = sys.argv[1] #维格表index的sheet_idpms_api_token = sys.argv[2] #pms的api用户的tokenvika_token,bj_access_key,bj_secret_key,tj_access_key,tj_secret_key = get_ali_key(pms_api_token)vika = Vika(vika_token) #vige_tokentj_credentials = AccessKeyCredential(tj_access_key, tj_secret_key) #tianjin_admintj_ali_client = AcsClient(region_id='cn-beijing', credential=tj_credentials)bj_credentials = AccessKeyCredential(bj_access_key, bj_secret_key) #beijing_adminbj_ali_client = AcsClient(region_id='cn-beijing', credential=bj_credentials)ali_domain_tj,action,tj_ali_sheet,bj_ali_sheet,ali_domain_bj = get_vige_index(vika,vika_index_id)print(action)if ali_domain_tj:for i in ali_domain_tj:ali_domain = request_vige_domain(vika,tj_ali_sheet,i)print(ali_domain)request_tj_lb_vige(vika,ali_domain,tj_ali_client,action,tj_ali_sheet)#天津的维格表else:passif ali_domain_bj:for i in ali_domain_bj:ali_domain = request_vige_domain(vika,bj_ali_sheet,i)print(ali_domain)request_bj_lb_vige(vika,ali_domain,bj_ali_client,action,bj_ali_sheet)#北京的维格表else:pass

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。