【发布时间】:2014-05-30 14:39:10
【问题描述】:
我正在使用库 'resourceRecordSets()' 来列出我的条目并删除一些记录(例如:'Type MX')。
但我尝试删除它:
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': [
moddata# record the deleting
],
'ttl': ttl,
'type': type
}
没有成功:(
与:
{
'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
}
成功:)
但我需要它是自动的。
有人可以帮助我吗?
谢谢
【问题讨论】:
-
我无法理解您的问题。您能否隔离导致 delete 不发生的特定部分?此处的示例 (developers.google.com/cloud-dns/api/v1beta1/changes/create) 创建了一个具有“删除”条目的更改——您的情况有何不同?
-
您好,谢谢,我设法做到了:) 我在插入字典“BODY”中列出的值时徘徊,明天我发布我的代码。干杯。
-
很高兴听到 - 绝对发布问题和代码的更新以供世界其他地方查看...
标签: python dns google-api google-cloud-platform google-cloud-dns