From 5b8974a6ed37a6fc6a412adcfed877b61f3d685b Mon Sep 17 00:00:00 2001 From: Lukas Greve Date: Wed, 25 Mar 2026 20:06:13 +0100 Subject: [PATCH] hypervisor: implement base vs desktop variants with GUI packages only for desktop - Split guest-agents/packages.ks into base.ks (qemu-guest-agent) and gui.ks (spice-vdagent) - Move hypervisor modifier from variant_type.hypervisor to dedicated modifier section - Added hypervisor modifier with base (headless) and desktop (GUI) options - Create hypervisor-desktop variant with desktop: gnome for GUI hypervisors - Update generate_recipe.py to recognize hypervisor-desktop variant name This ensures GUI packages (virt-manager, spice-vdagent) are only included in hypervisors with desktop environments, keeping headless hypervisors minimal. --- fragments/guest-agents/base.ks | 5 ++ fragments/guest-agents/gui.ks | 5 ++ fragments/guest-agents/packages.ks | 8 --- .../generate_recipe.cpython-314.pyc | Bin 35768 -> 35788 bytes recipe-generator/generate_recipe.py | 4 +- recipe-generator/recipe_templates.yaml | 17 +++--- recipe-generator/recipes_manifest.yaml | 46 ++++++++------- ...sor-desktop_intelcpu_intelgpu_rawhide.cfg} | 15 ++--- recipes/install_hypervisor_amdcpu_rawhide.cfg | 10 ++-- .../install_hypervisor_intelcpu_rawhide.cfg | 10 ++-- ...ipe_generator.cpython-314-pytest-8.4.2.pyc | Bin 55121 -> 55034 bytes tests/test_recipe_generator.py | 54 +++++++++--------- 12 files changed, 91 insertions(+), 83 deletions(-) create mode 100644 fragments/guest-agents/base.ks create mode 100644 fragments/guest-agents/gui.ks delete mode 100644 fragments/guest-agents/packages.ks rename recipes/{install_hypervisor_intelcpu_intelgpu_rawhide.cfg => install_hypervisor-desktop_intelcpu_intelgpu_rawhide.cfg} (75%) diff --git a/fragments/guest-agents/base.ks b/fragments/guest-agents/base.ks new file mode 100644 index 0000000..560b3d5 --- /dev/null +++ b/fragments/guest-agents/base.ks @@ -0,0 +1,5 @@ +# Guest agents for virtual machines (base) + +%packages --exclude-weakdeps +qemu-guest-agent +%end diff --git a/fragments/guest-agents/gui.ks b/fragments/guest-agents/gui.ks new file mode 100644 index 0000000..a789159 --- /dev/null +++ b/fragments/guest-agents/gui.ks @@ -0,0 +1,5 @@ +# Guest agents for virtual machines (GUI only) + +%packages --exclude-weakdeps +spice-vdagent +%end diff --git a/fragments/guest-agents/packages.ks b/fragments/guest-agents/packages.ks deleted file mode 100644 index 80e0be0..0000000 --- a/fragments/guest-agents/packages.ks +++ /dev/null @@ -1,8 +0,0 @@ -# Guest agents for virtual machines - -%packages --exclude-weakdeps # Beginning of the packages section. Excludes weak package dependencies. - -qemu-guest-agent # "QEMU guest agent" The qemu-guest agent is unnecessary for a bare-metal system. However, it is included here to cover cases where this kickstart file is used to deploy a virtual machine -spice-vdagent # "Agent for Spice guests" The spice agent is unnecessary for a bare-metal system. However, it is included here to cover cases where this kickstart file is used to deploy a virtual machine - -%end # End of the packages section diff --git a/recipe-generator/__pycache__/generate_recipe.cpython-314.pyc b/recipe-generator/__pycache__/generate_recipe.cpython-314.pyc index c45868fdd011603f49d3d88cfcd1ac61afeeb9fa..393fbc00bd7b373000fcb730aca9bd062788b23d 100644 GIT binary patch delta 65 zcmdlno$1VUCSGkmUM>b8s5Ly28Mcx4UMM5WzooUB(CSGkmUM>b8*sXdbQ)eUZy--Hx$!|g>CrgIiVhOz>AG-N_*i{n%HsKGo diff --git a/recipe-generator/generate_recipe.py b/recipe-generator/generate_recipe.py index 0075d77..fc47b42 100755 --- a/recipe-generator/generate_recipe.py +++ b/recipe-generator/generate_recipe.py @@ -464,8 +464,8 @@ class RecipeGenerator: # Build base parts parts = [recipe_type.replace('_', '-')] - # Add variant subname for install variants (desktop, server, hypervisor) - if variant_subname and variant_subname in ['desktop', 'server', 'hypervisor']: + # Add variant subname for install variants (desktop, server, hypervisor, hypervisor-desktop) + if variant_subname and variant_subname in ['desktop', 'server', 'hypervisor', 'hypervisor-desktop']: parts.append(variant_subname) # Add hypervisor-type (list, first type only for filename) diff --git a/recipe-generator/recipe_templates.yaml b/recipe-generator/recipe_templates.yaml index 60a5ef6..9fabd15 100644 --- a/recipe-generator/recipe_templates.yaml +++ b/recipe-generator/recipe_templates.yaml @@ -24,13 +24,6 @@ templates: desktop: server: hypervisor: - - fragments/hypervisor/base/packages.ks - - fragments/hypervisor/base/services.ks - - fragments/hypervisor/base/post-scripts.ks - - fragments/repo/rawhide-mirrors.ks - - fragments/packages/virtual-machine-manager/packages.ks - - fragments/packages/virtual-machine-manager/post-scripts.ks - - fragments/guest-agents/packages.ks modifiers: version: "43": fragments/repo/fedora-43-mirrors.ks @@ -58,6 +51,16 @@ templates: amdcpu: fragments/hypervisor/amdcpu.ks intelcpu: fragments/hypervisor/intelcpu.ks intelgpu: fragments/hypervisor/intelgpu.ks + hypervisor: + base: + - fragments/hypervisor/base/packages.ks + - fragments/hypervisor/base/services.ks + - fragments/hypervisor/base/post-scripts.ks + - fragments/guest-agents/base.ks + desktop: + - fragments/packages/virtual-machine-manager/packages.ks + - fragments/packages/virtual-machine-manager/post-scripts.ks + - fragments/guest-agents/gui.ks # Live recipe - for live-desktop or live-server live: diff --git a/recipe-generator/recipes_manifest.yaml b/recipe-generator/recipes_manifest.yaml index 2cae79a..5e392d0 100644 --- a/recipe-generator/recipes_manifest.yaml +++ b/recipe-generator/recipes_manifest.yaml @@ -82,34 +82,40 @@ recipes: # Install variants - hypervisor - name: install variants: - - name: hypervisor + - name: hypervisor + version: "rawhide" + storage: standard + bootloader: grub + security: secure + hardware-support: true + hypervisor: base + hypervisor-type: + - amdcpu + - name: hypervisor + version: "rawhide" + storage: standard + bootloader: grub + security: secure + hardware-support: true + hypervisor: base + hypervisor-type: + - intelcpu + + # Install variants - hypervisor with desktop + - name: install + variants: + - name: hypervisor-desktop version: "rawhide" + desktop: gnome storage: standard bootloader: grub security: secure hardware-support: true - hypervisor: true - hypervisor-type: - - amdcpu - - name: hypervisor - version: "rawhide" - storage: standard - bootloader: grub - security: secure - hardware-support: true - hypervisor: true - hypervisor-type: - - intelcpu - - name: hypervisor - version: "rawhide" - storage: standard - bootloader: grub - security: secure - hardware-support: true - hypervisor: true + hypervisor: desktop hypervisor-type: - intelcpu - intelgpu + initial-setup: desktop # Live variants - desktop - name: live diff --git a/recipes/install_hypervisor_intelcpu_intelgpu_rawhide.cfg b/recipes/install_hypervisor-desktop_intelcpu_intelgpu_rawhide.cfg similarity index 75% rename from recipes/install_hypervisor_intelcpu_intelgpu_rawhide.cfg rename to recipes/install_hypervisor-desktop_intelcpu_intelgpu_rawhide.cfg index 0074407..79d773b 100644 --- a/recipes/install_hypervisor_intelcpu_intelgpu_rawhide.cfg +++ b/recipes/install_hypervisor-desktop_intelcpu_intelgpu_rawhide.cfg @@ -16,13 +16,14 @@ %ksappend fragments/packages/core-group.ks %ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/hand-picked.ks -%ksappend fragments/hypervisor/base/packages.ks -%ksappend fragments/hypervisor/base/services.ks -%ksappend fragments/hypervisor/base/post-scripts.ks -%ksappend fragments/repo/rawhide-mirrors.ks +%ksappend fragments/desktop/gnome/config.ks +%ksappend fragments/desktop/gnome/packages.ks +%ksappend fragments/desktop/gnome/post-scripts.ks +%ksappend fragments/core/security/enabled.ks %ksappend fragments/packages/virtual-machine-manager/packages.ks %ksappend fragments/packages/virtual-machine-manager/post-scripts.ks -%ksappend fragments/guest-agents/packages.ks -%ksappend fragments/core/security/enabled.ks +%ksappend fragments/guest-agents/gui.ks %ksappend fragments/hypervisor/intelcpu.ks -%ksappend fragments/hypervisor/intelgpu.ks \ No newline at end of file +%ksappend fragments/hypervisor/intelgpu.ks +%ksappend fragments/initial-setup/desktop/config.ks +%ksappend fragments/repo/rawhide-mirrors.ks \ No newline at end of file diff --git a/recipes/install_hypervisor_amdcpu_rawhide.cfg b/recipes/install_hypervisor_amdcpu_rawhide.cfg index 9c7853a..e1d7988 100644 --- a/recipes/install_hypervisor_amdcpu_rawhide.cfg +++ b/recipes/install_hypervisor_amdcpu_rawhide.cfg @@ -16,12 +16,10 @@ %ksappend fragments/packages/core-group.ks %ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/hand-picked.ks +%ksappend fragments/core/security/enabled.ks %ksappend fragments/hypervisor/base/packages.ks %ksappend fragments/hypervisor/base/services.ks %ksappend fragments/hypervisor/base/post-scripts.ks -%ksappend fragments/repo/rawhide-mirrors.ks -%ksappend fragments/packages/virtual-machine-manager/packages.ks -%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks -%ksappend fragments/guest-agents/packages.ks -%ksappend fragments/core/security/enabled.ks -%ksappend fragments/hypervisor/amdcpu.ks \ No newline at end of file +%ksappend fragments/guest-agents/base.ks +%ksappend fragments/hypervisor/amdcpu.ks +%ksappend fragments/repo/rawhide-mirrors.ks \ No newline at end of file diff --git a/recipes/install_hypervisor_intelcpu_rawhide.cfg b/recipes/install_hypervisor_intelcpu_rawhide.cfg index fb82fd2..d611cdf 100644 --- a/recipes/install_hypervisor_intelcpu_rawhide.cfg +++ b/recipes/install_hypervisor_intelcpu_rawhide.cfg @@ -16,12 +16,10 @@ %ksappend fragments/packages/core-group.ks %ksappend fragments/packages/fedora-remix.ks %ksappend fragments/packages/hand-picked.ks +%ksappend fragments/core/security/enabled.ks %ksappend fragments/hypervisor/base/packages.ks %ksappend fragments/hypervisor/base/services.ks %ksappend fragments/hypervisor/base/post-scripts.ks -%ksappend fragments/repo/rawhide-mirrors.ks -%ksappend fragments/packages/virtual-machine-manager/packages.ks -%ksappend fragments/packages/virtual-machine-manager/post-scripts.ks -%ksappend fragments/guest-agents/packages.ks -%ksappend fragments/core/security/enabled.ks -%ksappend fragments/hypervisor/intelcpu.ks \ No newline at end of file +%ksappend fragments/guest-agents/base.ks +%ksappend fragments/hypervisor/intelcpu.ks +%ksappend fragments/repo/rawhide-mirrors.ks \ No newline at end of file diff --git a/tests/__pycache__/test_recipe_generator.cpython-314-pytest-8.4.2.pyc b/tests/__pycache__/test_recipe_generator.cpython-314-pytest-8.4.2.pyc index 215ce4b376537744501b59ecaa82ed57a79ae0a7..c27421334d9fb2a85aabbc54b44fa0597c6ea15d 100644 GIT binary patch delta 5285 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 UAZq5exSCoWd<9uUKN{Zqe>Oc+bN~PV delta 5564 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 Yo6(;MU0@kY7iytlELqqLyT%UuA3#C7Z~y=R diff --git a/tests/test_recipe_generator.py b/tests/test_recipe_generator.py index 5e1f548..2ea5e7d 100644 --- a/tests/test_recipe_generator.py +++ b/tests/test_recipe_generator.py @@ -26,16 +26,16 @@ class TestRecipeGenerator: def test_template_loading(self): """Test that templates are loaded correctly.""" assert isinstance(self.generator.templates, dict) - assert len(self.generator.templates) == 5 - assert 'virtual-desktop' in self.generator.templates - assert 'virtual-server' in self.generator.templates - assert 'desktop-hypervisor' in self.generator.templates - assert 'live-desktop' in self.generator.templates - assert 'live-server' in self.generator.templates + assert len(self.generator.templates) == 2 + assert 'install' in self.generator.templates + assert 'install' in self.generator.templates + assert 'install' in self.generator.templates + assert 'live' in self.generator.templates + assert 'live' in self.generator.templates def test_validate_template_success(self): """Test validation of valid templates.""" - template = self.generator.templates['virtual-desktop'] + template = self.generator.templates['install'] errors = self.generator.validate_template(template) assert errors == [] @@ -60,7 +60,7 @@ class TestRecipeGenerator: def test_generate_virtual_desktop_basic(self): """Test generating basic virtual desktop recipe.""" - content = self.generator.generate_recipe('virtual-desktop', '43', + content = self.generator.generate_recipe('install', '43', desktop='gnome', storage='standard', security='secure') @@ -72,7 +72,7 @@ class TestRecipeGenerator: def test_generate_virtual_desktop_encrypted(self): """Test generating encrypted virtual desktop recipe.""" - content = self.generator.generate_recipe('virtual-desktop', 'rawhide', + content = self.generator.generate_recipe('install', 'rawhide', desktop='gnome', storage='encrypted', security='secure') @@ -80,7 +80,7 @@ class TestRecipeGenerator: def test_generate_virtual_desktop_labwc(self): """Test generating LabWC virtual desktop recipe.""" - content = self.generator.generate_recipe('virtual-desktop', '43', + content = self.generator.generate_recipe('install', '43', desktop='labwc', storage='standard', security='secure') @@ -89,7 +89,7 @@ class TestRecipeGenerator: def test_generate_virtual_desktop_devel(self): """Test generating development mode virtual desktop recipe.""" - content = self.generator.generate_recipe('virtual-desktop', '43', + content = self.generator.generate_recipe('install', '43', desktop='gnome', storage='standard', security='devel') @@ -98,7 +98,7 @@ class TestRecipeGenerator: def test_generate_virtual_server(self): """Test generating virtual server recipe.""" - content = self.generator.generate_recipe('virtual-server', 'rawhide', + content = self.generator.generate_recipe('install', 'rawhide', security='secure') assert '# A recipe for a virtual server' in content assert '%ksappend fragments/shared/desktop/gnome/packages.ks' not in content @@ -106,7 +106,7 @@ class TestRecipeGenerator: def test_generate_desktop_hypervisor_amd(self): """Test generating AMD CPU hypervisor recipe.""" - content = self.generator.generate_recipe('desktop-hypervisor', 'rawhide', + content = self.generator.generate_recipe('install', 'rawhide', cpu='amdcpu', security='secure') assert '%ksappend fragments/shared/hypervisor/amdcpu.ks' in content @@ -114,7 +114,7 @@ class TestRecipeGenerator: def test_generate_desktop_hypervisor_intel_gpu(self): """Test generating Intel CPU+GPU hypervisor recipe.""" - content = self.generator.generate_recipe('desktop-hypervisor', 'rawhide', + content = self.generator.generate_recipe('install', 'rawhide', cpu='intelcpu', gpu='intelgpu', security='secure') @@ -123,7 +123,7 @@ class TestRecipeGenerator: def test_generate_live_desktop(self): """Test generating live desktop recipe.""" - content = self.generator.generate_recipe('live-desktop', 'rawhide', + content = self.generator.generate_recipe('live', 'rawhide', desktop='gnome', security='secure') assert '# A recipe for a live desktop' in content @@ -132,7 +132,7 @@ class TestRecipeGenerator: def test_generate_live_server(self): """Test generating live server recipe.""" - content = self.generator.generate_recipe('live-server', 'rawhide', + content = self.generator.generate_recipe('live', 'rawhide', security='secure') assert '# A recipe for a live server' in content assert '%ksappend fragments/shared/live/core/base.ks' in content @@ -140,7 +140,7 @@ class TestRecipeGenerator: def test_no_duplicate_includes(self): """Test that duplicate includes are prevented.""" - content = self.generator.generate_recipe('desktop-hypervisor', 'rawhide', + content = self.generator.generate_recipe('install', 'rawhide', cpu='intelcpu', gpu='intelgpu', security='secure') @@ -150,7 +150,7 @@ class TestRecipeGenerator: def test_missing_ingredient_detection(self): """Test that missing fragments are detected.""" - content = self.generator.generate_recipe('virtual-desktop', '43', + content = self.generator.generate_recipe('install', '43', desktop='gnome', storage='standard', security='secure') @@ -159,15 +159,15 @@ class TestRecipeGenerator: def test_filename_generation_standard(self): """Test filename generation for standard configuration.""" - filename = self.generator.generate_filename('virtual-desktop', '43', + filename = self.generator.generate_filename('install', '43', desktop='gnome', storage='standard', security='secure') - assert filename == 'virtual-desktop_43.cfg' + assert filename == 'install_desktop_43.cfg' def test_filename_generation_encrypted(self): """Test filename generation for encrypted storage.""" - filename = self.generator.generate_filename('virtual-desktop', 'rawhide', + filename = self.generator.generate_filename('install', 'rawhide', desktop='gnome', storage='encrypted', security='secure') @@ -175,7 +175,7 @@ class TestRecipeGenerator: def test_filename_generation_devel(self): """Test filename generation for development mode.""" - filename = self.generator.generate_filename('virtual-desktop', '43', + filename = self.generator.generate_filename('install', '43', desktop='gnome', storage='standard', security='devel') @@ -183,15 +183,15 @@ class TestRecipeGenerator: def test_filename_generation_cpu_gpu(self): """Test filename generation for hypervisor with CPU/GPU.""" - filename = self.generator.generate_filename('desktop-hypervisor', 'rawhide', + filename = self.generator.generate_filename('install', 'rawhide', cpu='intelcpu', gpu='intelgpu', security='secure') - assert filename == 'desktop-hypervisor_intelcpu_intelgpu_rawhide.cfg' + assert filename == 'install_hypervisor_intelcpu_intelgpu_rawhide.cfg' def test_filename_generation_labwc(self): """Test filename generation for non-default desktop.""" - filename = self.generator.generate_filename('virtual-desktop', '43', + filename = self.generator.generate_filename('install', '43', desktop='labwc', storage='standard', security='secure') @@ -199,7 +199,7 @@ class TestRecipeGenerator: def test_filename_generation_hypervisor(self): """Test filename generation for live server with hypervisor.""" - filename = self.generator.generate_filename('live-server', 'rawhide', + filename = self.generator.generate_filename('live', 'rawhide', security='secure', hypervisor=True) assert filename == 'live-server_rawhide_hypervisor.cfg' @@ -282,7 +282,7 @@ invalidcmd --option=value def test_validate_recipe_full_validation(self): """Test full validation combines file and semantic checks.""" - content = self.generator.generate_recipe('virtual-desktop', '43', + content = self.generator.generate_recipe('install', '43', desktop='gnome', storage='standard', security='secure')