Loading ccnode/hypervisor/__init__.py +30 −5 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ from ccnode.host import Handler as HostHandler from ccnode.tags import Tag, tag_inspector, get_tags from ccnode.hypervisor import tags from ccnode.hypervisor import lib as _libvirt from ccnode.hypervisor.lib import EVENTS, STORAGE_STATES, EventLoop from ccnode.hypervisor.lib import DOMAIN_STATES, EVENTS, STORAGE_STATES, EventLoop from ccnode.hypervisor.domains import VirtualMachine Loading @@ -33,7 +33,10 @@ class Handler(HostHandler): # initialize hypervisor instance global hypervisor if hypervisor is None: hypervisor = Hypervisor(kwargs.pop('hypervisor_name', None)) hypervisor = Hypervisor( name=kwargs.pop('hypervisor_name', None), proxy=kwargs['proxy'], ) self.hypervisor = weakref.proxy(hypervisor) Loading Loading @@ -91,7 +94,13 @@ class Handler(HostHandler): class Hypervisor(object): """Container for all hypervisor related state.""" def __init__(self, name=None): def __init__(self, name, proxy): """ :param str name: name of hypervisor instance :param proxy: sjRpc proxy """ self.sjproxy = weakref.proxy(proxy) #: hv attributes self.name = name self.type = u'kvm' Loading Loading @@ -136,11 +145,27 @@ class Hypervisor(object): def callback(self, conn, dom, event, detail, opaque): """Callback for libvirt event loop.""" logger.debug("myDomainEventCallback1 EVENT: Domain %s(%s) %s %d" % (dom.name(), dom.UUIDString(), EVENTS[event], detail)) event = EVENTS[event] if event == 'Added': self.domains[dom.UUID()] = VirtualMachine(dom) vm = VirtualMachine(dom, self) self.domains[vm.uuid] = vm self.sjproxy.register(vm.name, 'vm') logger.debug('Add domain: %s (%s)', vm.name, vm.uuid) elif event == 'Removed': vm = self.domains.pop(dom.UUID()) self.sjproxy.unregister(vm.name) logger.debug('Delete domain: %s (%s)', vm.name, vm.uuid) elif event in ('Started', 'Suspended', 'Resumed', 'Stopped', 'Saved', 'Restored'): vm = self.domains.get(dom.UUID()) # sometimes libvirt sent a start event before a created event so be # careful if vm is not None: state = DOMAIN_STATES[dom.info()[0]] logger.debug('Domain change state from %s to %s', vm.state, state) vm.state = state def get_domain_by_name(self, name): """Get a domain by name.""" Loading Loading
ccnode/hypervisor/__init__.py +30 −5 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ from ccnode.host import Handler as HostHandler from ccnode.tags import Tag, tag_inspector, get_tags from ccnode.hypervisor import tags from ccnode.hypervisor import lib as _libvirt from ccnode.hypervisor.lib import EVENTS, STORAGE_STATES, EventLoop from ccnode.hypervisor.lib import DOMAIN_STATES, EVENTS, STORAGE_STATES, EventLoop from ccnode.hypervisor.domains import VirtualMachine Loading @@ -33,7 +33,10 @@ class Handler(HostHandler): # initialize hypervisor instance global hypervisor if hypervisor is None: hypervisor = Hypervisor(kwargs.pop('hypervisor_name', None)) hypervisor = Hypervisor( name=kwargs.pop('hypervisor_name', None), proxy=kwargs['proxy'], ) self.hypervisor = weakref.proxy(hypervisor) Loading Loading @@ -91,7 +94,13 @@ class Handler(HostHandler): class Hypervisor(object): """Container for all hypervisor related state.""" def __init__(self, name=None): def __init__(self, name, proxy): """ :param str name: name of hypervisor instance :param proxy: sjRpc proxy """ self.sjproxy = weakref.proxy(proxy) #: hv attributes self.name = name self.type = u'kvm' Loading Loading @@ -136,11 +145,27 @@ class Hypervisor(object): def callback(self, conn, dom, event, detail, opaque): """Callback for libvirt event loop.""" logger.debug("myDomainEventCallback1 EVENT: Domain %s(%s) %s %d" % (dom.name(), dom.UUIDString(), EVENTS[event], detail)) event = EVENTS[event] if event == 'Added': self.domains[dom.UUID()] = VirtualMachine(dom) vm = VirtualMachine(dom, self) self.domains[vm.uuid] = vm self.sjproxy.register(vm.name, 'vm') logger.debug('Add domain: %s (%s)', vm.name, vm.uuid) elif event == 'Removed': vm = self.domains.pop(dom.UUID()) self.sjproxy.unregister(vm.name) logger.debug('Delete domain: %s (%s)', vm.name, vm.uuid) elif event in ('Started', 'Suspended', 'Resumed', 'Stopped', 'Saved', 'Restored'): vm = self.domains.get(dom.UUID()) # sometimes libvirt sent a start event before a created event so be # careful if vm is not None: state = DOMAIN_STATES[dom.info()[0]] logger.debug('Domain change state from %s to %s', vm.state, state) vm.state = state def get_domain_by_name(self, name): """Get a domain by name.""" Loading