脚本介绍

    1.意在批量添加dns解析

    2.实现基于阿里云dns解析的操作

    3.具体脚本实现查询dns解析,删除相关的dns解析,添加相关的dns解析

    4.传参的方式进行调用

相关的代码如下:

#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.AddDomainRecordRequest import AddDomainRecordRequest
from aliyunsdkalidns.request.v20150109.DeleteDomainRecordRequest import DeleteDomainRecordRequest
#pip install aliyun-python-sdk-alidns==2.6.29 pip install aliyun-python-sdk-core
import json
import sys
import getopt
class DnsOper:
def __init__(self, domain="*.com", name="jumpserver2", value="192.168.1.123"):
self.domain=domain
self.name=name
self.value=value
self.result={}

def AliAccessKey(self):
try:
client = AcsClient(
"*",
"*",
"cn-shanghai"
);
return client
except Exception as e:
print("aliyun 验证失败")
print(e)
sys.exit(-1)

def ReadConfig(self):
pass

def GetdnsRecord(self, client):
try:
request = DescribeDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(self.domain)
response = client.do_action_with_exception(request)
json_data = str(response, encoding='utf-8')
data=json.loads(json_data)
for i in data["DomainRecords"]["Record"]:
if i["RR"] == self.name:
print(i["Value"])
self.result[self.name] = i["Value"]
self.result["RecordId"] = i["RecordId"]
if len(self.result) == 0:
self.result[self.name] = None
print(self.result)
return self.result
except Exception as e:
print(e)

def AdddnsRecord(self, client):
try:
request = AddDomainRecordRequest()
request.set_accept_format('json')
request.set_DomainName(self.domain)
request.set_RR(self.name)
request.set_Type("A")
request.set_Value(self.value)
response = client.do_action_with_exception(request)
print("add dns %s success %s"%(self.name,str(response, encoding='utf-8')))
except Exception as e:
print("add dns %s error %s" %(self.name, e))

def DeletednsRecord(self,client):
try:
search_data = self.GetdnsRecord(client)
record_id = search_data["RecordId"]
request = DeleteDomainRecordRequest()
request.set_accept_format('json')
request.set_RecordId(record_id)
response = client.do_action_with_exception(request)
print("delete dns %s sucess %s" % (self.name, str(response, encoding='utf-8')))
except Exception as e:
print("error not found %s"%e)

def args_dns(self):
s={}
if len(sys.argv) != 5:
print("usage: python %s -d domain -n name -v value_ip"% sys.argv[0])
exit("parameter error")
else:
try:
ops, args = getopt.getopt(sys.argv[1:], "hd:n:v:", ["help", "domain=", "name=", "value_ip="])
for o, a in ops:
if o in ("-h", "--help"):
print("usage: python %s -d domain -n name -v value_ip"% sys.argv[0])
sys.exit()
if o in ("-d", "--domain"):
s["domain"] = a
if o in ("-n", "--name"):
s["name"] = a
if o in ("-v", "--value_ip"):
s["value_ip"]=a
except getopt.GetoptError:
print("error")
return s



if __name__ == "__main__":
s = {}
if len(sys.argv) != 9:
print("usage: python %s -d domain -n name -v value_ip -m model(add:delete:search)" % sys.argv[0])
exit("parameter error")
else:
try:
ops, args = getopt.getopt(sys.argv[1:], "hd:n:v:m:", ["help", "domain=", "name=", "value_ip=", "model"])
for o, a in ops:
if o in ("-h", "--help"):
print("usage: python %s -d domain -n name -v value_ip" % sys.argv[0])
sys.exit()
if o in ("-d", "--domain"):
s["domain"] = a
if o in ("-n", "--name"):
s["name"] = a
if o in ("-v", "--value_ip"):
s["value_ip"] = a
if o in ("-m", "--model"):
s["model"] = a
except getopt.GetoptError:
print("error")
dns = DnsOper(domain=s["domain"], name=s["name"], value=s["value_ip"])
client = dns.AliAccessKey()
if s["model"] == "add":
dns.AdddnsRecord(client)
elif s["model"] == "search":
dns.GetdnsRecord(client)
elif s["model"] == "delete":
dns.DeletednsRecord(client)
调用方式
"usage: python %s -d domain -n name -v value_ip -m model(add:delete:search)

需要aliyun账号的sk秘钥信息(自行登录aliyun 进行查看)