raise exception if vm doesnt have any networks

master
Justin Riley 2016-07-21 13:35:26 -04:00
parent d73dc5f692
commit 2878ede2d6
2 changed files with 41 additions and 11 deletions

View File

@ -1,3 +1,4 @@
from onedns import exception
from onedns.clients import one
from onedns.clients import skydns
from onedns.logger import log
@ -13,10 +14,12 @@ class OneDNS(object):
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'):
raise exception.NoNetworksError(vm)
def _get_vm_dns_entries(self, vm):
entries = {}
if not hasattr(vm.template, 'nics'):
return entries
hostname = vm.name
primary_ip = vm.template.nics[0].ip
entries[hostname] = primary_ip
@ -27,21 +30,15 @@ class OneDNS(object):
return entries
def add_vm(self, vm):
self._check_for_networks(vm)
dns_entries = self._get_vm_dns_entries(vm)
if not dns_entries:
log.warn("No networks found for VM {id}: {vm} - skipping".format(
vm=vm.name, id=vm.id))
return
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)
def remove_vm(self, vm):
self._check_for_networks(vm)
dns_entries = self._get_vm_dns_entries(vm)
if not dns_entries:
log.warn("No networks found for VM {id}: {vm} - skipping".format(
vm=vm.name, id=vm.id))
return
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)
@ -56,4 +53,7 @@ class OneDNS(object):
def sync(self):
for vm in self._one.vms():
self.add_vm(vm)
try:
self.add_vm(vm)
except exception.NoNetworksError as e:
e.log(warn=True)

30
onedns/exception.py Normal file
View File

@ -0,0 +1,30 @@
from onedns.logger import log
class OneDnsException(Exception):
def __init__(self, *args):
self.args = args
self.msg = args[0]
def __str__(self):
return self.msg
def explain(self):
return '%s: %s' % (self.__class__.__name__, self.msg)
def log(self, warn=False, show_tb=False):
if show_tb:
log.exception(self.explain())
elif warn:
log.warn(self.explain())
else:
log.error(self.explain())
class NoNetworksError(OneDnsException):
"""
Raised when a VM doesn't have any NICs
"""
def __init__(self, vm):
self.msg = "No networks found for VM {id}: {vm}".format(vm=vm.name,
id=vm.id)