Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除Google云DNS中的记录时出错_Python_Dns_Google Api_Google Cloud Platform_Google Cloud Dns - Fatal编程技术网

Python 删除Google云DNS中的记录时出错

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

我正在使用库“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]': '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)