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 c45868f..393fbc0 100644 Binary files a/recipe-generator/__pycache__/generate_recipe.cpython-314.pyc and b/recipe-generator/__pycache__/generate_recipe.cpython-314.pyc differ 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 215ce4b..c274213 100644 Binary files a/tests/__pycache__/test_recipe_generator.cpython-314-pytest-8.4.2.pyc and b/tests/__pycache__/test_recipe_generator.cpython-314-pytest-8.4.2.pyc differ 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')