From 1ef65a0e56ea87e91dbb07b88dc43693232b4a30 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Mon, 6 Jan 2025 19:07:16 +0100 Subject: [PATCH] Replace functional tests with molecule As effort to sunset tests repo, we replace functional test that were running for the role with a molecule. Due to docker limitations, I had to comment out swap tests, as while it's possible to create a container with swap, I didn't find a way to `swapon` from inside of the container. Depends-On: https://review.opendev.org/c/openstack/openstack-ansible/+/938571 Change-Id: I907dc6ca18ec4a0b966c412dde8eeec3299b1dcc --- Vagrantfile | 46 ------------ manual-test.rc | 24 ------ molecule/default/molecule.yml | 48 ++++++++++++ requirements.yml | 3 + run_tests.sh | 88 ---------------------- tests/ansible-role-requirements.yaml | 1 - tests/group_vars/all_containers.yml | 26 ------- tests/host_vars/localhost.yml | 26 ------- tests/inventory | 2 - tests/prepare.yml | 51 +++++++++++++ tests/side_effect.yml | 35 +++++++++ tests/systemd_init-overrides.yml | 26 ------- tests/test.yml | 105 ++------------------------- tests/verify.yml | 65 +++++++++++++++++ tests/verify_side_effect.yml | 31 ++++++++ tox.ini | 54 ++++---------- zuul.d/project.yaml | 2 +- 17 files changed, 254 insertions(+), 379 deletions(-) delete mode 100644 Vagrantfile delete mode 100644 manual-test.rc create mode 100644 molecule/default/molecule.yml delete mode 100755 run_tests.sh delete mode 120000 tests/ansible-role-requirements.yaml delete mode 100644 tests/group_vars/all_containers.yml delete mode 100644 tests/host_vars/localhost.yml delete mode 100644 tests/inventory create mode 100644 tests/prepare.yml create mode 100644 tests/side_effect.yml delete mode 100644 tests/systemd_init-overrides.yml create mode 100644 tests/verify.yml create mode 100644 tests/verify_side_effect.yml diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 2a83de4..0000000 --- a/Vagrantfile +++ /dev/null @@ -1,46 +0,0 @@ -# Note: -# This file is maintained in the openstack-ansible-tests repository. -# https://opendev.org/openstack/openstack-ansible-tests/src/Vagrantfile -# -# If you need to perform any change on it, you should modify the central file, -# then, an OpenStack CI job will propagate your changes to every OSA repository -# since every repo uses the same Vagrantfile - -# Verify whether required plugins are installed. -required_plugins = [ "vagrant-disksize" ] -required_plugins.each do |plugin| - if not Vagrant.has_plugin?(plugin) - raise "The vagrant plugin #{plugin} is required. Please run `vagrant plugin install #{plugin}`" - end -end - -Vagrant.configure(2) do |config| - config.vm.provider "virtualbox" do |v| - v.memory = 6144 - v.cpus = 2 - # https://github.com/hashicorp/vagrant/issues/9524 - v.customize ["modifyvm", :id, "--audio", "none"] - end - - config.vm.synced_folder ".", "/vagrant", type: "rsync" - - config.vm.provision "shell", - privileged: false, - inline: <<-SHELL - cd /vagrant - ./run_tests.sh - SHELL - - config.vm.define "centos8" do |centos8| - centos8.vm.box = "centos/8" - end - - config.vm.define "debian10" do |debian10| - debian10.vm.box = "debian/buster64" - end - - config.vm.define "ubuntu2004" do |focal| - focal.disksize.size = "40GB" - focal.vm.box = "ubuntu/focal64" - end -end diff --git a/manual-test.rc b/manual-test.rc deleted file mode 100644 index 287a947..0000000 --- a/manual-test.rc +++ /dev/null @@ -1,24 +0,0 @@ -export VIRTUAL_ENV=$(pwd) -export ANSIBLE_HOST_KEY_CHECKING=False -export ANSIBLE_SSH_CONTROL_PATH=/tmp/%%h-%%r - - -# This is required as the default is '/etc/ansible/roles' or a path -# specified in ansible.cfg -export ANSIBLE_ROLES_PATH=${HOME}/.ansible/roles:$(pwd)/.. -export ANSIBLE_COLLECTIONS_PATHS="${HOME}/.ansible:$(pwd)/.." -export ANSIBLE_COLLECTIONS_PATH="${HOME}/.ansible:$(pwd)/.." - -export ANSIBLE_SSH_ARGS="-o ControlMaster=no \ - -o UserKnownHostsFile=/dev/null \ - -o StrictHostKeyChecking=no \ - -o ServerAliveInterval=64 \ - -o ServerAliveCountMax=1024 \ - -o Compression=no \ - -o TCPKeepAlive=yes \ - -o VerifyHostKeyDNS=no \ - -o ForwardX11=no \ - -o ForwardAgent=yes" - -echo "Run manual functional tests by executing the following:" -echo "# ./.tox/functional/bin/ansible-playbook -i tests/inventory tests/test.yml" diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..9072162 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,48 @@ +--- +dependency: + name: galaxy + options: + requirements-file: requirements.yml + force: true + +driver: + name: docker + +platforms: + - name: "systemd-service-${MOLECULE_SCENARIO_NAME}" + image: "${DOCKER_REGISTRY:-quay.io/gotmax23}/${DOCKER_IMAGE_TAG:-debian-systemd:bookworm}" + command: ${DOCKER_COMMAND:-""} + pre_build_image: true + privileged: true + systemd: true + groups: + - network_hosts + +provisioner: + name: ansible + lint: + name: ansible-lint + playbooks: + prepare: ../../tests/prepare.yml + converge: ../../tests/test.yml + side_effect: ../../tests/side_effect.yml + config_options: + defaults: + inject_facts_as_vars: false + +scenario: + name: default + test_sequence: + - dependency + - cleanup + - destroy + - syntax + - create + - prepare + - converge + - idempotence + - verify ../../tests/verify.yml + - side_effect + - verify ../../tests/verify_side_effect.yml + - cleanup + - destroy diff --git a/requirements.yml b/requirements.yml index 5b9c52d..b353649 100644 --- a/requirements.yml +++ b/requirements.yml @@ -3,3 +3,6 @@ collections: - name: https://opendev.org/openstack/ansible-config_template version: master type: git +- name: https://github.com/ansible-collections/ansible.utils + version: main + type: git diff --git a/run_tests.sh b/run_tests.sh deleted file mode 100755 index 35280c8..0000000 --- a/run_tests.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2015, Rackspace US, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# PURPOSE: -# This script clones the openstack-ansible-tests repository to the -# tests/common folder in order to be able to re-use test components -# for role testing. This is intended to be the thinnest possible -# shim for test execution outside of OpenStack CI. - -# WARNING: -# This file is maintained in the openstack-ansible-tests repository. -# https://opendev.org/openstack/openstack-ansible-tests/src/run_tests.sh -# If you need to modify this file, update the one in the openstack-ansible-tests -# repository and then update this file as well. The purpose of this file is to -# prepare the host and then execute all the tox tests. -# - -## Shell Opts ---------------------------------------------------------------- -set -xeu - -## Vars ---------------------------------------------------------------------- - -WORKING_DIR="$(readlink -f $(dirname $0))" -OSA_PROJECT_NAME="$(sed -n 's|^project=openstack/\(.*\).git$|\1|p' $(pwd)/.gitreview)" - -COMMON_TESTS_PATH="${WORKING_DIR}/tests/common" -TESTING_HOME=${TESTING_HOME:-$HOME} -ZUUL_TESTS_CLONE_LOCATION="/home/zuul/src/opendev.org/openstack/openstack-ansible-tests" - -# Use .gitreview as the key to determine the appropriate -# branch to clone for tests. -TESTING_BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' "${WORKING_DIR}/.gitreview") -if [[ "${TESTING_BRANCH}" == "" ]]; then - TESTING_BRANCH="master" -fi - -## Main ---------------------------------------------------------------------- - -# Source distribution information -source /etc/os-release || source /usr/lib/os-release - -# Figure out the appropriate package install command -case ${ID,,} in - centos|rhel|fedora|rocky) pkg_mgr_cmd="dnf install -y" ;; - ubuntu|debian) pkg_mgr_cmd="apt-get install -y" ;; - *) echo "unsupported distribution: ${ID,,}"; exit 1 ;; -esac - -# Install git so that we can clone the tests repo if git is not available -which git &>/dev/null || eval sudo "${pkg_mgr_cmd}" git - -# Clone the tests repo for access to the common test script -if [[ ! -d "${COMMON_TESTS_PATH}" ]]; then - # The tests repo doesn't need a clone, we can just - # symlink it. - if [[ "${OSA_PROJECT_NAME}" == "openstack-ansible-tests" ]]; then - ln -s "${WORKING_DIR}" "${COMMON_TESTS_PATH}" - - # In zuul v3 any dependent repository is placed into - # /home/zuul/src/opendev.org, so we check to see - # if there is a tests checkout there already. If so, we - # symlink that and use it. - elif [[ -d "${ZUUL_TESTS_CLONE_LOCATION}" ]]; then - ln -s "${ZUUL_TESTS_CLONE_LOCATION}" "${COMMON_TESTS_PATH}" - - # Otherwise we're clearly not in zuul or using a previously setup - # repo in some way, so just clone it from upstream. - else - git clone -b "${TESTING_BRANCH}" \ - https://opendev.org/openstack/openstack-ansible-tests \ - "${COMMON_TESTS_PATH}" - fi -fi - -# Execute the common test script -source tests/common/run_tests_common.sh diff --git a/tests/ansible-role-requirements.yaml b/tests/ansible-role-requirements.yaml deleted file mode 120000 index e2ff04e..0000000 --- a/tests/ansible-role-requirements.yaml +++ /dev/null @@ -1 +0,0 @@ -../ansible-role-requirements.yaml \ No newline at end of file diff --git a/tests/group_vars/all_containers.yml b/tests/group_vars/all_containers.yml deleted file mode 100644 index 99b8fa2..0000000 --- a/tests/group_vars/all_containers.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -# Copyright 2018, Rackspace US, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -container_networks: - management_address: - address: "{{ ansible_host }}" - bridge: "br-mgmt" - interface: "eth1" - netmask: "255.255.255.0" - type: "veth" - -physical_host: localhost -properties: - service_name: "{{ inventory_hostname }}" diff --git a/tests/host_vars/localhost.yml b/tests/host_vars/localhost.yml deleted file mode 100644 index cc396ba..0000000 --- a/tests/host_vars/localhost.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -# Copyright 2018, Rackspace US, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -neutron_provider_networks: - network_types: "vxlan,flat" - network_mappings: "flat:eth12" - network_vxlan_ranges: "1:1000" - -neutron_local_ip: 10.1.2.1 - - -bridges: - - name: "br-mgmt" - ip_addr: "10.1.1.1" diff --git a/tests/inventory b/tests/inventory deleted file mode 100644 index 68b2dac..0000000 --- a/tests/inventory +++ /dev/null @@ -1,2 +0,0 @@ -[all] -localhost diff --git a/tests/prepare.yml b/tests/prepare.yml new file mode 100644 index 0000000..3006ec1 --- /dev/null +++ b/tests/prepare.yml @@ -0,0 +1,51 @@ +--- +# Copyright 2025, Cleura AB. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Prepare + hosts: network_hosts + vars: + iproute_package_name: + redhat: iproute + debian: iproute2 + # NOTE: Packages below are potentially needed outside of molecule as well + procps_package_name: + redhat: procps-ng + debian: procps + selinux_package_name: + redhat: policycoreutils + debian: '' + udev_package_name: + redhat: systemd-udev + debian: udev + install_packages: + - "{{ iproute_package_name[ansible_facts['os_family'] | lower] }}" + - "{{ procps_package_name[ansible_facts['os_family'] | lower] }}" + - "{{ selinux_package_name[ansible_facts['os_family'] | lower] }}" + - "{{ udev_package_name[ansible_facts['os_family'] | lower] }}" + - dbus + tasks: + - name: Install required packages + ansible.builtin.package: + name: "{{ install_packages | select() }}" + update_cache: "{{ (ansible_facts['os_family'] | lower == 'debian') | ternary(true, omit) }}" + + - name: Ensure required services are running + ansible.builtin.systemd: + name: "{{ item }}" + state: started + enabled: true + masked: false + with_items: + - dbus + - systemd-udevd diff --git a/tests/side_effect.yml b/tests/side_effect.yml new file mode 100644 index 0000000..1441711 --- /dev/null +++ b/tests/side_effect.yml @@ -0,0 +1,35 @@ +--- +# Copyright 2025, Cleura AB. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Adjusting the previous setup + hosts: network_hosts + gather_facts: true + roles: + - role: "{{ playbook_dir | dirname | basename }}" + vars: + systemd_interface_cleanup: true + systemd_run_networkd: yes + systemd_netdevs: + - NetDev: + Name: dummy2 + Kind: dummy + - NetDev: + Name: br-test + Kind: bridge + systemd_networks: + - interface: "dummyX" + bridge: "br-test" + - interface: "br-test" + address: "10.1.0.1" + netmask: "255.255.255.0" diff --git a/tests/systemd_init-overrides.yml b/tests/systemd_init-overrides.yml deleted file mode 100644 index 581afdf..0000000 --- a/tests/systemd_init-overrides.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -# Copyright 2018, Rackspace US, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -tempest_run: yes -tempest_venv_tag: "{{ tempest_git_install_branch }}" -tempest_venv_bin: "/opt/tempest_{{ tempest_venv_tag }}/bin" -tempest_log_dir: "/var/log/" -tempest_test_whitelist: - - tempest.scenario.test_server_basic_ops.TestServerBasicOps.test_server_basic_ops - -neutron_provider_networks: - network_types: "vxlan,flat" - network_mappings: "flat:eth12" - network_vxlan_ranges: "1:1000" diff --git a/tests/test.yml b/tests/test.yml index 8320484..7ccb9c9 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -15,12 +15,10 @@ # limitations under the License. - name: Playbook for role testing - hosts: localhost - connection: local - become: true + hosts: network_hosts gather_facts: true roles: - - role: "systemd_networkd" + - role: "{{ playbook_dir | dirname | basename }}" vars: systemd_networkd_link: MACAddressPolicy: "persistent" @@ -74,7 +72,7 @@ mtu: 9000 usedns: true static_routes: - - Gateway: "10.1.0.1" + - gateway: "10.1.0.1" cidr: "10.1.0.0/24" - Gateway: "10.1.0.100" Table: 100 @@ -86,7 +84,8 @@ Network: ConfigureWithoutCarrier: true link_config_overrides: - Alias: "dummy-bridge0" + Link: + Alias: "dummy-bridge0" - interface: "dummy2" bridge: "br-test" - interface: "br-test" @@ -96,97 +95,3 @@ address: 10.2.0.1 netmask: "255.255.255.0" ipforward: true - - -- name: Test networkd - hosts: localhost - connection: local - become: true - gather_facts: true - tasks: - - name: Interface check - assert: - that: - - ansible_facts['dummy0']['active'] - - ansible_facts['dummy0']['type'] == 'ether' - - ansible_facts['dummy0']['mtu'] == 9000 - - ansible_facts['dummy1']['active'] - - ansible_facts['dummy1']['type'] == 'ether' - - ansible_facts['dummy1']['mtu'] == 9000 - - ansible_facts['dummy2']['active'] - - ansible_facts['dummy2']['type'] == 'ether' - - name: Bond check - assert: - that: - - ansible_facts['bond0']['active'] - - ansible_facts['bond0']['type'] == 'bonding' - - ansible_facts['bond0']['mtu'] == 9000 - - name: Bridge check - assert: - that: - - ansible_facts['br_dummy']['active'] - - ansible_facts['br_dummy']['type'] == 'bridge' - - ansible_facts['br_dummy']['ipv4']['address'] == '10.0.0.100' - - ansible_facts['br_dummy']['ipv4']['netmask'] == '255.255.255.0' - - name: Bridge check - assert: - that: - - ansible_facts['br_test']['active'] - - ansible_facts['br_test']['type'] == 'bridge' - - ansible_facts['br_test']['ipv4']['address'] == '10.1.0.1' - - ansible_facts['br_test']['ipv4']['netmask'] == '255.255.255.0' - - name: Check link config overrides - shell: 'grep -wo "Alias" /etc/systemd/network/*br-dummy.link' - changed_when: false - - name: Check general link config - shell: 'grep -wo "{{ item }}" /etc/systemd/network/*.link' - changed_when: false - with_items: - - MACAddressPolicy - - NamePolicy - - name: Check forwarding is enabled - shell: 'grep -wo ^1$ /proc/sys/net/{{ item }}' - changed_when: false - with_items: - - "ipv4/ip_forward" - - "ipv4/conf/all/forwarding" - - "ipv4/conf/br-test2/forwarding" - - -- name: Playbook for role testing with cleanup - hosts: localhost - connection: local - become: true - gather_facts: true - roles: - - role: "systemd_networkd" - post_tasks: - - name: Interface check - assert: - that: - - ansible_facts['br_test'] is defined - - ansible_facts['dummy2']['active'] - - ansible_facts['dummy2']['type'] == 'ether' - - name: Bridge check - assert: - that: - - ansible_facts['br_test']['active'] - - ansible_facts['br_test']['type'] == 'bridge' - - ansible_facts['br_test']['ipv4']['address'] == '10.1.0.1' - - ansible_facts['br_test']['ipv4']['netmask'] == '255.255.255.0' - vars: - systemd_interface_cleanup: true - systemd_run_networkd: yes - systemd_netdevs: - - NetDev: - Name: dummy2 - Kind: dummy - - NetDev: - Name: br-test - Kind: bridge - systemd_networks: - - interface: "dummyX" - bridge: "br-test" - - interface: "br-test" - address: "10.1.0.1" - netmask: "255.255.255.0" diff --git a/tests/verify.yml b/tests/verify.yml new file mode 100644 index 0000000..aef3c5f --- /dev/null +++ b/tests/verify.yml @@ -0,0 +1,65 @@ +--- +# Copyright 2025, Cleura AB. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Test networkd initial installation + hosts: network_hosts + gather_facts: true + tasks: + - name: Interface check + assert: + that: + - ansible_facts['dummy0']['active'] + - ansible_facts['dummy0']['type'] == 'ether' + - ansible_facts['dummy0']['mtu'] == 9000 + - ansible_facts['dummy1']['active'] + - ansible_facts['dummy1']['type'] == 'ether' + - ansible_facts['dummy1']['mtu'] == 9000 + - ansible_facts['dummy2']['active'] + - ansible_facts['dummy2']['type'] == 'ether' + - name: Bond check + assert: + that: + - ansible_facts['bond0']['active'] + - ansible_facts['bond0']['type'] == 'bonding' + - ansible_facts['bond0']['mtu'] == 9000 + - name: Bridge check + assert: + that: + - ansible_facts['br_dummy']['active'] + - ansible_facts['br_dummy']['type'] == 'bridge' + - ansible_facts['br_dummy']['ipv4']['address'] == '10.0.0.100' + - ansible_facts['br_dummy']['ipv4']['netmask'] == '255.255.255.0' + - name: Bridge check + assert: + that: + - ansible_facts['br_test']['active'] + - ansible_facts['br_test']['type'] == 'bridge' + - ansible_facts['br_test']['ipv4']['address'] == '10.1.0.1' + - ansible_facts['br_test']['ipv4']['netmask'] == '255.255.255.0' + - name: Check link config overrides + shell: 'grep -wo "Alias" /etc/systemd/network/*br-dummy.link' + changed_when: false + - name: Check general link config + shell: 'grep -wo "{{ item }}" /etc/systemd/network/*.link' + changed_when: false + with_items: + - MACAddressPolicy + - NamePolicy + - name: Check forwarding is enabled + shell: 'grep -wo ^1$ /proc/sys/net/{{ item }}' + changed_when: false + with_items: + - "ipv4/ip_forward" + - "ipv4/conf/all/forwarding" + - "ipv4/conf/br-test2/forwarding" diff --git a/tests/verify_side_effect.yml b/tests/verify_side_effect.yml new file mode 100644 index 0000000..4f3c18c --- /dev/null +++ b/tests/verify_side_effect.yml @@ -0,0 +1,31 @@ +--- +# Copyright 2025, Cleura AB. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: Test networkd after side-effect + hosts: network_hosts + gather_facts: true + tasks: + - name: Interface check + ansible.builtin.assert: + that: + - ansible_facts['br_test'] is defined + - ansible_facts['dummy2']['active'] + - ansible_facts['dummy2']['type'] == 'ether' + - name: Bridge check + ansible.builtin.assert: + that: + - ansible_facts['br_test']['active'] + - ansible_facts['br_test']['type'] == 'bridge' + - ansible_facts['br_test']['ipv4']['address'] == '10.1.0.1' + - ansible_facts['br_test']['ipv4']['netmask'] == '255.255.255.0' diff --git a/tox.ini b/tox.ini index f8df7e6..ffa4d44 100644 --- a/tox.ini +++ b/tox.ini @@ -1,7 +1,7 @@ [tox] -minversion = 3.1 +minversion = 4.0 skipsdist = True -envlist = docs,linters,functional +envlist = docs,molecule ignore_basepython_conflict = True @@ -67,43 +67,19 @@ commands = commands = {posargs} +[testenv:molecule] +# You can use DOCKER_REGISTRY and DOCKER_IMAGE_TAG to switch between +# tested distros. I.e: +# DOCKER_IMAGE_TAG=ubuntu-systemd:jammy tox -e molecule +deps = + -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} + -rhttps://opendev.org/openstack/openstack-ansible/raw/branch/{env:TEST_BRANCH:master}/test-requirements.txt -[testenv:pep8] commands = - bash -c "{toxinidir}/tests/common/test-pep8.sh" + molecule test - -[flake8] -# Ignores the following rules due to how ansible modules work in general -# F403 'from ansible.module_utils.basic import *' used; -# unable to detect undefined names -ignore=F403 - - -[testenv:bashate] -commands = - bash -c "{toxinidir}/tests/common/test-bashate.sh" - - -[testenv:ansible-syntax] -commands = - bash -c "{toxinidir}/tests/common/test-ansible-syntax.sh" - - -[testenv:ansible-lint] -commands = - bash -c "{toxinidir}/tests/common/test-ansible-lint.sh" - - -[testenv:functional] -commands = - bash -c "{toxinidir}/tests/common/test-ansible-functional.sh" - - -[testenv:linters] -commands = - bash -c "{toxinidir}/tests/common/test-ansible-env-prep.sh" - {[testenv:pep8]commands} - {[testenv:bashate]commands} - {[testenv:ansible-lint]commands} - {[testenv:ansible-syntax]commands} +passenv = + {[testenv]passenv} + DOCKER_REGISTRY + DOCKER_IMAGE_TAG + DOCKER_COMMAND diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml index 7e93cb3..61df752 100644 --- a/zuul.d/project.yaml +++ b/zuul.d/project.yaml @@ -16,7 +16,7 @@ - project: templates: - openstack-ansible-linters-jobs - - openstack-ansible-role-jobs + - openstack-ansible-molecule - openstack-ansible-deploy-aio_metal-jobs - openstack-ansible-deploy-aio_distro_metal-jobs - check-requirements