add new 'add' and 'remove' subcommands

Allows manually adding and removing hosts from DNS. These will be
utilized by ONE hook scripts.
master
Justin Riley 2016-07-19 09:15:15 -04:00
parent 8114dbed88
commit 38d9e539fb
2 changed files with 35 additions and 0 deletions

View File

@ -2,6 +2,7 @@ import argparse
from onedns import monitor
from onedns import logger
from onedns.clients import skydns
def get_kwargs(args, prefix):
@ -17,6 +18,16 @@ def daemon(args, one_args, etcd_args):
mon.run(args.interval)
def add(args, one_args, etcd_args):
client = skydns.SkyDNSClient(args.domain, etcd_kwargs=etcd_args)
client.add_host(args.hostname, args.ip)
def remove(args, one_args, etcd_args):
client = skydns.SkyDNSClient(args.domain, etcd_kwargs=etcd_args)
client.remove_host(args.hostname, args.ip)
def main():
parser = argparse.ArgumentParser(
description='OneDNS - Dynamic DNS for OpenNebula')
@ -45,6 +56,16 @@ def main():
'-i', '--interval', required=False, type=int, default=60,
help="how often in seconds to poll ONE and update DNS")
add_parser = subparsers.add_parser('add')
add_parser.set_defaults(func=add)
add_parser.add_argument('hostname', help='name of host to add')
add_parser.add_argument('ip', help='ip of host to add')
remove_parser = subparsers.add_parser('remove')
remove_parser.set_defaults(func=remove)
remove_parser.add_argument('hostname', help='name of host to remove')
remove_parser.add_argument('ip', help='ip of host to remove')
args = parser.parse_args()
logger.configure_onedns_logging(debug=args.debug)

View File

@ -30,16 +30,30 @@ class SkyDNSClient(object):
log.debug("forward path: {path}".format(path=forward))
self._etcd.write(forward, json.dumps(dict(host=ip)))
def remove_forward(self, hostname, ip):
forward = self._get_forward_ns(hostname)
log.debug("removing forward: {path}".format(path=forward))
self._etcd.delete(forward)
def add_reverse(self, ip, hostname):
reverse = self._get_reverse_ns(ip)
fqdn = '.'.join([hostname, self.domain])
log.debug("reverse path: {path}".format(path=reverse))
self._etcd.write(reverse, json.dumps(dict(host=fqdn)))
def remove_reverse(self, ip, hostname):
reverse = self._get_reverse_ns(ip)
log.debug("removing reverse: {path}".format(path=reverse))
self._etcd.delete(reverse)
def add_host(self, hostname, ip):
self.add_forward(hostname, ip)
self.add_reverse(ip, hostname)
def remove_host(self, hostname, ip):
self.remove_forward(hostname, ip)
self.remove_reverse(ip, hostname)
def register(self, vm):
log.info("Registering VM: {vm}".format(vm=vm.name))
hostname = RE_VALIDNAME.sub('', vm.name).rstrip('.')