Browse Source

qvm-template-postprocess: extract config handling into separate function

Keep post_install() short.
Marek Marczykowski-Górecki 3 years ago
parent
commit
c4efdf41c5
1 changed files with 55 additions and 42 deletions
  1. 55 42
      qubesadmin/tools/qvm_template_postprocess.py

+ 55 - 42
qubesadmin/tools/qvm_template_postprocess.py

@@ -309,48 +309,7 @@ def post_install(args):
 
     conf_path = os.path.join(args.dir, 'template.conf')
     if os.path.exists(conf_path):
-        conf = parse_template_config(conf_path)
-        # Import qvm-feature tags
-        for key in (
-                'no-monitor-layout',
-                'pci-e820-host',
-                'linux-stubdom',
-                'gui',
-                'gui-emulated'
-                'qrexec'):
-            if key in conf:
-                if conf[key] == '1':
-                    vm.features[key] = conf[key]
-                else:
-                    vm.log.warning(
-                        'ignoring boolean config flags that are not \'1\'')
-        for key in (
-                'net.fake-ip',
-                'net.fake-gateway',
-                'net.fake-netmask'):
-            if key in conf:
-                if validate_ip(conf[key]):
-                    vm.features[key] = conf[key]
-                else:
-                    vm.log.warning(
-                        'ignoring invalid value for \'%s\'', key)
-        if 'virt-mode' in conf:
-            if conf['virt-mode'] == 'pv' and args.allow_pv:
-                vm.virt_mode = 'pv'
-            elif conf['virt-mode'] == 'pv':
-                vm.log.warning(
-                    '--allow-pv not set, ignoring request to change virt-mode')
-            elif conf['virt-mode'] in ('pvh', 'hvm'):
-                vm.virt_mode = conf['virt-mode']
-            else:
-                vm.log.warning('ignoring invalid value for virt-mode')
-
-        if 'kernel' in conf:
-            if conf['kernel'] == '':
-                vm.kernel = ''
-            else:
-                vm.log.warning(
-                    'Currently only supports setting kernel to (none)')
+        import_template_config(args, conf_path, vm)
 
     if not args.skip_start:
         yield from call_postinstall_service(vm)
@@ -372,6 +331,60 @@ def post_install(args):
     return 0
 
 
+def import_template_config(args, conf_path, vm):
+    """
+    Parse template.conf and apply its content to the just installed TemplateVM
+
+    :param args: arguments for qvm-template-postprocess (used for --allow-pv
+        option and possibly some other in the future)
+    :param conf_path: path to the template.conf
+    :param vm: Template to operate on
+    :return:
+    """
+    conf = parse_template_config(conf_path)
+    # Import qvm-feature tags
+    for key in (
+            'no-monitor-layout',
+            'pci-e820-host',
+            'linux-stubdom',
+            'gui',
+            'gui-emulated'
+            'qrexec'):
+        if key in conf:
+            if conf[key] == '1':
+                vm.features[key] = conf[key]
+            else:
+                vm.log.warning(
+                    'ignoring boolean config flags that are not \'1\'')
+    for key in (
+            'net.fake-ip',
+            'net.fake-gateway',
+            'net.fake-netmask'):
+        if key in conf:
+            if validate_ip(conf[key]):
+                vm.features[key] = conf[key]
+            else:
+                vm.log.warning(
+                    'ignoring invalid value for \'%s\'', key)
+    if 'virt-mode' in conf:
+        if conf['virt-mode'] == 'pv' and args.allow_pv:
+            vm.virt_mode = 'pv'
+        elif conf['virt-mode'] == 'pv':
+            vm.log.warning(
+                '--allow-pv not set, ignoring request to change virt-mode')
+        elif conf['virt-mode'] in ('pvh', 'hvm'):
+            vm.virt_mode = conf['virt-mode']
+        else:
+            vm.log.warning('ignoring invalid value for virt-mode')
+
+    if 'kernel' in conf:
+        if conf['kernel'] == '':
+            vm.kernel = ''
+        else:
+            vm.log.warning(
+                'Currently only supports setting kernel to (none)')
+
+
 def pre_remove(args):
     '''Handle pre-removal tasks'''
     app = args.app