def myDomainTimeoutCalllback(timer, opaque): conn = libvirt.open('qemu:///system') if conn == None: print('Failed to open connection to qemu:///system', file=sys.stderr) exit(1) if conn.lookupByName(opaque).info()[0] == libvirt.VIR_DOMAIN_RUNNING: conn.lookupByName(opaque).shutdown() time.sleep(10) if conn.lookupByName(opaque).info()[0] == libvirt.VIR_DOMAIN_RUNNING: conn.lookupByName(opaque).destroy() libvirt.virEventRemoveTimeout(timer)
def remove_timeout(self, timer): try: return libvirt.virEventRemoveTimeout(timer) except libvirt.libvirtError, e: message = e.get_error_message() code = e.get_error_code() raise exception.LibvirtAPI(message, code)
def wait_for_guest_agent(conn, domain, timeout): done = False def timeoutEventCallback(timer, opaque): logging.info("timeout event:") nonlocal done done = True def domainEventAgentLifecycleCallback (conn, dom, state, reason, opaque): logging.info("agentLifecycle event: domain '%s' state %d reason %d" % (dom.name(), state, reason)) if state == libvirt.VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_STATE_CONNECTED: nonlocal done done = True timer_id = libvirt.virEventAddTimeout(timeout*1000, timeoutEventCallback, None) conn.domainEventRegisterAny(domain, libvirt.VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE, domainEventAgentLifecycleCallback, None) while not done: libvirt.virEventRunDefaultImpl() libvirt.virEventRemoveTimeout(timer_id)
def _retry_register_watches(self, timer, libvirt_domain): libvirt.virEventRemoveTimeout(timer) self._register_watches(libvirt_domain)