Quellcode durchsuchen

vm: reduce code duplication

Move inheriting volume from template to a helper function.

No functional change.

QubesOS/qubes-issues#2256
Marek Marczykowski-Górecki vor 7 Jahren
Ursprung
Commit
63c23c835b
3 geänderte Dateien mit 20 neuen und 21 gelöschten Zeilen
  1. 1 10
      qubes/vm/appvm.py
  2. 1 11
      qubes/vm/dispvm.py
  3. 18 0
      qubes/vm/qubesvm.py

+ 1 - 10
qubes/vm/appvm.py

@@ -86,16 +86,7 @@ class AppVM(qubes.vm.qubesvm.QubesVM):
             for name, conf in self.volume_config.items():
                 tpl_volume = template.volumes[name]
 
-                conf['size'] = tpl_volume.size
-                conf['pool'] = tpl_volume.pool
-
-                has_source = ('source' in conf and conf['source'] is not None)
-                is_snapshot = 'snap_on_start' in conf and conf['snap_on_start']
-                if is_snapshot and not has_source:
-                    if tpl_volume.source is not None:
-                        conf['source'] = tpl_volume.source
-                    else:
-                        conf['source'] = tpl_volume.vid
+                self.config_volume_from_source(conf, tpl_volume)
 
             for name, config in template.volume_config.items():
                 # in case the template vm has more volumes add them to own

+ 1 - 11
qubes/vm/dispvm.py

@@ -84,17 +84,7 @@ class DispVM(qubes.vm.qubesvm.QubesVM):
 
             for name, conf in self.volume_config.items():
                 tpl_volume = template.volumes[name]
-
-                conf['size'] = tpl_volume.size
-                conf['pool'] = tpl_volume.pool
-
-                has_source = ('source' in conf and conf['source'] is not None)
-                is_snapshot = 'snap_on_start' in conf and conf['snap_on_start']
-                if is_snapshot and not has_source:
-                    if tpl_volume.source is not None:
-                        conf['source'] = tpl_volume.source
-                    else:
-                        conf['source'] = tpl_volume.vid
+                self.config_volume_from_source(conf, tpl_volume)
 
             for name, config in template.volume_config.items():
                 # in case the template vm has more volumes add them to own

+ 18 - 0
qubes/vm/qubesvm.py

@@ -1762,6 +1762,24 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
     # helper methods
     #
 
+    @staticmethod
+    def config_volume_from_source(volume_config, source):
+        '''Adjust storage volume config to use given volume as a source'''
+
+        volume_config['size'] = source.size
+        volume_config['pool'] = source.pool
+
+        has_source = (
+            'source' in volume_config and volume_config['source'] is not None)
+        is_snapshot = 'snap_on_start' in volume_config and volume_config[
+            'snap_on_start']
+        if is_snapshot and not has_source:
+            if source.source is not None:
+                volume_config['source'] = source.source
+            else:
+                volume_config['source'] = source.vid
+        return volume_config
+
     def relative_path(self, path):
         '''Return path relative to py:attr:`dir_path`.