Merge "Add skip_unless_undercloud_has_ansible decorator"

This commit is contained in:
Zuul 2022-07-05 17:57:12 +00:00 committed by Gerrit Code Review
commit e2022af3bc
3 changed files with 36 additions and 0 deletions

View File

@ -77,6 +77,7 @@ class PlaybookTest(testtools.TestCase):
playbook='test_undercloud_current_dir.yaml',
playbook_dirname=PLAYBOOK_DIRNAME)
@tripleo.skip_unless_undercloud_has_ansible(min_version=2.9)
def test_overcloud_openstack_auth(self):
tripleo.run_playbook_from_undercloud(
playbook='test_overcloud_openstack_auth.yaml',

View File

@ -27,6 +27,8 @@ read_tripleo_ansible_inventory = _ansible.read_tripleo_ansible_inventory
fetch_tripleo_inventary_file = _ansible.fetch_tripleo_inventary_file
skip_if_missing_tripleo_ansible_inventory = \
_ansible.skip_if_missing_tripleo_ansible_inventory
skip_unless_undercloud_has_ansible = \
_ansible.skip_unless_undercloud_has_ansible
run_playbook_from_undercloud = _ansible.run_playbook_from_undercloud
find_overcloud_node = overcloud.find_overcloud_node

View File

@ -18,6 +18,8 @@ import io
import os
import typing
from oslo_log import log
import tobiko
from tobiko.shell import ansible
from tobiko.shell import sh
@ -26,6 +28,9 @@ from tobiko.tripleo import _undercloud
from tobiko.tripleo import _config
LOG = log.getLogger(__name__)
def get_tripleo_ansible_inventory():
inventory_file = get_tripleo_ansible_inventory_file()
with io.open(inventory_file, 'rb') as fd:
@ -53,6 +58,34 @@ def get_tripleo_ansible_inventory_file() -> typing.Optional[str]:
return None
def skip_unless_undercloud_has_ansible(min_version: float = None):
reason = ("Ansible not found on undercloud host "
f"(min_version={min_version})")
return tobiko.skip_unless(reason=reason,
predicate=has_undercloud_ansible_version,
min_version=min_version)
def has_undercloud_ansible_version(min_version: float = None) -> bool:
ssh_client = _undercloud.undercloud_ssh_client()
try:
output = sh.execute('ansible --version',
ssh_client=ssh_client).stdout
except sh.ShellCommandFailed:
LOG.debug("Error getting ansible version", exc_info=1)
return False
if min_version is not None:
first_line = output.splitlines()[0]
version_pair = first_line.split()[1].split('.', 2)[:2]
version = float('.'.join(version_pair))
if version < min_version:
LOG.debug(f"Ansible version is < {min_version}:\n"
f"{first_line}\n")
return False
return True
READ_TRIPLEO_ANSIBLE_INVENTORY_SCRIPT = """
source {undercloud_rcfile} || exit 1