Python 删除Google云DNS中的记录时出错
我正在使用库“resourceRecordSets()”列出我的条目,并删除一些记录(例如:“键入MX”) 但我尝试用以下方法删除它:Python 删除Google云DNS中的记录时出错,python,dns,google-api,google-cloud-platform,google-cloud-dns,Python,Dns,Google Api,Google Cloud Platform,Google Cloud Dns,我正在使用库“resourceRecordSets()”列出我的条目,并删除一些记录(例如:“键入MX”) 但我尝试用以下方法删除它: response = service.changes().create(project=PROJECT_NAME,managedZone=ZONE_NAME, body=BODY).execute() 同样,记录SOA的增量也是如此 但我有一个错误: "Invalid value for 'entity.change.deletions[1].rrdata[0
response = service.changes().create(project=PROJECT_NAME,managedZone=ZONE_NAME, body=BODY).execute()
同样,记录SOA的增量也是如此
但我有一个错误:
"Invalid value for 'entity.change.deletions[1].rrdata[0]': '1 aspmx.l.google.com.','5 alt1.aspmx.l.google.com.','5 alt2.aspmx.l.google.com.','10 aspmx2.googlemail.com.','10 aspmx3.googlemail.com.','10 aspmx4.googlemail.com.','10 aspmx5.googlemail.com.'
但如果我插入以下语法:
'5 alt1.aspmx.l.google.com.','5 alt2.aspmx.l.google.com.','10 aspmx2.googlemail.com.','10 aspmx3.googlemail.com.','10 aspmx4.googlemail.com.','10 aspmx5.googlemail.com.'
在我的“身体”里,我成功了
按照我的代码:
class DeleteRecordDNS(webapp2.RequestHandler):
@decorator.oauth_aware
def get(self,name,ttl,rrdata,type,ZONE_NAME):
PROJECT_NAME = 'avian-mile-538'
service = managerdns.authenticate()
#Lista records, pega o SOA para fazer incremento[inc] para deletions e addtions
soa = service.resourceRecordSets().list(project=PROJECT_NAME,managedZone=ZONE_NAME).execute()
mxsmod=''
#acertando os caracters
for records in soa['rrsets']:
if records['type'] == type:
entmx = records['rrdatas']
for mxs in entmx:
mxsmod = mxsmod + ","+"'"+mxs +"'"
moddata = mxsmod[2:len(mxsmod)-1]
strmoddata=str(moddata)
txt = strmoddata[2:len(strmoddata)-1]
#incrementando SOA
for records in soa['rrsets']:
if records['type'] == 'SOA':
entsoa = records['rrdatas']
modstr = str(entsoa)
mod = modstr.split()
#removendo o 'u' e '[]'
modsem = mod[6]
modsenM = modsem[0:3]
modU = mod[0]
modsU = modU[3:34]
inc = int(mod[2])
final = inc+1
res = str(final)
#rdata soa modificado
soainc = modsU + ' '+ mod[1] + ' '+ res + ' '+ mod[3] + ' '+ mod[4] + ' '+ mod[5] + ' '+ modsenM
soaorig = modsU + ' '+ mod[1] + ' '+ mod[2] + ' '+ mod[3] + ' '+ mod[4] + ' '+ mod[5] + ' '+ modsenM
BODY = {
'additions': [
{
'kind': 'dns#resourceRecordSet',
'name': name,
'rrdatas': [
soainc #rrdata SOA com inc
],
'ttl': 21600,
'type': "SOA"
}
],
'deletions': [
{
'kind': 'dns#resourceRecordSet',
'name': name,
"rrdatas": [
soaorig #rrdata SOA original
],
'ttl': 21600,
'type': 'SOA'
},
{
'kind': 'dns#resourceRecordSet',
'name': name,
'rrdatas': [
moddata# record the deleting
],
'ttl': ttl,
'type': type
}
]
}
response = service.changes().create(project=PROJECT_NAME,
managedZone=ZONE_NAME,
body=BODY).execute()
self.redirect('/listadns/' + ZONE_NAME)
与:
没有成功:(
与:
{
'kind': 'dns#resourceRecordSet',
'name': name,
'rrdatas': [
'1 aspmx.l.google.com.','5 alt1.aspmx.l.google.com.','5 alt2.aspmx.l.google.com.','10 aspmx2.googlemail.com.','10 aspmx3.googlemail.com.','10 aspmx4.googlemail.com.','10 aspmx5.googlemail.com.'
],
'ttl': ttl,
'type': type
}
成功:)
但我需要的是自动的
有人能帮我吗
谢谢我不明白需要在列表中的字典的每个位置插入值,读取“rrdatas” 比我想的更容易:) 以解析方式遵循我的代码: 首先,我用列表、位置、值和键创建字典,在我读取需要删除的值之后,最后,我在列表“rrdatas”中的“BODY”中插入删除DNS条目的内容。此步骤可用于删除所有类型的DNS。
BODY = {
'additions': [
{
'kind': 'dns#resourceRecordSet',
'name': nomesoa['dnsName'],
'rrdatas': [
soainc #rrdata SOA com inc
],
'ttl': 21600,
'type': "SOA"
}
],
'deletions': [
{
'kind': 'dns#resourceRecordSet',
'name': nomesoa['dnsName'],
"rrdatas": [
soaorig #rrdata SOA original
],
'ttl': 21600,
'type': 'SOA'
},
{
'kind': 'dns#resourceRecordSet',
'name': name,
'rrdatas': [
],
'ttl': ttl,
'type': type
}
]
}
#Lendo a lista que contem os reccords
for records in soa['rrsets']:
if records['type'] == type:
#inserindo no body acima
BODY['deletions'][1]['rrdatas']=records['rrdatas']
#Removendo Record
response = service.changes().create(project=PROJECT_NAME,
managedZone=ZONE_NAME,
body=BODY).execute()
**并遵循我的完整功能,想法,请发送评论**
class DeleteRecordDNS(webapp2.RequestHandler):
@decorator.oauth_aware
def get(self,name,ttl,rrdata,type,ZONE_NAME):
PROJECT_NAME = 'avian-mile-538'
service = managerdns.authenticate()
#Lista records, pega o SOA para fazer incremento[inc] para deletions e addtions
soa = service.resourceRecordSets().list(project=PROJECT_NAME,managedZone=ZONE_NAME).execute()
#para pegar nome da domain para record SOA
nomesoa = service.managedZones().get(project=PROJECT_NAME,managedZone=ZONE_NAME).execute()
#incrementando SOA
for records in soa['rrsets']:
if records['type'] == 'SOA':
entsoa = records['rrdatas']
modstr = str(entsoa)
mod = modstr.split()
#removendo o 'u' e '[]'
modsem = mod[6]
modsenM = modsem[0:3]
modU = mod[0]
modsU = modU[3:34]
inc = int(mod[2])
final = inc+1
res = str(final)
#rdata soa modificado
soainc = modsU + ' '+ mod[1] + ' '+ res + ' '+ mod[3] + ' '+ mod[4] + ' '+ mod[5] + ' '+ modsenM
soaorig = modsU + ' '+ mod[1] + ' '+ mod[2] + ' '+ mod[3] + ' '+ mod[4] + ' '+ mod[5] + ' '+ modsenM
BODY = {
'additions': [
{
'kind': 'dns#resourceRecordSet',
'name': nomesoa['dnsName'],
'rrdatas': [
soainc #rrdata SOA com inc
],
'ttl': 21600,
'type': "SOA"
}
],
'deletions': [
{
'kind': 'dns#resourceRecordSet',
'name': nomesoa['dnsName'],
"rrdatas": [
soaorig #rrdata SOA original
],
'ttl': 21600,
'type': 'SOA'
},
{
'kind': 'dns#resourceRecordSet',
'name': name,
'rrdatas': [
],
'ttl': ttl,
'type': type
}
]
}
#Lendo a lista que contem os reccords
for records in soa['rrsets']:
if records['type'] == type:
#inserindo no body acima
BODY['deletions'][1]['rrdatas']=records['rrdatas']
#Removendo Record
response = service.changes().create(project=PROJECT_NAME,
managedZone=ZONE_NAME,
body=BODY).execute()
self.redirect('/listadns/' + ZONE_NAME)
我很难理解你的问题。你能找出导致删除不发生的特定部分吗?这里的示例()创建了一个带有“删除”条目的更改--您的情况有什么不同?您好,谢谢,我设法做到了:)我在插入字典“BODY”中列出的值时走神了“明天我会发布我的代码。干杯。很高兴听到——一定要发布问题和代码的更新,让世界其他地方看到。。。
class DeleteRecordDNS(webapp2.RequestHandler):
@decorator.oauth_aware
def get(self,name,ttl,rrdata,type,ZONE_NAME):
PROJECT_NAME = 'avian-mile-538'
service = managerdns.authenticate()
#Lista records, pega o SOA para fazer incremento[inc] para deletions e addtions
soa = service.resourceRecordSets().list(project=PROJECT_NAME,managedZone=ZONE_NAME).execute()
#para pegar nome da domain para record SOA
nomesoa = service.managedZones().get(project=PROJECT_NAME,managedZone=ZONE_NAME).execute()
#incrementando SOA
for records in soa['rrsets']:
if records['type'] == 'SOA':
entsoa = records['rrdatas']
modstr = str(entsoa)
mod = modstr.split()
#removendo o 'u' e '[]'
modsem = mod[6]
modsenM = modsem[0:3]
modU = mod[0]
modsU = modU[3:34]
inc = int(mod[2])
final = inc+1
res = str(final)
#rdata soa modificado
soainc = modsU + ' '+ mod[1] + ' '+ res + ' '+ mod[3] + ' '+ mod[4] + ' '+ mod[5] + ' '+ modsenM
soaorig = modsU + ' '+ mod[1] + ' '+ mod[2] + ' '+ mod[3] + ' '+ mod[4] + ' '+ mod[5] + ' '+ modsenM
BODY = {
'additions': [
{
'kind': 'dns#resourceRecordSet',
'name': nomesoa['dnsName'],
'rrdatas': [
soainc #rrdata SOA com inc
],
'ttl': 21600,
'type': "SOA"
}
],
'deletions': [
{
'kind': 'dns#resourceRecordSet',
'name': nomesoa['dnsName'],
"rrdatas": [
soaorig #rrdata SOA original
],
'ttl': 21600,
'type': 'SOA'
},
{
'kind': 'dns#resourceRecordSet',
'name': name,
'rrdatas': [
],
'ttl': ttl,
'type': type
}
]
}
#Lendo a lista que contem os reccords
for records in soa['rrsets']:
if records['type'] == type:
#inserindo no body acima
BODY['deletions'][1]['rrdatas']=records['rrdatas']
#Removendo Record
response = service.changes().create(project=PROJECT_NAME,
managedZone=ZONE_NAME,
body=BODY).execute()
self.redirect('/listadns/' + ZONE_NAME)