Added --delete option to remove host from zone

Added --quiet option to suppress output
This commit is contained in:
2004-01-17 00:05:50 +00:00
parent a9d9569470
commit 8a88b59e84
2 changed files with 40 additions and 11 deletions

1
TODO
View File

@@ -23,6 +23,7 @@ Done:
-k keyname
-n hostname
-p password
-q quiet
-t ttl
- Auto-detect the machine's external ip address'
Should work on OS X, Linux and Windows.

View File

@@ -2,11 +2,13 @@
# dnsupdate.py
# Updates a dynamic dns-record using a TSIG key.
def checkerror(msg):
if len(msg['error']) > 0:
for error in msg['error']:
print "Error: %s" % error
print "Use -h for help"
if not msg.has_key('quiet'):
for error in msg['error']:
print "Error: %s" % error
print "Use -h for help"
return 1
else:
return 0
@@ -35,6 +37,9 @@ def getparams(msg):
parser.add_option("-c", "--config",
type="string",
help="Alternate config file")
parser.add_option("--delete",
action="store_true",
help="Remove the host from the zone")
parser.add_option("-d", "--domain",
type="string",
help="Domain to update")
@@ -50,6 +55,9 @@ def getparams(msg):
parser.add_option("-p", "--password",
type="string",
help="TSIG key")
parser.add_option("-q", "--quiet",
action="store_true",
help="Quit mode")
parser.add_option("-t", "--ttl",
type="int",
help="TTL in seconds")
@@ -68,6 +76,8 @@ def getparams(msg):
if ip:
msg['ipaddress'] = ip
if options.delete:
msg['delete'] = options.delete
if options.domain:
msg['domain'] = options.domain
if options.keyname:
@@ -76,9 +86,12 @@ def getparams(msg):
msg['hostname'] = options.name
if options.password:
msg['keysecret'] = options.password
if options.quiet:
msg['quiet'] = options.quiet
if options.ttl:
msg['ttl'] = options.ttl
return msg
@@ -120,8 +133,11 @@ def update(msg):
# dns.update.Update(name of domain, keyring, keyname)
update = dns.update.Update(msg['domain'], keyring=keyring, keyname=msg['keyname'])
# update.replace(hostname, ttl, record-type, new ip)
update.replace(msg['hostname'], msg['ttl'], 'a', msg['ipaddress'])
if msg.has_key('delete'):
update.delete(msg['hostname'])
else:
# update.replace(hostname, ttl, record-type, new ip)
update.replace(msg['hostname'], msg['ttl'], 'a', msg['ipaddress'])
# doit, servername
try:
@@ -131,10 +147,14 @@ def update(msg):
return
# Verify response
if response.rcode() == 0:
print "Host '%s.%s' has been added with ip address %s" % (msg['hostname'], msg['domain'], msg['ipaddress'])
else:
print "An error has occurred, the server returned:\n%s" % response
if not msg.has_key('quiet'):
if response.rcode() == 0:
if msg.has_key("delete"):
print "Host '%s.%s' has been deleted" % (msg['hostname'], msg['domain'])
else:
print "Host '%s.%s' has been added with ip address %s" % (msg['hostname'], msg['domain'], msg['ipaddress'])
else:
print "An error has occurred, the server returned:\n%s" % response
@@ -167,12 +187,15 @@ def verify_ip(msg):
except:
ip = ""
if ip == msg['ipaddress']:
if ip == msg['ipaddress'] and not msg.has_key('delete'):
msg['error'].append("Nameserver already up to date")
elif ip == "" and msg.has_key('delete'):
msg['error'].append("Nameserver does not recognise the hostname")
return msg
if __name__=="__main__":
import sys
msg = {}
msg['error'] = []
@@ -183,3 +206,8 @@ if __name__=="__main__":
if err == 0:
update(msg)
checkerror(msg)
if err == 0:
sys.exit(0)
sys.exit(1)