dnspython3 удалить хост из записи A - PullRequest
0 голосов
/ 23 октября 2018

Рассмотрим этот сценарий: с помощью nsupdate я могу удалить IP из записи A следующим способом:

update delete test-record.mydomain.com 60 A 172.16.1.4

Это моя наивная реализация с dnspython, где bind_host - наш сервер связывания, имя_домена -"mydomain.com."и sub_domain - это «test-record», а ip - «172.16.1.4».

def delete_dns_record(self, bind_host, domain_name, sub_domain, ip):
    update = dns.update.Update(domain_name)
    update.delete(sub_domain, '60', 'A', ip)
    response = dns.query.tcp(update, bind_host, timeout=10)
    return response

При запуске функция выдаст следующую ошибку:

Traceback (most recent call last):
File "dns_magic/check.py", line 136, in <module>
dnstest()
File "dns_magic/check.py", line 134, in dnstest
print(hc.delete_dns_record('1.2.3.4', 'mydomain.com.', 'test-record', '172.16.1.4' ))
File "dns_magic/check.py", line 106, in delete_dns_record
update.delete(sub_domain, '60', 'A', ip)
File "dns_magic/lib/python3.6/site-packages/dns/update.py", line 160, in delete
rdtype = dns.rdatatype.from_text(rdtype)
File "dns_magic/lib/python3.6/site-packages/dns/rdatatype.py", line 214, in from_text
raise UnknownRdatatype
dns.rdatatype.UnknownRdatatype: DNS resource record type is unknown.

Есть идеи, как продолжить?Я также открыт для альтернативных методов с Python.

ОБНОВЛЕНИЕ Рабочее решение:

def delete_dns_record(bind_host, domain_name, sub_domain, ip):
    update = dns.update.Update(domain_name)
    update.delete(sub_domain, dns.rdatatype.A, ip)
    response = dns.query.tcp(update, bind_host, timeout=10)
    return response

1 Ответ

0 голосов
/ 26 октября 2018

Ваши аргументы Update.delete() неверны - вторым аргументом должен быть Rdataset, Rdata или rdtype (либо Rdatatype, либо строка).

Поскольку вы передаете строку каквторой аргумент, он рассматривается как rdtype - поэтому вы должны передать 'A' в качестве второго аргумента.Если вы передаете больше аргументов после rdtype, передача IP должна работать, но я не уверен на 100%, что еще разрешено;Я предполагаю, что прохождение TTL не будет работать.

...