vm/net: move 'netvm' value validation to setter
This commit is contained in:
parent
3bc8facc0b
commit
8c3c65f40f
@ -322,10 +322,6 @@ class VMProperty(qubes.property):
|
||||
raise TypeError(
|
||||
"'type' keyword parameter is unsupported in {}".format(
|
||||
self.__class__.__name__))
|
||||
if 'setter' in kwargs:
|
||||
raise TypeError(
|
||||
"'setter' keyword parameter is unsupported in {}".format(
|
||||
self.__class__.__name__))
|
||||
if not issubclass(vmclass, BaseVM):
|
||||
raise TypeError(
|
||||
"'vmclass' should specify a subclass of qubes.vm.BaseVM")
|
||||
|
@ -63,6 +63,20 @@ def _setter_ip(self, prop, value):
|
||||
return value
|
||||
|
||||
|
||||
def _setter_netvm(self, prop, value):
|
||||
if value is None:
|
||||
return
|
||||
if not value.provides_network:
|
||||
raise qubes.exc.QubesValueError(
|
||||
'The {!s} qube does not provide network'.format(value))
|
||||
|
||||
if value is self \
|
||||
or value in self.app.domains.get_vms_connected_to(self):
|
||||
raise qubes.exc.QubesValueError(
|
||||
'Loops in network are unsupported')
|
||||
return value
|
||||
|
||||
|
||||
class NetVMMixin(qubes.events.Emitter):
|
||||
''' Mixin containing network functionality '''
|
||||
mac = qubes.property('mac', type=str,
|
||||
@ -79,6 +93,7 @@ class NetVMMixin(qubes.events.Emitter):
|
||||
netvm = qubes.VMProperty('netvm', load_stage=4, allow_none=True,
|
||||
default=(lambda self: self.app.default_fw_netvm if self.provides_network
|
||||
else self.app.default_netvm),
|
||||
setter=_setter_netvm,
|
||||
doc='''VM that provides network connection to this domain. When
|
||||
`None`, machine is disconnected. When absent, domain uses default
|
||||
NetVM.''')
|
||||
@ -338,15 +353,6 @@ class NetVMMixin(qubes.events.Emitter):
|
||||
''' Run sanity checks before setting a new NetVM '''
|
||||
# pylint: disable=unused-argument
|
||||
if newvalue is not None:
|
||||
if not newvalue.provides_network:
|
||||
raise qubes.exc.QubesValueError(
|
||||
'The {!s} qube does not provide network'.format(newvalue))
|
||||
|
||||
if newvalue is self \
|
||||
or newvalue in self.app.domains.get_vms_connected_to(self):
|
||||
raise qubes.exc.QubesValueError(
|
||||
'Loops in network are unsupported')
|
||||
|
||||
if not self.app.vmm.offline_mode \
|
||||
and self.is_running() and not newvalue.is_running():
|
||||
raise qubes.exc.QubesVMNotStartedError(newvalue,
|
||||
|
Loading…
Reference in New Issue
Block a user