mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #34772 from kerick/ddns-port-work
ddns: Add support for user defined nameserver port/TSIG key algorithm
This commit is contained in:
commit
1534b143e2
3 changed files with 66 additions and 52 deletions
|
@ -86733,7 +86733,7 @@ with an extra period in the file, similar to this:
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.modules.ddns.add_host(zone, name, ttl, ip, nameserver=\(aq127.0.0.1\(aq, timeout=5 replace=True, **kwargs)
|
||||
.B salt.modules.ddns.add_host(zone, name, ttl, ip, nameserver=\(aq127.0.0.1\(aq, replace=True, timeout=5, port=53, **kwargs)
|
||||
Add, replace, or update the A and PTR (reverse) records for a host.
|
||||
.sp
|
||||
CLI Example:
|
||||
|
@ -86750,7 +86750,7 @@ salt ns1 ddns.add_host example.com host1 60 10.1.1.1
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.modules.ddns.delete(zone, name, rdtype=None, data=None, nameserver=\(aq127.0.0.1\(aq, timeout=5, **kwargs)
|
||||
.B salt.modules.ddns.delete(zone, name, rdtype=None, data=None, nameserver=\(aq127.0.0.1\(aq, timeout=5, port=53, **kwargs)
|
||||
Delete a DNS record.
|
||||
.sp
|
||||
CLI Example:
|
||||
|
@ -86767,7 +86767,7 @@ salt ns1 ddns.delete example.com host1 A
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.modules.ddns.delete_host(zone, name, nameserver=\(aq127.0.0.1\(aq, timeout=5, **kwargs)
|
||||
.B salt.modules.ddns.delete_host(zone, name, nameserver=\(aq127.0.0.1\(aq, timeout=5, port=53, **kwargs)
|
||||
Delete the forward and reverse records for a host.
|
||||
.sp
|
||||
Returns true if any records are deleted.
|
||||
|
@ -86786,7 +86786,7 @@ salt ns1 ddns.delete_host example.com host1
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.modules.ddns.update(zone, name, ttl, rdtype, data, nameserver=\(aq127.0.0.1\(aq, timeout=5, replace=False, **kwargs)
|
||||
.B salt.modules.ddns.update(zone, name, ttl, rdtype, data, nameserver=\(aq127.0.0.1\(aq, timeout=5, replace=False, port=53, **kwargs)
|
||||
Add, replace, or update a DNS record.
|
||||
nameserver must be an IP address and the minion running this module
|
||||
must have update privileges on that server.
|
||||
|
@ -201582,7 +201582,7 @@ Nitin Madhok <\fI\%nmadhok@clemson.edu\fP>
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.runners.ddns.add_host(zone, name, ttl, ip, keyname, keyfile, nameserver)
|
||||
.B salt.runners.ddns.add_host(zone, name, ttl, ip, keyname, keyfile, nameserver, timeout, port=53, keyalgorithm='hmac-md5')
|
||||
Create both A and PTR (reverse) records for a host.
|
||||
.sp
|
||||
CLI Example:
|
||||
|
@ -201591,7 +201591,7 @@ CLI Example:
|
|||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
salt\-run ddns.add_host domain.com my\-test\-vm 3600 10.20.30.40 my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1
|
||||
salt\-run ddns.add_host domain.com my\-test\-vm 3600 10.20.30.40 my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1 5
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
|
@ -201599,7 +201599,7 @@ salt\-run ddns.add_host domain.com my\-test\-vm 3600 10.20.30.40 my\-tsig\-key /
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.runners.ddns.create(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver)
|
||||
.B salt.runners.ddns.create(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, timeout, port=53, keyalgorithm='hmac-md5')
|
||||
Create a DNS record. The nameserver must be an IP address and the master running
|
||||
this runner must have create privileges on that server.
|
||||
.sp
|
||||
|
@ -201609,7 +201609,7 @@ CLI Example:
|
|||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
salt\-run ddns.create domain.com my\-test\-vm 3600 A 10.20.30.40 my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1
|
||||
salt\-run ddns.create domain.com my\-test\-vm 3600 A 10.20.30.40 my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1 5
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
|
@ -201617,7 +201617,7 @@ salt\-run ddns.create domain.com my\-test\-vm 3600 A 10.20.30.40 my\-tsig\-key /
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.runners.ddns.delete(zone, name, keyname, keyfile, nameserver, rdtype=None, data=None)
|
||||
.B salt.runners.ddns.delete(zone, name, keyname, keyfile, nameserver, timeout, rdtype=None, data=None, port=53, keyalgorithm='hmac-md5')
|
||||
Delete a DNS record.
|
||||
.sp
|
||||
CLI Example:
|
||||
|
@ -201626,7 +201626,7 @@ CLI Example:
|
|||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
salt\-run ddns.delete domain.com my\-test\-vm my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1 A
|
||||
salt\-run ddns.delete domain.com my\-test\-vm my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1 5 A
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
|
@ -201634,7 +201634,7 @@ salt\-run ddns.delete domain.com my\-test\-vm my\-tsig\-key /etc/salt/tsig.keyri
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.runners.ddns.delete_host(zone, name, keyname, keyfile, nameserver)
|
||||
.B salt.runners.ddns.delete_host(zone, name, keyname, keyfile, nameserver, timeout, port=53, keyalgorithm='hmac-md5')
|
||||
Delete both forward (A) and reverse (PTR) records for a host only if the
|
||||
forward (A) record exists.
|
||||
.sp
|
||||
|
@ -201644,7 +201644,7 @@ CLI Example:
|
|||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
salt\-run ddns.delete_host domain.com my\-test\-vm my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1
|
||||
salt\-run ddns.delete_host domain.com my\-test\-vm my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1 5
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
|
@ -201652,7 +201652,7 @@ salt\-run ddns.delete_host domain.com my\-test\-vm my\-tsig\-key /etc/salt/tsig.
|
|||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B salt.runners.ddns.update(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, replace=False)
|
||||
.B salt.runners.ddns.update(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, timeout, replace=False, port=53, keyalgorithm='hmac-md5')
|
||||
Replace, or update a DNS record. The nameserver must be an IP address and the master running
|
||||
this runner must have update privileges on that server.
|
||||
.sp
|
||||
|
@ -201670,7 +201670,7 @@ CLI Example:
|
|||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
salt\-run ddns.update domain.com my\-test\-vm 3600 A 10.20.30.40 my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1
|
||||
salt\-run ddns.update domain.com my\-test\-vm 3600 A 10.20.30.40 my\-tsig\-key /etc/salt/tsig.keyring 10.0.0.1 5
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
|
|
|
@ -76,7 +76,7 @@ def _get_keyring(keyfile):
|
|||
|
||||
|
||||
def add_host(zone, name, ttl, ip, nameserver='127.0.0.1', replace=True,
|
||||
timeout=5, **kwargs):
|
||||
timeout=5, port=53, **kwargs):
|
||||
'''
|
||||
Add, replace, or update the A and PTR (reverse) records for a host.
|
||||
|
||||
|
@ -86,7 +86,7 @@ def add_host(zone, name, ttl, ip, nameserver='127.0.0.1', replace=True,
|
|||
|
||||
salt ns1 ddns.add_host example.com host1 60 10.1.1.1
|
||||
'''
|
||||
res = update(zone, name, ttl, 'A', ip, nameserver, timeout, replace,
|
||||
res = update(zone, name, ttl, 'A', ip, nameserver, timeout, replace, port,
|
||||
**kwargs)
|
||||
if res is False:
|
||||
return False
|
||||
|
@ -102,13 +102,14 @@ def add_host(zone, name, ttl, ip, nameserver='127.0.0.1', replace=True,
|
|||
zone = '{0}.{1}'.format('.'.join(parts), 'in-addr.arpa.')
|
||||
name = '.'.join(popped)
|
||||
ptr = update(zone, name, ttl, 'PTR', fqdn, nameserver, timeout,
|
||||
replace, **kwargs)
|
||||
replace, port, **kwargs)
|
||||
if ptr:
|
||||
return True
|
||||
return res
|
||||
|
||||
|
||||
def delete_host(zone, name, nameserver='127.0.0.1', timeout=5, **kwargs):
|
||||
def delete_host(zone, name, nameserver='127.0.0.1', timeout=5, port=53,
|
||||
**kwargs):
|
||||
'''
|
||||
Delete the forward and reverse records for a host.
|
||||
|
||||
|
@ -122,13 +123,14 @@ def delete_host(zone, name, nameserver='127.0.0.1', timeout=5, **kwargs):
|
|||
'''
|
||||
fqdn = '{0}.{1}'.format(name, zone)
|
||||
request = dns.message.make_query(fqdn, 'A')
|
||||
answer = dns.query.udp(request, nameserver, timeout)
|
||||
answer = dns.query.udp(request, nameserver, timeout, port)
|
||||
try:
|
||||
ips = [i.address for i in answer.answer[0].items]
|
||||
except IndexError:
|
||||
ips = []
|
||||
|
||||
res = delete(zone, name, nameserver=nameserver, timeout=timeout, **kwargs)
|
||||
res = delete(zone, name, nameserver=nameserver, timeout=timeout, port=port,
|
||||
**kwargs)
|
||||
|
||||
fqdn = fqdn + '.'
|
||||
for ip in ips:
|
||||
|
@ -142,14 +144,14 @@ def delete_host(zone, name, nameserver='127.0.0.1', timeout=5, **kwargs):
|
|||
zone = '{0}.{1}'.format('.'.join(parts), 'in-addr.arpa.')
|
||||
name = '.'.join(popped)
|
||||
ptr = delete(zone, name, 'PTR', fqdn, nameserver=nameserver,
|
||||
timeout=timeout, **kwargs)
|
||||
timeout=timeout, port=port, **kwargs)
|
||||
if ptr:
|
||||
res = True
|
||||
return res
|
||||
|
||||
|
||||
def update(zone, name, ttl, rdtype, data, nameserver='127.0.0.1',
|
||||
timeout=5, replace=False, **kwargs):
|
||||
def update(zone, name, ttl, rdtype, data, nameserver='127.0.0.1', timeout=5,
|
||||
replace=False, port=53, **kwargs):
|
||||
'''
|
||||
Add, replace, or update a DNS record.
|
||||
nameserver must be an IP address and the minion running this module
|
||||
|
@ -165,7 +167,7 @@ def update(zone, name, ttl, rdtype, data, nameserver='127.0.0.1',
|
|||
name = str(name)
|
||||
fqdn = '{0}.{1}'.format(name, zone)
|
||||
request = dns.message.make_query(fqdn, rdtype)
|
||||
answer = dns.query.udp(request, nameserver, timeout)
|
||||
answer = dns.query.udp(request, nameserver, timeout, port)
|
||||
|
||||
rdtype = dns.rdatatype.from_text(rdtype)
|
||||
rdata = dns.rdata.from_text(dns.rdataclass.IN, rdtype, data)
|
||||
|
@ -189,14 +191,14 @@ def update(zone, name, ttl, rdtype, data, nameserver='127.0.0.1',
|
|||
dns_update.replace(name, ttl, rdata)
|
||||
elif not is_exist:
|
||||
dns_update.add(name, ttl, rdata)
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout)
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout, port)
|
||||
if answer.rcode() > 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def delete(zone, name, rdtype=None, data=None, nameserver='127.0.0.1',
|
||||
timeout=5, **kwargs):
|
||||
timeout=5, port=53, **kwargs):
|
||||
'''
|
||||
Delete a DNS record.
|
||||
|
||||
|
@ -210,7 +212,7 @@ def delete(zone, name, rdtype=None, data=None, nameserver='127.0.0.1',
|
|||
fqdn = '{0}.{1}'.format(name, zone)
|
||||
request = dns.message.make_query(fqdn, (rdtype or 'ANY'))
|
||||
|
||||
answer = dns.query.udp(request, nameserver, timeout)
|
||||
answer = dns.query.udp(request, nameserver, timeout, port)
|
||||
if not answer.answer:
|
||||
return None
|
||||
|
||||
|
@ -232,7 +234,7 @@ def delete(zone, name, rdtype=None, data=None, nameserver='127.0.0.1',
|
|||
else:
|
||||
dns_update.delete(name)
|
||||
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout)
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout, port)
|
||||
if answer.rcode() > 0:
|
||||
return False
|
||||
return True
|
||||
|
|
|
@ -53,7 +53,8 @@ def _get_keyring(keyfile):
|
|||
return keyring
|
||||
|
||||
|
||||
def create(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, timeout):
|
||||
def create(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver,
|
||||
timeout, port=53, keyalgorithm='hmac-md5'):
|
||||
'''
|
||||
Create a DNS record. The nameserver must be an IP address and the master running
|
||||
this runner must have create privileges on that server.
|
||||
|
@ -62,13 +63,13 @@ def create(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, timeout)
|
|||
|
||||
.. code-block:: bash
|
||||
|
||||
salt-run ddns.create domain.com my-test-vm 3600 A 10.20.30.40 5 my-tsig-key /etc/salt/tsig.keyring 10.0.0.1
|
||||
salt-run ddns.create domain.com my-test-vm 3600 A 10.20.30.40 my-tsig-key /etc/salt/tsig.keyring 10.0.0.1 5
|
||||
'''
|
||||
if zone in name:
|
||||
name = name.replace(zone, '').rstrip('.')
|
||||
fqdn = '{0}.{1}'.format(name, zone)
|
||||
request = dns.message.make_query(fqdn, rdtype)
|
||||
answer = dns.query.udp(request, nameserver, timeout)
|
||||
answer = dns.query.udp(request, nameserver, timeout, port)
|
||||
|
||||
rdata_value = dns.rdatatype.from_text(rdtype)
|
||||
rdata = dns.rdata.from_text(dns.rdataclass.IN, rdata_value, data)
|
||||
|
@ -79,17 +80,19 @@ def create(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, timeout)
|
|||
|
||||
keyring = _get_keyring(keyfile)
|
||||
|
||||
dns_update = dns.update.Update(zone, keyring=keyring, keyname=keyname)
|
||||
dns_update = dns.update.Update(zone, keyring=keyring, keyname=keyname,
|
||||
keyalgorithm=keyalgorithm)
|
||||
dns_update.add(name, ttl, rdata)
|
||||
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout)
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout, port)
|
||||
if answer.rcode() > 0:
|
||||
return {fqdn: 'Failed to create record of type \'{0}\''.format(rdtype)}
|
||||
|
||||
return {fqdn: 'Created record of type \'{0}\': {1} -> {2}'.format(rdtype, fqdn, data)}
|
||||
|
||||
|
||||
def update(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, timeout, replace=False):
|
||||
def update(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver,
|
||||
timeout, replace=False, port=53, keyalgorithm='hmac-md5'):
|
||||
'''
|
||||
Replace, or update a DNS record. The nameserver must be an IP address and the master running
|
||||
this runner must have update privileges on that server.
|
||||
|
@ -103,13 +106,13 @@ def update(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, timeout,
|
|||
|
||||
.. code-block:: bash
|
||||
|
||||
salt-run ddns.update domain.com my-test-vm 3600 A 10.20.30.40 5 my-tsig-key /etc/salt/tsig.keyring 10.0.0.1
|
||||
salt-run ddns.update domain.com my-test-vm 3600 A 10.20.30.40 my-tsig-key /etc/salt/tsig.keyring 10.0.0.1 5
|
||||
'''
|
||||
if zone in name:
|
||||
name = name.replace(zone, '').rstrip('.')
|
||||
fqdn = '{0}.{1}'.format(name, zone)
|
||||
request = dns.message.make_query(fqdn, rdtype)
|
||||
answer = dns.query.udp(request, nameserver, timeout)
|
||||
answer = dns.query.udp(request, nameserver, timeout, port)
|
||||
if not answer.answer:
|
||||
return {fqdn: 'No matching DNS record(s) found'}
|
||||
|
||||
|
@ -128,17 +131,19 @@ def update(zone, name, ttl, rdtype, data, keyname, keyfile, nameserver, timeout,
|
|||
|
||||
keyring = _get_keyring(keyfile)
|
||||
|
||||
dns_update = dns.update.Update(zone, keyring=keyring, keyname=keyname)
|
||||
dns_update = dns.update.Update(zone, keyring=keyring, keyname=keyname,
|
||||
keyalgorithm=keyalgorithm)
|
||||
dns_update.replace(name, ttl, rdata)
|
||||
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout)
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout, port)
|
||||
if answer.rcode() > 0:
|
||||
return {fqdn: 'Failed to update record of type \'{0}\''.format(rdtype)}
|
||||
|
||||
return {fqdn: 'Updated record of type \'{0}\''.format(rdtype)}
|
||||
|
||||
|
||||
def delete(zone, name, keyname, keyfile, nameserver, timeout, rdtype=None, data=None):
|
||||
def delete(zone, name, keyname, keyfile, nameserver, timeout, rdtype=None,
|
||||
data=None, port=53, keyalgorithm='hmac-md5'):
|
||||
'''
|
||||
Delete a DNS record.
|
||||
|
||||
|
@ -146,20 +151,21 @@ def delete(zone, name, keyname, keyfile, nameserver, timeout, rdtype=None, data=
|
|||
|
||||
.. code-block:: bash
|
||||
|
||||
salt-run ddns.delete domain.com my-test-vm my-tsig-key /etc/salt/tsig.keyring 10.0.0.1 A
|
||||
salt-run ddns.delete domain.com my-test-vm my-tsig-key /etc/salt/tsig.keyring 10.0.0.1 5 A
|
||||
'''
|
||||
if zone in name:
|
||||
name = name.replace(zone, '').rstrip('.')
|
||||
fqdn = '{0}.{1}'.format(name, zone)
|
||||
request = dns.message.make_query(fqdn, (rdtype or 'ANY'))
|
||||
|
||||
answer = dns.query.udp(request, nameserver, timeout)
|
||||
answer = dns.query.udp(request, nameserver, timeout, port)
|
||||
if not answer.answer:
|
||||
return {fqdn: 'No matching DNS record(s) found'}
|
||||
|
||||
keyring = _get_keyring(keyfile)
|
||||
|
||||
dns_update = dns.update.Update(zone, keyring=keyring, keyname=keyname)
|
||||
dns_update = dns.update.Update(zone, keyring=keyring, keyname=keyname,
|
||||
keyalgorithm=keyalgorithm)
|
||||
|
||||
if rdtype:
|
||||
rdata_value = dns.rdatatype.from_text(rdtype)
|
||||
|
@ -171,14 +177,15 @@ def delete(zone, name, keyname, keyfile, nameserver, timeout, rdtype=None, data=
|
|||
else:
|
||||
dns_update.delete(name)
|
||||
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout)
|
||||
answer = dns.query.udp(dns_update, nameserver, timeout, port)
|
||||
if answer.rcode() > 0:
|
||||
return {fqdn: 'Failed to delete DNS record(s)'}
|
||||
|
||||
return {fqdn: 'Deleted DNS record(s)'}
|
||||
|
||||
|
||||
def add_host(zone, name, ttl, ip, keyname, keyfile, nameserver, timeout):
|
||||
def add_host(zone, name, ttl, ip, keyname, keyfile, nameserver, timeout,
|
||||
port=53, keyalgorithm='hmac-md5'):
|
||||
'''
|
||||
Create both A and PTR (reverse) records for a host.
|
||||
|
||||
|
@ -186,14 +193,15 @@ def add_host(zone, name, ttl, ip, keyname, keyfile, nameserver, timeout):
|
|||
|
||||
.. code-block:: bash
|
||||
|
||||
salt-run ddns.add_host domain.com my-test-vm 3600 10.20.30.40 5 my-tsig-key /etc/salt/tsig.keyring 10.0.0.1
|
||||
salt-run ddns.add_host domain.com my-test-vm 3600 10.20.30.40 my-tsig-key /etc/salt/tsig.keyring 10.0.0.1 5
|
||||
'''
|
||||
res = []
|
||||
if zone in name:
|
||||
name = name.replace(zone, '').rstrip('.')
|
||||
fqdn = '{0}.{1}'.format(name, zone)
|
||||
|
||||
ret = create(zone, name, ttl, 'A', ip, keyname, keyfile, nameserver, timeout)
|
||||
ret = create(zone, name, ttl, 'A', ip, keyname, keyfile, nameserver,
|
||||
timeout, port, keyalgorithm)
|
||||
res.append(ret[fqdn])
|
||||
|
||||
parts = ip.split('.')[::-1]
|
||||
|
@ -209,7 +217,8 @@ def add_host(zone, name, ttl, ip, keyname, keyfile, nameserver, timeout):
|
|||
zone = '{0}.{1}'.format('.'.join(parts), 'in-addr.arpa.')
|
||||
name = '.'.join(popped)
|
||||
rev_fqdn = '{0}.{1}'.format(name, zone)
|
||||
ret = create(zone, name, ttl, 'PTR', "{0}.".format(fqdn), keyname, keyfile, nameserver, timeout)
|
||||
ret = create(zone, name, ttl, 'PTR', "{0}.".format(fqdn), keyname,
|
||||
keyfile, nameserver, timeout, port, keyalgorithm)
|
||||
|
||||
if "Created" in ret[rev_fqdn]:
|
||||
res.append(ret[rev_fqdn])
|
||||
|
@ -220,7 +229,8 @@ def add_host(zone, name, ttl, ip, keyname, keyfile, nameserver, timeout):
|
|||
return {fqdn: res}
|
||||
|
||||
|
||||
def delete_host(zone, name, keyname, keyfile, nameserver, timeout):
|
||||
def delete_host(zone, name, keyname, keyfile, nameserver, timeout, port=53,
|
||||
keyalgorithm='hmac-md5'):
|
||||
'''
|
||||
Delete both forward (A) and reverse (PTR) records for a host only if the
|
||||
forward (A) record exists.
|
||||
|
@ -229,21 +239,22 @@ def delete_host(zone, name, keyname, keyfile, nameserver, timeout):
|
|||
|
||||
.. code-block:: bash
|
||||
|
||||
salt-run ddns.delete_host domain.com my-test-vm my-tsig-key /etc/salt/tsig.keyring 10.0.0.1
|
||||
salt-run ddns.delete_host domain.com my-test-vm my-tsig-key /etc/salt/tsig.keyring 10.0.0.1 5
|
||||
'''
|
||||
res = []
|
||||
if zone in name:
|
||||
name = name.replace(zone, '').rstrip('.')
|
||||
fqdn = '{0}.{1}'.format(name, zone)
|
||||
request = dns.message.make_query(fqdn, 'A')
|
||||
answer = dns.query.udp(request, nameserver, timeout)
|
||||
answer = dns.query.udp(request, nameserver, timeout, port)
|
||||
|
||||
try:
|
||||
ips = [i.address for i in answer.answer[0].items]
|
||||
except IndexError:
|
||||
ips = []
|
||||
|
||||
ret = delete(zone, name, keyname, keyfile, nameserver, timeout)
|
||||
ret = delete(zone, name, keyname, keyfile, nameserver, timeout, port=port,
|
||||
keyalgorithm=keyalgorithm)
|
||||
res.append("{0} of type \'A\'".format(ret[fqdn]))
|
||||
|
||||
for ip in ips:
|
||||
|
@ -259,7 +270,8 @@ def delete_host(zone, name, keyname, keyfile, nameserver, timeout):
|
|||
zone = '{0}.{1}'.format('.'.join(parts), 'in-addr.arpa.')
|
||||
name = '.'.join(popped)
|
||||
rev_fqdn = '{0}.{1}'.format(name, zone)
|
||||
ret = delete(zone, name, keyname, keyfile, nameserver, timeout, 'PTR', "{0}.".format(fqdn))
|
||||
ret = delete(zone, name, keyname, keyfile, nameserver, timeout,
|
||||
'PTR', "{0}.".format(fqdn), port, keyalgorithm)
|
||||
|
||||
if "Deleted" in ret[rev_fqdn]:
|
||||
res.append("{0} of type \'PTR\'".format(ret[rev_fqdn]))
|
||||
|
|
Loading…
Add table
Reference in a new issue