feat: uniform system.content source schema across installers and repositories

This commit is contained in:
2026-05-27 05:15:32 +02:00
parent 939c5c741f
commit d922efd2e4
25 changed files with 419 additions and 50 deletions

View File

@@ -0,0 +1,40 @@
---
- name: "Seed raw system input (content {{ cf.name }})"
ansible.builtin.set_fact:
system: "{{ cf.system }}"
- name: "Normalize system (content {{ cf.name }})"
ansible.builtin.include_tasks: ../../roles/global_defaults/tasks/_normalize_system.yml
- name: "Apply family defaults (content {{ cf.name }})"
ansible.builtin.include_tasks: ../../roles/global_defaults/tasks/_apply_family_defaults.yml
- name: "Assert computed content source and url (content {{ cf.name }})"
ansible.builtin.assert:
that:
- system_cfg.content.source == cf.expect.source
- system_cfg.content.url == cf.expect.url
fail_msg: "[content {{ cf.name }}] FAIL got {{ system_cfg.content }}"
success_msg: "[content {{ cf.name }}] OK {{ system_cfg.content.source }} {{ system_cfg.content.url }}"
- name: "Assert satellite register inputs (content {{ cf.name }})"
when: cf.expect.satellite is defined
ansible.builtin.assert:
that:
- system_cfg.content.satellite.host == cf.expect.satellite.host
- system_cfg.content.satellite.org == cf.expect.satellite.org
- system_cfg.content.satellite.activation_key == cf.expect.satellite.activation_key
fail_msg: "[content {{ cf.name }}] satellite FAIL got {{ system_cfg.content.satellite }}"
- name: "Assert Arch reflector lock-out (content {{ cf.name }})"
when: cf.expect_reflector is defined
block:
- name: "Load Arch package set (content {{ cf.name }})"
ansible.builtin.include_vars:
file: ../../roles/bootstrap/vars/main.yml
- name: "Assert reflector membership (content {{ cf.name }})"
ansible.builtin.assert:
that:
- ('reflector' in (bootstrap_archlinux.base + bootstrap_archlinux.conditional)) == (cf.expect_reflector == 'present')
fail_msg: "[content {{ cf.name }}] reflector expected {{ cf.expect_reflector }}, url='{{ system_cfg.content.url }}'"

View File

@@ -0,0 +1,78 @@
---
# Raw system.content input -> expected normalized system_cfg.content. Covers family
# source defaults (EL=dvd, else mirror), url pass-through, satellite inputs, and the
# Arch reflector lock-out (dropped only when a custom mirror url is set).
content_fixtures:
- name: arch-mirror-url-drops-reflector
system:
os: archlinux
content: { url: "https://mirror.internal/archlinux" }
expect:
source: mirror
url: "https://mirror.internal/archlinux"
expect_reflector: absent
- name: arch-no-url-keeps-public-and-reflector
system:
os: archlinux
content: {}
expect:
source: mirror
url: ""
expect_reflector: present
- name: el-mirror-url
system:
os: almalinux
version: "10"
content: { source: mirror, url: "https://mirror.internal/almalinux" }
expect:
source: mirror
url: "https://mirror.internal/almalinux"
- name: el-default-dvd
system:
os: rhel
version: "10"
content: {}
expect:
source: dvd
url: ""
- name: el-satellite-register
system:
os: almalinux
version: "10"
content:
source: satellite
satellite: { host: "sat.internal", org: "SG", activation_key: "ak-el10" }
expect:
source: satellite
url: ""
satellite: { host: "sat.internal", org: "SG", activation_key: "ak-el10" }
- name: debian-default-mirror
system:
os: debian
version: "13"
content: {}
expect:
source: mirror
url: "https://deb.debian.org/debian/"
- name: debian-custom-mirror-lands
system:
os: debian
version: "13"
content: { source: mirror, url: "https://mirror.internal/debian" }
expect:
source: mirror
url: "https://mirror.internal/debian"
- name: ubuntu-default-mirror
system:
os: ubuntu
content: {}
expect:
source: mirror
url: "http://archive.ubuntu.com/ubuntu/"

View File

@@ -0,0 +1,22 @@
---
# Run: ansible-playbook tests/content/test_content.yml
- name: Content-source fixture tests
hosts: localhost
gather_facts: false
connection: local
vars:
hypervisor_type: libvirt
hypervisor_cfg: { folder: "" }
vars_files:
- content_fixtures.yml
tasks:
- name: Load global defaults (system_defaults, content_mirror_defaults, os maps)
ansible.builtin.include_vars:
file: ../../roles/global_defaults/defaults/main.yml
- name: Run each content fixture
ansible.builtin.include_tasks: _assert_content.yml
loop: "{{ content_fixtures }}"
loop_control:
loop_var: cf
label: "{{ cf.name }}"