dispvm.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/python2 -O
  2. # vim: fileencoding=utf-8
  3. import qubes.vm.qubesvm
  4. import qubes.vm.appvm
  5. import qubes.config
  6. class DispVM(qubes.vm.qubesvm.QubesVM):
  7. '''Disposable VM'''
  8. template = qubes.VMProperty('template',
  9. load_stage=4,
  10. vmclass=qubes.vm.appvm.AppVM,
  11. ls_width=31,
  12. doc='AppVM, on which this DispVM is based.')
  13. dispid = qubes.property('dispid', type=int, write_once=True,
  14. clone=False,
  15. ls_width=3,
  16. doc='''Internal, persistent identifier of particular DispVM.''')
  17. def __init__(self, *args, **kwargs):
  18. self.volumes = {}
  19. self.volume_config = {
  20. 'root': {
  21. 'name': 'root',
  22. 'pool': 'default',
  23. 'volume_type': 'snapshot',
  24. },
  25. 'private': {
  26. 'name': 'private',
  27. 'pool': 'default',
  28. 'volume_type': 'snapshot',
  29. },
  30. 'volatile': {
  31. 'name': 'volatile',
  32. 'pool': 'default',
  33. 'volume_type': 'volatile',
  34. 'size': qubes.config.defaults['root_img_size'] +
  35. qubes.config.defaults['private_img_size'],
  36. },
  37. 'kernel': {
  38. 'name': 'kernel',
  39. 'pool': 'linux-kernel',
  40. 'volume_type': 'read-only',
  41. }
  42. }
  43. super(DispVM, self).__init__(*args, **kwargs)
  44. @qubes.events.handler('domain-load')
  45. def on_domain_loaded(self, event):
  46. # pylint: disable=unused-argument
  47. # Some additional checks for template based VM
  48. assert self.template
  49. # self.template.appvms.add(self) # XXX