From 38d9e539fb53fa8a8d40328db0b8373e6559e989 Mon Sep 17 00:00:00 2001 From: Justin Riley Date: Tue, 19 Jul 2016 09:15:15 -0400 Subject: [PATCH] add new 'add' and 'remove' subcommands Allows manually adding and removing hosts from DNS. These will be utilized by ONE hook scripts. --- onedns/cli.py | 21 +++++++++++++++++++++ onedns/clients/skydns.py | 14 ++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/onedns/cli.py b/onedns/cli.py index bc6d8a5..b309993 100644 --- a/onedns/cli.py +++ b/onedns/cli.py @@ -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) diff --git a/onedns/clients/skydns.py b/onedns/clients/skydns.py index 886b3f5..328a8f3 100644 --- a/onedns/clients/skydns.py +++ b/onedns/clients/skydns.py @@ -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('.')