Beispiel #1
0
def wait_for_domain_shutdown(vm, timeout):
    ''' Helper function to wait for domain shutdown.

    This function wait for domain shutdown, but do not initiate the shutdown
    itself.

    Note: you need to close event loop after calling this function.

    :param vm: QubesVM object to wait for shutdown on
    :param timeout: Timeout in seconds, use 0 for no timeout
    '''
    events = qubesadmin.events.EventsDispatcher(vm.app)
    loop = asyncio.get_event_loop()
    events.add_handler('domain-shutdown',
                       functools.partial(interrupt_on_vm_shutdown, vm))
    events.add_handler('connection-established',
                       functools.partial(interrupt_on_vm_shutdown, vm))
    events_task = asyncio.ensure_future(events.listen_for_events(), loop=loop)
    if timeout:
        # pylint: disable=no-member
        loop.call_later(timeout, events_task.cancel)
    try:
        loop.run_until_complete(events_task)
    except asyncio.CancelledError:
        raise qubesadmin.exc.QubesVMShutdownTimeout(
            'VM %s shutdown timeout expired', vm.name)
    except Interrupt:
        pass
 def register_events(self, events):
     """Register domain startup events in app.events dispatcher"""
     events.add_handler('domain-spawn', self.on_domain_spawn)
     events.add_handler('domain-start', self.on_domain_start)
     events.add_handler('connection-established',
                        self.on_connection_established)
     events.add_handler('domain-stopped', self.on_domain_stopped)
async def wait_for_domain_shutdown(vms):
    """ Helper function to wait for domain shutdown.

    This function wait for domain shutdown, but do not initiate the shutdown
    itself.

    :param vms: QubesVM object collection to wait for shutdown on
    """
    if not vms:
        return
    app = list(vms)[0].app
    vms = set(vms)
    events = qubesadmin.events.EventsDispatcher(app, enable_cache=False)
    events.add_handler('domain-shutdown',
        functools.partial(interrupt_on_vm_shutdown, vms, events))
    events.add_handler('connection-established',
        functools.partial(interrupt_on_vm_shutdown, vms, events))
    await events.listen_for_events()
def wait_for_domain_shutdown(vms):
    ''' Helper function to wait for domain shutdown.

    This function wait for domain shutdown, but do not initiate the shutdown
    itself.

    :param vms: QubesVM object collection to wait for shutdown on
    '''
    if not vms:
        return
    app = list(vms)[0].app
    vms = set(vms)
    events = qubesadmin.events.EventsDispatcher(app)
    events.add_handler('domain-shutdown',
                       functools.partial(interrupt_on_vm_shutdown, vms))
    events.add_handler('connection-established',
                       functools.partial(interrupt_on_vm_shutdown, vms))
    try:
        yield from events.listen_for_events()
    except Interrupt:
        pass