Example #1
0
    def get_vms_info(self, vms):
        ''' Get VM metadata, for comparing VM later without holding actual
        reference to the old object.'''

        vms_info = {}
        for vm in vms:
            vm_info = {
                'properties': {},
                'default': {},
                'devices': {},
            }
            for prop in ('name', 'kernel', 'memory', 'maxmem', 'kernelopts',
                         'services', 'vcpus', 'features'
                         'include_in_backups', 'default_user',
                         'qrexec_timeout', 'autostart', 'pci_strictreset',
                         'debug', 'internal', 'netvm', 'template', 'label'):
                if not hasattr(vm, prop):
                    continue
                vm_info['properties'][prop] = str(getattr(vm, prop))
                vm_info['default'][prop] = vm.property_is_default(prop)
            for dev_class in vm.devices.keys():
                vm_info['devices'][dev_class] = {}
                for dev_ass in vm.devices[dev_class].assignments():
                    vm_info['devices'][dev_class][str(dev_ass.device)] = \
                        dev_ass.options
            vms_info[vm.name] = vm_info

        return vms_info
Example #2
0
    def get_vms_info(self, vms):
        ''' Get VM metadata, for comparing VM later without holding actual
        reference to the old object.'''

        vms_info = {}
        for vm in vms:
            vm_info = {
                'properties': {},
                'default': {},
                'devices': {},
            }
            for prop in ('name', 'kernel',
                    'memory', 'maxmem', 'kernelopts',
                    'services', 'vcpus', 'features'
                    'include_in_backups', 'default_user', 'qrexec_timeout',
                    'autostart', 'pci_strictreset', 'debug',
                    'internal', 'netvm', 'template', 'label'):
                if not hasattr(vm, prop):
                    continue
                vm_info['properties'][prop] = str(getattr(vm, prop))
                vm_info['default'][prop] = vm.property_is_default(prop)
            for dev_class in vm.devices.keys():
                vm_info['devices'][dev_class] = {}
                for dev_ass in vm.devices[dev_class].assignments():
                    vm_info['devices'][dev_class][str(dev_ass.device)] = \
                        dev_ass.options
            vms_info[vm.name] = vm_info

        return vms_info
Example #3
0
 def on_property_set_default_netvm(self, event, name, newvalue,
         oldvalue=None):
     # pylint: disable=unused-argument
     for vm in self.domains:
         if hasattr(vm, 'provides_network') and not vm.provides_network and \
                 hasattr(vm, 'netvm') and vm.property_is_default('netvm'):
             # fire property-del:netvm as it is responsible for resetting
             # netvm to it's default value
             vm.fire_event('property-pre-del:netvm', pre_event=True,
                 name='netvm', oldvalue=oldvalue)
             vm.fire_event('property-del:netvm',
                 name='netvm', oldvalue=oldvalue)
Example #4
0
 def on_property_set_default_netvm(self, event, name, newvalue,
         oldvalue=None):
     # pylint: disable=unused-argument
     for vm in self.domains:
         if hasattr(vm, 'provides_network') and not vm.provides_network and \
                 hasattr(vm, 'netvm') and vm.property_is_default('netvm'):
             # fire property-del:netvm as it is responsible for resetting
             # netvm to it's default value
             vm.fire_event('property-pre-del:netvm', pre_event=True,
                 name='netvm', oldvalue=oldvalue)
             vm.fire_event('property-del:netvm',
                 name='netvm', oldvalue=oldvalue)
Example #5
0
 def on_property_set_default_fw_netvm(self,
                                      event,
                                      name,
                                      newvalue,
                                      oldvalue=None):
     # pylint: disable=unused-argument,invalid-name
     for vm in self.domains:
         if not vm.provides_network and vm.property_is_default('netvm'):
             # fire property-del:netvm as it is responsible for resetting
             # netvm to it's default value
             vm.fire_event('property-del:netvm',
                           name='netvm',
                           newvalue=newvalue,
                           oldvalue=oldvalue)
Example #6
0
 def test_210_auto_rename(self):
     """
     Test for #869
     :return:
     """
     vms = self.create_backup_vms()
     self.make_backup(vms)
     self.restore_backup(options={'rename_conflicting': True})
     for vm in vms:
         with self.assertNotRaises(
             (qubes.exc.QubesVMNotFoundError, KeyError)):
             restored_vm = self.app.domains[vm.name + '1']
         if vm.netvm and not vm.property_is_default('netvm'):
             self.assertEqual(restored_vm.netvm.name, vm.netvm.name + '1')
Example #7
0
def _setter_default_netvm(app, prop, value):
    # skip netvm loop check while loading qubes.xml, to avoid tricky loading
    # order
    if not app.events_enabled:
        return value

    if value is None:
        return value
    # forbid setting to a value that would result in netvm loop
    for vm in app.domains:
        if not hasattr(vm, 'netvm'):
            continue
        if not vm.property_is_default('netvm'):
            continue
        if value == vm \
                or value in app.domains.get_vms_connected_to(vm):
            raise qubes.exc.QubesPropertyValueError(app, prop, value,
                'Network loop on \'{!s}\''.format(vm))
    return value
Example #8
0
def _setter_default_netvm(app, prop, value):
    # skip netvm loop check while loading qubes.xml, to avoid tricky loading
    # order
    if not app.events_enabled:
        return value

    if value is None:
        return value
    # forbid setting to a value that would result in netvm loop
    for vm in app.domains:
        if not hasattr(vm, 'netvm'):
            continue
        if not vm.property_is_default('netvm'):
            continue
        if value == vm \
                or value in app.domains.get_vms_connected_to(vm):
            raise qubes.exc.QubesPropertyValueError(app, prop, value,
                'Network loop on \'{!s}\''.format(vm))
    return value