[PATCH 09/14] bootlinux: fix os detection for 9p delegated tasks with registered facts
Daniel Gomez <[email protected]> Tue, 28 Oct 2025 19:11:45 +0100
| Newsgroups | dev.linux.lists.kdevops |
|---|---|
| Message-ID | <[email protected]> |
From: Daniel Gomez <[email protected]> When using 9P builds, the Linux kernel is built once on the control host (delegate_to: localhost, run_once: true) and shared to all guests. The dependency installation tasks reference ansible_os_family which gets overwritten when gathering facts from localhost, causing the wrong distribution's packages to be installed. Register localhost facts to separate variables (localhost_os_family, localhost_distribution) and refresh target host facts afterward to ensure both contexts have correct values. Update all OS-specific conditionals in install-deps to use the localhost_* variables since packages are installed on the control host, not the target guests. Change import_tasks to include_tasks in update-grub since the conditionals reference runtime facts that aren't available at parse time. Generated-by: Claude AI Signed-off-by: Daniel Gomez <[email protected]> --- playbooks/roles/bootlinux/tasks/build/9p.yml | 18 ++++++++++++++++++ playbooks/roles/bootlinux/tasks/install-deps/main.yml | 6 +++--- .../roles/bootlinux/tasks/install-deps/redhat/main.yml | 4 ++-- playbooks/roles/bootlinux/tasks/update-grub/main.yml | 6 +++--- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/playbooks/roles/bootlinux/tasks/build/9p.yml b/playbooks/roles/bootlinux/tasks/build/9p.yml index f390f028..01c95cb7 100644 --- a/playbooks/roles/bootlinux/tasks/build/9p.yml +++ b/playbooks/roles/bootlinux/tasks/build/9p.yml @@ -1,4 +1,22 @@ --- +- name: Gather facts from localhost for dependency installation + ansible.builtin.setup: + filter: "ansible_os_family,ansible_distribution" + delegate_to: localhost + register: localhost_facts + run_once: true + +- name: Set localhost OS facts for 9P build + ansible.builtin.set_fact: + localhost_os_family: "{{ localhost_facts.ansible_facts.ansible_os_family }}" + localhost_distribution: "{{ localhost_facts.ansible_facts.ansible_distribution }}" + delegate_to: localhost + run_once: true + +- name: Refresh target host facts after localhost gathering + ansible.builtin.setup: + filter: "ansible_os_family,ansible_distribution,ansible_distribution_version" + - name: Install dependencies to build the Linux kernel delegate_to: localhost run_once: true diff --git a/playbooks/roles/bootlinux/tasks/install-deps/main.yml b/playbooks/roles/bootlinux/tasks/install-deps/main.yml index 51a20741..9a9af005 100644 --- a/playbooks/roles/bootlinux/tasks/install-deps/main.yml +++ b/playbooks/roles/bootlinux/tasks/install-deps/main.yml @@ -2,14 +2,14 @@ - name: Debian-specific setup ansible.builtin.import_tasks: debian/main.yml when: - - ansible_os_family == "Debian" + - localhost_os_family == "Debian" - name: SuSE-specific setup ansible.builtin.import_tasks: suse/main.yml when: - - ansible_os_family == "Suse" + - localhost_os_family == "Suse" - name: Red Hat-specific setup ansible.builtin.import_tasks: redhat/main.yml when: - - ansible_os_family == "RedHat" + - localhost_os_family == "RedHat" diff --git a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml index 7f1955bf..589b0b18 100644 --- a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml +++ b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml @@ -3,7 +3,7 @@ ansible.builtin.include_role: name: epel-release when: - - ansible_distribution != "Fedora" + - localhost_distribution != "Fedora" - name: Install packages we care about become: true @@ -67,7 +67,7 @@ vars: packages: - btrfs-progs - when: ansible_distribution == 'Fedora' + when: localhost_distribution == 'Fedora' - name: Install clang become: true diff --git a/playbooks/roles/bootlinux/tasks/update-grub/main.yml b/playbooks/roles/bootlinux/tasks/update-grub/main.yml index d0455b00..b05996bf 100644 --- a/playbooks/roles/bootlinux/tasks/update-grub/main.yml +++ b/playbooks/roles/bootlinux/tasks/update-grub/main.yml @@ -1,9 +1,9 @@ --- # tasks to install update-grub - name: Distro specific update of your GRUB boot file - ansible.builtin.import_tasks: debian.yml + ansible.builtin.include_tasks: debian.yml when: ansible_facts['os_family']|lower == 'debian' -- ansible.builtin.import_tasks: suse.yml +- ansible.builtin.include_tasks: suse.yml when: ansible_facts['os_family']|lower == 'suse' -- ansible.builtin.import_tasks: redhat.yml +- ansible.builtin.include_tasks: redhat.yml when: ansible_facts['os_family']|lower == 'redhat' -- 2.51.0