diff --git a/README.md b/README.md index f2ec2bb..5d96bf7 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,2 @@ # OneDNS Dyanmic DNS for OpenNebula - -## Usage - -``` -$ docker-compose -f one-dns.yaml up -$ python setup.py install -$ onedns --etcd-host=http://localhost:2379 --client-cert /path/to/ssl/cert -``` diff --git a/one-dns.yaml b/one-dns.yaml deleted file mode 100644 index 5097e3b..0000000 --- a/one-dns.yaml +++ /dev/null @@ -1,22 +0,0 @@ -version: '2' -services: - etcd: - image: quay.io/coreos/etcd:v2.3.2 - restart: always - ports: - - "${ETCD_PORT}:${ETCD_PORT}" - volumes: - - "/tmp/data:/data" - command: --listen-client-urls http://0.0.0.0:${ETCD_PORT} --advertise-client-urls http://0.0.0.0:${ETCD_PORT} --data-dir /data - - skydns: - image: skynetservices/skydns:2.5.3a - restart: always - ports: - - "${DNS_PORT}:${DNS_PORT}" - - "${DNS_PORT}:${DNS_PORT}/udp" - links: - - etcd - depends_on: - - etcd - command: -machines http://etcd:${ETCD_PORT} -addr 0.0.0.0:${DNS_PORT} -no-rec diff --git a/onedns/api.py b/onedns/api.py index 2c7f808..a3555e1 100644 --- a/onedns/api.py +++ b/onedns/api.py @@ -1,18 +1,16 @@ from onedns import exception from onedns.clients import one -from onedns.clients import skydns from onedns.logger import log class OneDNS(object): """ - This class bridges the gap between OpenNebula and SkyDNS APIs. It primarily - provides convenience methods for adding/removing VMs to SkyDNS. + This class provides convenience methods for adding/removing VMs to the + DynamicResolver. """ - def __init__(self, domain, one_kwargs={}, etcd_kwargs={}): + def __init__(self, domain, one_kwargs={}): self._one = one.OneClient(**one_kwargs) - self._skydns = skydns.SkyDNSClient(domain, etcd_kwargs=etcd_kwargs) def _check_for_networks(self, vm): if not hasattr(vm.template, 'nics'): @@ -34,14 +32,14 @@ class OneDNS(object): dns_entries = self._get_vm_dns_entries(vm) log.info("Adding VM {id}: {vm}".format(id=vm.id, vm=vm.name)) for name, ip in dns_entries.items(): - self._skydns.add_host(name, ip) + self.add_host(name, ip) def remove_vm(self, vm): self._check_for_networks(vm) dns_entries = self._get_vm_dns_entries(vm) log.info("Removing VM {id}: {vm}".format(id=vm.id, vm=vm.name)) for name, ip in dns_entries.items(): - self._skydns.remove_host(name, ip) + self.remove_host(name, ip) def add_vm_by_id(self, vm_id): vm = self._one.get_vm_by_id(vm_id) diff --git a/onedns/cli.py b/onedns/cli.py index 8af72cc..078e022 100644 --- a/onedns/cli.py +++ b/onedns/cli.py @@ -4,45 +4,35 @@ from onedns import api from onedns import utils from onedns import logger from onedns import monitor -from onedns.clients import skydns -def daemon(args, one_args, etcd_args): - mon = monitor.OneMonitor(args.domain, one_kwargs=one_args, - etcd_kwargs=etcd_args) +def daemon(args, one_args): + mon = monitor.OneMonitor(args.domain, one_kwargs=one_args) mon.run(args.interval) -def add_host(args, one_args, etcd_args): - client = skydns.SkyDNSClient(args.domain, etcd_kwargs=etcd_args) - client.add_host(args.hostname, args.ip) +def add_host(args, one_args): + pass -def remove_host(args, one_args, etcd_args): - client = skydns.SkyDNSClient(args.domain, etcd_kwargs=etcd_args) - client.remove_host(args.hostname, args.ip) +def remove_host(args, one_args): + pass -def add_vm(args, one_args, etcd_args): - client = api.OneDNS(args.domain, one_kwargs=one_args, - etcd_kwargs=etcd_args) +def add_vm(args, one_args): + client = api.OneDNS(args.domain, one_kwargs=one_args) client.add_vm_by_id(args.id) -def remove_vm(args, one_args, etcd_args): - client = api.OneDNS(args.domain, one_kwargs=one_args, - etcd_kwargs=etcd_args) +def remove_vm(args, one_args): + client = api.OneDNS(args.domain, one_kwargs=one_args) client.remove_vm_by_id(args.id) -def shell(args, one_args, etcd_args): - onemon = monitor.OneMonitor(args.domain, one_kwargs=one_args, - etcd_kwargs=etcd_args) +def shell(args, one_args): + onemon = monitor.OneMonitor(args.domain, one_kwargs=one_args) oneclient = onemon._one - skyclient = onemon._skydns - etcdclient = skyclient._etcd - ns = dict(onemon=onemon, skyclient=skyclient, oneclient=oneclient, - etcdclient=etcdclient, log=logger.log) + ns = dict(onemon=onemon, oneclient=oneclient, log=logger.log) utils.shell(local_ns=ns) @@ -60,12 +50,6 @@ def main(args=None): help='ONE credentials to use (e.g. user:key)') parser.add_argument('--one-proxy', required=False, help='proxy host to use to connect to ONE controller') - parser.add_argument('--etcd-host', required=False, - help='etcd host to connect to') - parser.add_argument('--etcd-port', required=False, type=int, default=4001, - help='etcd port to connect to') - parser.add_argument('--etcd-cert', required=False, type=int, - help='path to etcd client ssl cert') subparsers = parser.add_subparsers() daemon_parser = subparsers.add_parser('daemon') @@ -107,6 +91,5 @@ def main(args=None): args_dict = vars(args) one_args = utils.get_kwargs_from_dict(args_dict, 'one_') - etcd_args = utils.get_kwargs_from_dict(args_dict, 'etcd_') - args.func(args, one_args, etcd_args) + args.func(args, one_args) diff --git a/onedns/clients/skydns.py b/onedns/clients/skydns.py deleted file mode 100644 index ca40179..0000000 --- a/onedns/clients/skydns.py +++ /dev/null @@ -1,60 +0,0 @@ -import re -import json - -import etcd - -from onedns.logger import log - -RE_VALIDNAME = re.compile('[^\w\d.-]') - - -class SkyDNSClient(object): - def __init__(self, domain, etcd_kwargs={}): - self.domain = domain - self._reverse_domain_parts = domain.split('.') - self._reverse_domain_parts.reverse() - self._etcd = etcd.Client(**etcd_kwargs) - - def _sanitize_name(self, name): - return RE_VALIDNAME.sub('', name).rstrip('.') - - def _skydns_ns(self, parts): - return '/'.join(['skydns'] + parts) - - def _get_forward_ns(self, hostname): - return self._skydns_ns(self._reverse_domain_parts + [hostname]) - - def _get_reverse_ns(self, ip): - ip_parts = ip.split('.') - return self._skydns_ns(['arpa/in-addr'] + ip_parts) - - def add_forward(self, hostname, ip): - forward = self._get_forward_ns(hostname) - log.debug("adding forward: {path}".format(path=forward)) - self._etcd.write(forward, json.dumps(dict(host=ip))) - - def remove_forward(self, hostname): - 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("adding reverse: {path}".format(path=reverse)) - self._etcd.write(reverse, json.dumps(dict(host=fqdn))) - - def remove_reverse(self, ip): - reverse = self._get_reverse_ns(ip) - log.debug("removing reverse: {path}".format(path=reverse)) - self._etcd.delete(reverse) - - def add_host(self, hostname, ip): - hostname = self._sanitize_name(hostname) - self.add_forward(hostname, ip) - self.add_reverse(ip, hostname) - - def remove_host(self, hostname, ip): - hostname = self._sanitize_name(hostname) - self.remove_forward(hostname) - self.remove_reverse(ip) diff --git a/onedns/monitor.py b/onedns/monitor.py index d2c7d54..b9853bc 100644 --- a/onedns/monitor.py +++ b/onedns/monitor.py @@ -5,7 +5,7 @@ from onedns import api class OneMonitor(api.OneDNS): """ - Daemon that syncs OpenNebula VMs with SkyDNS + Daemon that syncs OpenNebula VMs with OneDNS """ def run(self, interval=60): while True: diff --git a/requirements.txt b/requirements.txt index 7402204..137d95b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ oca==4.10.0 -python-etcd==0.4.3 IPy==0.83 dnslib==0.9.6 diff --git a/setup.py b/setup.py index 1d3d8c1..1a2396e 100644 --- a/setup.py +++ b/setup.py @@ -20,7 +20,6 @@ setup( long_description=README, install_requires=[ "oca>=4.10.0", - "python-etcd>=0.4.3", "IPy>=0.83", "dnslib>=0.9.6", ],