From 23bc882ee06ab7acca4984a7d162ac5fb1a87532 Mon Sep 17 00:00:00 2001 From: Rich Megginson Date: Mon, 6 Nov 2023 12:26:21 -0700 Subject: [PATCH] feat: support for ostree systems Feature: Allow running and testing the role with ostree managed nodes. Reason: We have users who want to use the role to manage ostree systems. Result: Users can use the role to manage ostree managed nodes. Signed-off-by: Rich Megginson --- .ansible-lint | 2 + .ostree/README.md | 3 + .ostree/get_ostree_data.sh | 123 ++++++++++++++++++++++++++ .ostree/packages-runtime-CentOS-7.txt | 7 ++ .ostree/packages-runtime-CentOS-8.txt | 1 + .ostree/packages-runtime-Fedora.txt | 1 + .ostree/packages-runtime-RedHat-7.txt | 8 ++ .ostree/packages-runtime-RedHat-8.txt | 1 + .ostree/packages-runtime-RedHat-9.txt | 1 + .ostree/packages-runtime.txt | 7 ++ .ostree/packages-testing-CentOS-7.txt | 2 + .ostree/packages-testing-CentOS-8.txt | 3 + .ostree/packages-testing-Fedora.txt | 3 + .ostree/packages-testing-RedHat-7.txt | 2 + .ostree/packages-testing-RedHat-8.txt | 3 + .ostree/packages-testing-RedHat-9.txt | 3 + .ostree/packages-testing.txt | 0 .ostree/roles-runtime.txt | 3 + .ostree/roles-testing.txt | 1 + .sanity-ansible-ignore-2.12.txt | 1 + .sanity-ansible-ignore-2.13.txt | 1 + .sanity-ansible-ignore-2.14.txt | 1 + .sanity-ansible-ignore-2.15.txt | 1 + .sanity-ansible-ignore-2.9.txt | 1 + README-ostree.md | 66 ++++++++++++++ README.md | 8 +- meta/collection-requirements.yml | 2 + tasks/main.yml | 2 + tasks/set_vars.yml | 18 ++++ tests/tasks/cleanup.yml | 1 + tests/tasks/install_selinux_tools.yml | 36 ++++++-- tests/tests_config.yml | 4 +- 32 files changed, 306 insertions(+), 10 deletions(-) create mode 100644 .ostree/README.md create mode 100755 .ostree/get_ostree_data.sh create mode 100644 .ostree/packages-runtime-CentOS-7.txt create mode 100644 .ostree/packages-runtime-CentOS-8.txt create mode 100644 .ostree/packages-runtime-Fedora.txt create mode 100644 .ostree/packages-runtime-RedHat-7.txt create mode 100644 .ostree/packages-runtime-RedHat-8.txt create mode 100644 .ostree/packages-runtime-RedHat-9.txt create mode 100644 .ostree/packages-runtime.txt create mode 100644 .ostree/packages-testing-CentOS-7.txt create mode 100644 .ostree/packages-testing-CentOS-8.txt create mode 100644 .ostree/packages-testing-Fedora.txt create mode 100644 .ostree/packages-testing-RedHat-7.txt create mode 100644 .ostree/packages-testing-RedHat-8.txt create mode 100644 .ostree/packages-testing-RedHat-9.txt create mode 100644 .ostree/packages-testing.txt create mode 100644 .ostree/roles-runtime.txt create mode 100644 .ostree/roles-testing.txt create mode 100644 .sanity-ansible-ignore-2.12.txt create mode 100644 .sanity-ansible-ignore-2.13.txt create mode 100644 .sanity-ansible-ignore-2.14.txt create mode 100644 .sanity-ansible-ignore-2.15.txt create mode 100644 .sanity-ansible-ignore-2.9.txt create mode 100644 README-ostree.md diff --git a/.ansible-lint b/.ansible-lint index fcec4a6..92f62e3 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -22,3 +22,5 @@ exclude_paths: - examples/roles/ mock_roles: - linux-system-roles.cockpit +mock_modules: + - ansible.utils.update_fact diff --git a/.ostree/README.md b/.ostree/README.md new file mode 100644 index 0000000..f5e6931 --- /dev/null +++ b/.ostree/README.md @@ -0,0 +1,3 @@ +*NOTE*: The `*.txt` files are used by `get_ostree_data.sh` to create the lists +of packages, and to find other system roles used by this role. DO NOT use them +directly. diff --git a/.ostree/get_ostree_data.sh b/.ostree/get_ostree_data.sh new file mode 100755 index 0000000..7c32524 --- /dev/null +++ b/.ostree/get_ostree_data.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +set -euo pipefail + +role_collection_dir="${ROLE_COLLECTION_DIR:-fedora/linux_system_roles}" +ostree_dir="${OSTREE_DIR:-"$(dirname "$(realpath "$0")")"}" + +if [ -z "${4:-}" ] || [ "${1:-}" = help ] || [ "${1:-}" = -h ]; then + cat < 0 +- name: Ensure correct package manager for ostree systems + vars: + ostree_pkg_mgr: ansible.posix.rhel_rpm_ostree + ostree_booted_file: /run/ostree-booted + when: ansible_facts.pkg_mgr | d("") != ostree_pkg_mgr + block: + - name: Check if system is ostree + stat: + path: "{{ ostree_booted_file }}" + register: __ostree_booted_stat + + - name: Set package manager to use for ostree + ansible.utils.update_fact: + updates: + - path: ansible_facts.pkg_mgr + value: "{{ ostree_pkg_mgr }}" + when: __ostree_booted_stat.stat.exists + - name: Set version specific variables include_vars: "{{ item }}" with_first_found: diff --git a/tests/tasks/cleanup.yml b/tests/tasks/cleanup.yml index 887af4b..10adbf6 100644 --- a/tests/tasks/cleanup.yml +++ b/tests/tasks/cleanup.yml @@ -7,6 +7,7 @@ - cockpit-ws - cockpit-doc state: absent + when: ansible_facts.pkg_mgr | d() != "ansible.posix.rhel_rpm_ostree" tags: - always - tests::cleanup diff --git a/tests/tasks/install_selinux_tools.yml b/tests/tasks/install_selinux_tools.yml index cbd4da5..ad1f7f2 100644 --- a/tests/tasks/install_selinux_tools.yml +++ b/tests/tasks/install_selinux_tools.yml @@ -1,22 +1,42 @@ # SPDX-License-Identifier: MIT --- +- name: Ensure correct package manager for ostree systems + vars: + ostree_pkg_mgr: ansible.posix.rhel_rpm_ostree + ostree_booted_file: /run/ostree-booted + when: ansible_facts.pkg_mgr | d("") != ostree_pkg_mgr + block: + - name: Check if system is ostree + stat: + path: "{{ ostree_booted_file }}" + register: __ostree_booted_stat + + - name: Set package manager to use for ostree + ansible.utils.update_fact: + updates: + - path: ansible_facts.pkg_mgr + value: "{{ ostree_pkg_mgr }}" + when: __ostree_booted_stat.stat.exists + - name: Install SELinux python2 tools package: name: - libselinux-python - policycoreutils-python state: present - when: ( ansible_python_version is version('3', '<') and - ansible_distribution in ["Fedora", "CentOS", "RedHat", "Rocky"] ) + when: + - ansible_python_version is version('3', '<') + - ansible_distribution in ["Fedora", "CentOS", "RedHat", "Rocky"] - name: Install SELinux python3 tools package: name: - - libselinux-python3 - - policycoreutils-python3 + - python3-libselinux + - python3-policycoreutils state: present - when: ( ansible_python_version is version('3', '>=') and - ansible_distribution in ["Fedora", "CentOS", "RedHat", "Rocky"] ) + when: + - ansible_python_version is version('3', '>=') + - ansible_distribution in ["Fedora", "CentOS", "RedHat", "Rocky"] - name: Install SELinux tool semanage package: @@ -24,5 +44,5 @@ - policycoreutils-python-utils state: present when: ansible_distribution == "Fedora" or - ( ansible_distribution_major_version | int > 7 and - ansible_distribution in ["CentOS", "RedHat", "Rocky"] ) + (ansible_distribution_major_version | int > 7 and + ansible_distribution in ["CentOS", "RedHat", "Rocky"]) diff --git a/tests/tests_config.yml b/tests/tests_config.yml index beb33d3..b4c291d 100644 --- a/tests/tests_config.yml +++ b/tests/tests_config.yml @@ -45,7 +45,9 @@ - name: Test - cockpit metapackage is not installed fail: msg: cockpit is unexpectedly installed - when: "'cockpit' in ansible_facts.packages" + when: + - "'cockpit' in ansible_facts.packages" + - ansible_facts.pkg_mgr | d() != "ansible.posix.rhel_rpm_ostree" - name: Test - write expected configuration file copy: