diff --git a/.ansible-lint b/.ansible-lint index baa5de771..eeef9ca91 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -25,3 +25,5 @@ exclude_paths: - examples/roles/ mock_roles: - linux-system-roles.network +mock_modules: + - ansible.utils.update_fact diff --git a/.ostree/README.md b/.ostree/README.md new file mode 100644 index 000000000..f5e6931b3 --- /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 000000000..d0a03a3d7 --- /dev/null +++ b/.ostree/get_ostree_data.sh @@ -0,0 +1,113 @@ +#!/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 no_log: true +- 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: Check which services are running service_facts: no_log: true diff --git a/tests/ensure_provider_tests.py b/tests/ensure_provider_tests.py index c798cd105..a75709cca 100755 --- a/tests/ensure_provider_tests.py +++ b/tests/ensure_provider_tests.py @@ -21,17 +21,12 @@ package: name: NetworkManager state: present - - name: Get NetworkManager package info - yum: - list: NetworkManager - register: networkmanager_info + - name: Get package info + package_facts: - name: Get NetworkManager version set_fact: - networkmanager_version: "{{ networkmanager_info.results | - selectattr('yumstate', 'match', '^installed$') | - map(attribute='version') | list | first }}" - when: true - changed_when: false + networkmanager_version: "{{ + ansible_facts.packages['NetworkManager'][0]['version'] }}" """ MINIMUM_NM_VERSION_CHECK = """ diff --git a/tests/playbooks/tests_802_1x.yml b/tests/playbooks/tests_802_1x.yml index 8c55b891b..85e3592b4 100644 --- a/tests/playbooks/tests_802_1x.yml +++ b/tests/playbooks/tests_802_1x.yml @@ -38,6 +38,10 @@ - none client_cert: /etc/pki/tls/client.pem ca_cert: /etc/pki/tls/cacert.pem + - name: Ensure ping command is present + package: + name: iputils + state: present - name: "TEST: I can ping the EAP server" command: ping -c1 203.0.113.1 changed_when: false diff --git a/tests/playbooks/tests_ipv6.yml b/tests/playbooks/tests_ipv6.yml index d1744695d..5a7a0885b 100644 --- a/tests/playbooks/tests_ipv6.yml +++ b/tests/playbooks/tests_ipv6.yml @@ -79,6 +79,10 @@ - >- "default via 2001:db8::1 dev {{ interface }}" in ipv6_route.stdout + - name: Ensure ping6 command is present + package: + name: iputils + state: present - name: Test gateway can be pinged command: ping6 -c1 2001:db8::1 when: diff --git a/tests/playbooks/tests_team_plugin_installation.yml b/tests/playbooks/tests_team_plugin_installation.yml index 29598edbd..a01541c78 100644 --- a/tests/playbooks/tests_team_plugin_installation.yml +++ b/tests/playbooks/tests_team_plugin_installation.yml @@ -3,6 +3,10 @@ - name: Play for testing team plugin installation hosts: all tasks: + - name: Check if rpm ostree system - cannot test + meta: end_host + when: ansible_facts.pkg_mgr == "ansible.posix.rhel_rpm_ostree" + - name: Remove the NetworkManager-team package package: name: "NetworkManager-team" diff --git a/tests/playbooks/tests_wireless_plugin_installation.yml b/tests/playbooks/tests_wireless_plugin_installation.yml index 500c619f1..d3530605c 100644 --- a/tests/playbooks/tests_wireless_plugin_installation.yml +++ b/tests/playbooks/tests_wireless_plugin_installation.yml @@ -3,6 +3,10 @@ - name: Play for testing wireless plugin installation hosts: all tasks: + - name: Check if rpm ostree system - cannot test + meta: end_host + when: ansible_facts.pkg_mgr == "ansible.posix.rhel_rpm_ostree" + - name: Remove the NetworkManager-wifi package package: name: "NetworkManager-wifi" diff --git a/tests/tasks/el_repo_setup.yml b/tests/tasks/el_repo_setup.yml index bf665526c..9af3cd9a9 100644 --- a/tests/tasks/el_repo_setup.yml +++ b/tests/tasks/el_repo_setup.yml @@ -13,6 +13,24 @@ - distribution_version - os_family +- 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: Fix CentOS6 Base repo copy: dest: /etc/yum.repos.d/CentOS-Base.repo @@ -40,3 +58,4 @@ - ansible_distribution_major_version == '6' - name: Include the task 'enable_epel.yml' include_tasks: enable_epel.yml + when: ansible_facts["pkg_mgr"] != "ansible.posix.rhel_rpm_ostree" diff --git a/tests/tasks/setup_mock_wifi_wpa3_owe.yml b/tests/tasks/setup_mock_wifi_wpa3_owe.yml index 1666658ee..719d290d6 100644 --- a/tests/tasks/setup_mock_wifi_wpa3_owe.yml +++ b/tests/tasks/setup_mock_wifi_wpa3_owe.yml @@ -7,25 +7,33 @@ - wpa_supplicant state: present -# yamllint disable rule:line-length -# Even though hostapd can be installed via EPEL 8, Opportunistic Wireless Encryption -# (OWE) has not been enabled by default. To warrant the test support on RHEL(dist-tag), -# we setup hostapd copr repo to enable OWE option. -- name: Install hostapd and mac80211_hwsim kernel module in CentOS 8 - shell: | - dnf -y copr enable liangwen12year/hostapd-owe - dnf -y install hostapd - release=$(uname -r) - tmp="${release/-//}" - tmp="${tmp/.x//x}" - dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-core-$release.rpm - dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-modules-$release.rpm - dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-modules-internal-$release.rpm +- name: Check if can test on CentOS 8 and setup if possible when: - ansible_distribution_major_version == '8' - ansible_distribution == 'CentOS' - changed_when: false -# yamllint enable rule:line-length + block: + # It is currently too difficult to install the required kernel + # if using rpm ostree - so just skip this test + - name: Check if rpm ostree system - cannot test + meta: end_host + when: ansible_facts.pkg_mgr == "ansible.posix.rhel_rpm_ostree" + + # yamllint disable rule:line-length + # Even though hostapd can be installed via EPEL 8, Opportunistic Wireless Encryption + # (OWE) has not been enabled by default. To warrant the test support on RHEL(dist-tag), + # we setup hostapd copr repo to enable OWE option. + - name: Install hostapd and mac80211_hwsim kernel module in CentOS 8 + shell: | + dnf -y copr enable liangwen12year/hostapd-owe + dnf -y install hostapd + release=$(uname -r) + tmp="${release/-//}" + tmp="${tmp/.x//x}" + dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-core-$release.rpm + dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-modules-$release.rpm + dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-modules-internal-$release.rpm + changed_when: false + # yamllint enable rule:line-length - name: Install hostapd in Fedora shell: | diff --git a/tests/tasks/setup_mock_wifi_wpa3_sae.yml b/tests/tasks/setup_mock_wifi_wpa3_sae.yml index 470a53ad4..4f6a44ec7 100644 --- a/tests/tasks/setup_mock_wifi_wpa3_sae.yml +++ b/tests/tasks/setup_mock_wifi_wpa3_sae.yml @@ -7,25 +7,33 @@ - wpa_supplicant state: present -# yamllint disable rule:line-length -# Even though hostapd can be installed via EPEL 8, Simultaneous Authentication -# of Equals (SAE) has not been enabled by default. To warrant the test support -# on CentOS 8, we setup hostapd copr repo to enable SAE option. -- name: Install hostapd and mac80211_hwsim kernel module in CentOS 8 - shell: | - dnf -y copr enable liangwen12year/hostapd-owe - dnf -y install hostapd - release=$(uname -r) - tmp="${release/-//}" - tmp="${tmp/.x//x}" - dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-core-$release.rpm - dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-modules-$release.rpm - dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-modules-internal-$release.rpm +- name: Configure CentOS 8 system for testing, if possible when: - ansible_distribution_major_version == '8' - ansible_distribution == 'CentOS' - changed_when: false -# yamllint enable rule:line-length + block: + # It is currently too difficult to install the required kernel + # if using rpm ostree - so just skip this test + - name: Check if rpm ostree system - cannot test + meta: end_host + when: ansible_facts.pkg_mgr == "ansible.posix.rhel_rpm_ostree" + + # yamllint disable rule:line-length + # Even though hostapd can be installed via EPEL 8, Simultaneous Authentication + # of Equals (SAE) has not been enabled by default. To warrant the test support + # on CentOS 8, we setup hostapd copr repo to enable SAE option. + - name: Install hostapd and mac80211_hwsim kernel module in CentOS 8 + shell: | + dnf -y copr enable liangwen12year/hostapd-owe + dnf -y install hostapd + release=$(uname -r) + tmp="${release/-//}" + tmp="${tmp/.x//x}" + dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-core-$release.rpm + dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-modules-$release.rpm + dnf -y install https://koji.mbox.centos.org/pkgs/packages/kernel/$tmp/kernel-modules-internal-$release.rpm + changed_when: false + # yamllint enable rule:line-length - name: Install hostapd in Fedora package: diff --git a/tests/tasks/test_802.1x_capath.yml b/tests/tasks/test_802.1x_capath.yml index 8ed2a81ce..4de4a92cb 100644 --- a/tests/tasks/test_802.1x_capath.yml +++ b/tests/tasks/test_802.1x_capath.yml @@ -73,6 +73,10 @@ private_key_password_flags: - not-required ca_path: /etc/pki/tls/my_ca_certs + - name: Ensure ping command is present + package: + name: iputils + state: present - name: "TEST: I can ping the EAP server" command: ping -c1 203.0.113.1 changed_when: false diff --git a/tests/tests_change_indication_on_repeat_run.yml b/tests/tests_change_indication_on_repeat_run.yml index c04764826..8b29f2749 100644 --- a/tests/tests_change_indication_on_repeat_run.yml +++ b/tests/tests_change_indication_on_repeat_run.yml @@ -7,6 +7,23 @@ type: veth name: Test change indication on repeat run tasks: + - 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: Include the task 'manage_test_interface.yml' include_tasks: tasks/manage_test_interface.yml vars: diff --git a/tests/tests_eth_pci_address_match_nm.yml b/tests/tests_eth_pci_address_match_nm.yml index 2396f2691..73eef136e 100644 --- a/tests/tests_eth_pci_address_match_nm.yml +++ b/tests/tests_eth_pci_address_match_nm.yml @@ -24,17 +24,12 @@ package: name: NetworkManager state: present - - name: Get NetworkManager package info - yum: - list: NetworkManager - register: networkmanager_info + - name: Get package info + package_facts: - name: Get NetworkManager version set_fact: - networkmanager_version: "{{ networkmanager_info.results | - selectattr('yumstate', 'match', '^installed$') | - map(attribute='version') | list | first }}" - when: true - changed_when: false + networkmanager_version: "{{ + ansible_facts.packages['NetworkManager'][0]['version'] }}" # The test requires or should run with NetworkManager, therefore it cannot run diff --git a/tests/tests_ethtool_coalesce_nm.yml b/tests/tests_ethtool_coalesce_nm.yml index 26e7beb18..1c0146dab 100644 --- a/tests/tests_ethtool_coalesce_nm.yml +++ b/tests/tests_ethtool_coalesce_nm.yml @@ -24,17 +24,12 @@ package: name: NetworkManager state: present - - name: Get NetworkManager package info - yum: - list: NetworkManager - register: networkmanager_info + - name: Get package info + package_facts: - name: Get NetworkManager version set_fact: - networkmanager_version: "{{ networkmanager_info.results | - selectattr('yumstate', 'match', '^installed$') | - map(attribute='version') | list | first }}" - when: true - changed_when: false + networkmanager_version: "{{ + ansible_facts.packages['NetworkManager'][0]['version'] }}" # The test requires or should run with NetworkManager, therefore it cannot run diff --git a/tests/tests_ethtool_features_nm.yml b/tests/tests_ethtool_features_nm.yml index 49a8585b1..84fae7135 100644 --- a/tests/tests_ethtool_features_nm.yml +++ b/tests/tests_ethtool_features_nm.yml @@ -24,17 +24,12 @@ package: name: NetworkManager state: present - - name: Get NetworkManager package info - yum: - list: NetworkManager - register: networkmanager_info + - name: Get package info + package_facts: - name: Get NetworkManager version set_fact: - networkmanager_version: "{{ networkmanager_info.results | - selectattr('yumstate', 'match', '^installed$') | - map(attribute='version') | list | first }}" - when: true - changed_when: false + networkmanager_version: "{{ + ansible_facts.packages['NetworkManager'][0]['version'] }}" # The test requires or should run with NetworkManager, therefore it cannot run diff --git a/tests/tests_ethtool_ring_nm.yml b/tests/tests_ethtool_ring_nm.yml index bbc70fd8a..bfe1c3507 100644 --- a/tests/tests_ethtool_ring_nm.yml +++ b/tests/tests_ethtool_ring_nm.yml @@ -24,17 +24,12 @@ package: name: NetworkManager state: present - - name: Get NetworkManager package info - yum: - list: NetworkManager - register: networkmanager_info + - name: Get package info + package_facts: - name: Get NetworkManager version set_fact: - networkmanager_version: "{{ networkmanager_info.results | - selectattr('yumstate', 'match', '^installed$') | - map(attribute='version') | list | first }}" - when: true - changed_when: false + networkmanager_version: "{{ + ansible_facts.packages['NetworkManager'][0]['version'] }}" # The test requires or should run with NetworkManager, therefore it cannot run diff --git a/tests/tests_provider_nm.yml b/tests/tests_provider_nm.yml index 230b75c4b..53960f697 100644 --- a/tests/tests_provider_nm.yml +++ b/tests/tests_provider_nm.yml @@ -24,17 +24,12 @@ package: name: NetworkManager state: present - - name: Get NetworkManager package info - yum: - list: NetworkManager - register: networkmanager_info + - name: Get package info + package_facts: - name: Get NetworkManager version set_fact: - networkmanager_version: "{{ networkmanager_info.results | - selectattr('yumstate', 'match', '^installed$') | - map(attribute='version') | list | first }}" - when: true - changed_when: false + networkmanager_version: "{{ + ansible_facts.packages['NetworkManager'][0]['version'] }}" # The test requires or should run with NetworkManager, therefore it cannot run diff --git a/tests/tests_regression_nm.yml b/tests/tests_regression_nm.yml index e2bbce7ea..08162f2d9 100644 --- a/tests/tests_regression_nm.yml +++ b/tests/tests_regression_nm.yml @@ -15,15 +15,12 @@ package: name: NetworkManager state: present - - name: Get NetworkManager package info - yum: - list: NetworkManager - register: networkmanager_info + - name: Get package info + package_facts: - name: Get NetworkManager version set_fact: - networkmanager_version: "{{ networkmanager_info.results | - selectattr('yumstate', 'match', '^installed$') | - map(attribute='version') | list | first }}" + networkmanager_version: "{{ + ansible_facts.packages['NetworkManager'][0]['version'] }}" # workaround for: https://github.com/ansible/ansible/issues/27973 # There is no way in Ansible to abort a playbook hosts with specific OS