Skip to content

Commit

Permalink
fix: skip running testinfra on excluded ansible versions
Browse files Browse the repository at this point in the history
Signed-off-by: gardar <[email protected]>
  • Loading branch information
gardar committed Sep 20, 2024
1 parent b471a1f commit 3b679c9
Show file tree
Hide file tree
Showing 66 changed files with 197 additions and 256 deletions.
2 changes: 2 additions & 0 deletions .config/molecule/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ platforms:
command: /lib/systemd/systemd
verifier:
name: testinfra
additional_files_or_dirs:
- "../../../../../.testinfra/testinfra_helpers.py"
provisioner:
playbooks:
converge: "${MOLECULE_PROJECT_DIRECTORY}/../../.config/molecule/converge.yml"
Expand Down
67 changes: 67 additions & 0 deletions .testinfra/testinfra_helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import os
import testinfra


def get_ansible_version():
"""
Get the current Ansible version from localhost using the 'debug' module.
Returns:
str: The current Ansible version (major.minor).
"""
localhost = testinfra.get_host(
"ansible://localhost?ansible_inventory=localhost,"
)
local_ansible_version = localhost.ansible("debug", "var=ansible_version")
ansible_version = '.'.join(
local_ansible_version['ansible_version']['full'].split('.')[:2]
)
return ansible_version


def filter_compatible_hosts(inventory, ansible_version):
"""
Filter hosts based on Ansible version compatibility.
Args:
inventory (str): The inventory file path.
ansible_version (str): The current Ansible version (major.minor).
Returns:
list: A list of compatible hosts that do not have the current Ansible
version in their exclude_ansible_vers hostvars.
"""
ansible_runner = testinfra.utils.ansible_runner.AnsibleRunner(inventory)
all_hosts = ansible_runner.get_hosts('all')
compatible_hosts = []

for host in all_hosts:
# Get host variables
host_vars = ansible_runner.get_variables(host)

# Check if the host should be excluded
if 'exclude_ansible_vers' in host_vars:
excluded_versions = host_vars['exclude_ansible_vers']
if ansible_version in excluded_versions:
continue
compatible_hosts.append(host)

return compatible_hosts


def get_target_hosts():
"""
Get the filtered target hosts based on the current Ansible version.
Returns:
list: A list of hosts that are compatible with
the current Ansible version.
"""
# Get current Ansible version
current_ansible_version = get_ansible_version()

# Get the inventory file from environment
inventory_file = os.environ['MOLECULE_INVENTORY_FILE']

# Filter the hosts based on the exclusion criteria
return filter_compatible_hosts(inventory_file, current_ansible_version)
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("dirs", [
Expand Down
6 changes: 2 additions & 4 deletions roles/alertmanager/molecule/default/tests/test_default.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
import pytest
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("dirs", [
Expand Down
6 changes: 2 additions & 4 deletions roles/alertmanager/molecule/latest/tests/test_latest.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_service(host):
Expand Down
6 changes: 2 additions & 4 deletions roles/bind_exporter/molecule/default/tests/test_default.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_directories(host):
Expand Down
6 changes: 2 additions & 4 deletions roles/bind_exporter/molecule/latest/tests/test_latest.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
6 changes: 2 additions & 4 deletions roles/blackbox_exporter/molecule/latest/tests/test_latest.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
6 changes: 2 additions & 4 deletions roles/cadvisor/molecule/alternative/tests/test_alternative.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_service(host):
Expand Down
6 changes: 2 additions & 4 deletions roles/cadvisor/molecule/default/tests/test_default.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_files(host):
Expand Down
6 changes: 2 additions & 4 deletions roles/cadvisor/molecule/latest/tests/test_alternative.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_directories(host):
Expand Down
6 changes: 2 additions & 4 deletions roles/chrony_exporter/molecule/default/tests/test_default.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_directories(host):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_service(host):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_files(host):
Expand Down
6 changes: 2 additions & 4 deletions roles/fail2ban_exporter/molecule/latest/tests/test_latest.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_directories(host):
Expand Down
6 changes: 2 additions & 4 deletions roles/ipmi_exporter/molecule/default/tests/test_default.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_directories(host):
Expand Down
6 changes: 2 additions & 4 deletions roles/ipmi_exporter/molecule/latest/tests/test_latest.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts
import pytest

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


@pytest.mark.parametrize("files", [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
import testinfra.utils.ansible_runner
from testinfra_helpers import get_target_hosts

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
testinfra_hosts = get_target_hosts()


def test_directories(host):
Expand Down
Loading

0 comments on commit 3b679c9

Please sign in to comment.