Python代码
#!/usr/bin/env python3# -*- coding: utf-8 -*-import jsonimport yamlimport sysfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkalidns.request.v0109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequestfrom aliyunsdkalidns.request.v0109.UpdateDomainRecordRequest import UpdateDomainRecordRequestdef AliAccessKey(id,Secret,region):try:client = AcsClient(id, Secret, region)return clientexcept Exception as e:print("验证aliyun key失败")print(e)sys.exit(-1)def read_yaml(filename):try:yaml_file = open(filename,"rb")yaml_data = yaml.safe_load(yaml_file)yaml_file.close()return yaml_dataexcept Exception as e:print("读取配置文件错误")print(e)sys.exit(-1)def GetDNSRecordId(yaml_data,client,DomainName):try:request = DescribeDomainRecordsRequest()request.set_accept_format('json')request.set_DomainName(DomainName)response = client.do_action_with_exception(request)json_data = json.loads(str(response, encoding='utf-8'))for RecordId in json_data['DomainRecords']['Record']:if yaml_data['UserData']['RR'] == RecordId['RR']:return RecordId['RecordId']except Exception as e:print("获取RecordId失败")print(e)sys.exit(-1)def UpdateDomainRecord(client,yaml_data,RecordId):try:request = UpdateDomainRecordRequest()request.set_accept_format('json')if 'Auto_Lines' == yaml_data['UserData']['UpdateDomain']:DomainValue = sys.argv[1]else :DomainValue = yaml_data['UserData']['UpdateDomain']request.set_Value(DomainValue)request.set_Type(yaml_data['UserData']['DomainType'])request.set_RR(yaml_data['UserData']['RR'])request.set_RecordId(RecordId)response = client.do_action_with_exception(request)print("更新域名解析成功")print("域名:" + yaml_data['UserData']['DomainName'] + " 主机:" + yaml_data['UserData']['RR'] + " 记录类型:" + yaml_data['UserData']['DomainType'] + " 记录值:" + DomainValue)except Exception as e:print("更新域名解析失败")print(e)def main():yaml_data = read_yaml('conf/conf.yaml')client = AliAccessKey(yaml_data['AliyunData']['AccessKey_ID'],yaml_data['AliyunData']['Access_Key_Secret'],yaml_data['AliyunData']['region_id'])RecordId = GetDNSRecordId(yaml_data,client,yaml_data['UserData']['DomainName'])UpdateDomainRecord(client,yaml_data,RecordId)if __name__ == "__main__" :main()'''遇到问题没人解答?小编创建了一个Python学习交流QQ群:85766 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''
安装依赖
pip3 install pyyamlpip3 install aliyun-python-sdk-core-v3pip3 install aliyun-python-sdk-alidns==2.0.6
配置文件介绍
所在路径: ./conf/conf.yaml
'''遇到问题没人解答?小编创建了一个Python学习交流QQ群:85766 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''# 阿里云更新域名解析文档# /document_detail/29776.html# /document_detail/29774.html# 阿里云信息,从阿里云获取填写即可AliyunData:# 阿里云的AccessKey_ID , Access_Key_Secret , region_id# 获取方法,参考文档: /knowledge_detail/38738.htmlAccessKey_ID: 'AccessKey'Access_Key_Secret: 'Secret'region_id: "cn-hangzhou"# DNS解析信息UserData:# 需要修改的域名DomainName: '需要修改的域名'# 解析的主机RR: '需要修改的主机'# 解析的记录DomainType: '需要修改的记录类型'# 解析更新的值,如果填写 Auto_Lines ,则从命令行获取UpdateDomain: 'Auto_Lines'#UpdateDomain: '127.0.0.1'
根据配置文档来解析
需要将配置文件中的UpdateDomain 修改为需要修改解析的值,执行main.py即可
>python main.py更新域名解析成功域名:****** 主机:****** 记录类型:A 记录值:192.168.1.100>
根据用户命令行指定来解析
需要将配置文件中的UpdateDomain 修改为Auto_Lines,执行main.py 需要解析的地址 即可
>python main.py 192.168.1.101更新域名解析成功域名:****** 主机:****** 记录类型:A 记录值:192.168.1.101>