Merge "Deploy var_files before playing ansible playbooks"

This commit is contained in:
Zuul 2022-03-24 16:26:06 +00:00 committed by Gerrit Code Review
commit 5e7c6baf3e
5 changed files with 60 additions and 27 deletions

View File

@ -76,24 +76,30 @@ class AnsiblePlaybook(tobiko.SharedFixture):
return None
return self._ensure_work_file(inventory_filename, 'inventory')
def _ensure_playbook_filename(self,
playbook: str = None,
playbook_dirname: str = None,
playbook_filename: str = None) \
-> typing.Optional[str]:
if playbook_filename is None:
playbook_filename = self._get_playbook_filename(
playbook=playbook, playbook_dirname=playbook_dirname)
return self._ensure_work_file(playbook_filename)
def _get_playbook_filename(self,
playbook: str = None,
playbook_dirname: str = None) -> str:
if playbook is None:
playbook = self._playbook
if playbook_dirname is None:
playbook_dirname = self.playbook_dirname
return os.path.join(playbook_dirname, playbook + '.yaml')
basename: str = None,
dirname: str = None) -> str:
if basename is None:
basename = self._playbook
if dirname is None:
dirname = self.playbook_dirname
return os.path.join(dirname, basename)
def _ensure_vars_files(self,
vars_files: typing.Iterable[str],
sub_dir: str = None,
dirname: str = None) -> typing.List[str]:
work_filenames = []
for vars_file in vars_files:
filename = self._get_playbook_filename(basename=vars_file,
dirname=dirname)
if sub_dir is None and dirname is not None:
sub_dir = os.path.relpath(os.path.dirname(filename), dirname)
work_filename = self._ensure_work_file(filename=filename,
sub_dir=sub_dir)
work_filenames.append(work_filename)
return work_filenames
def _ensure_work_file(self, filename: str, sub_dir: str = None) -> str:
filename = os.path.realpath(filename)
@ -123,7 +129,8 @@ class AnsiblePlaybook(tobiko.SharedFixture):
playbook: str = None,
playbook_dirname: str = None,
playbook_filename: str = None,
inventory_filename: str = None) -> \
inventory_filename: str = None,
vars_files: typing.Iterable[str] = None) -> \
sh.ShellCommand:
# ensure command
if command is None:
@ -137,11 +144,15 @@ class AnsiblePlaybook(tobiko.SharedFixture):
command += ['-i', work_inventory_filename]
# ensure playbook file
command += [self._ensure_playbook_filename(
playbook=playbook,
playbook_dirname=playbook_dirname,
playbook_filename=playbook_filename)]
if playbook_filename is None:
playbook_filename = self._get_playbook_filename(
basename=playbook, dirname=playbook_dirname)
playbook_dirname = os.path.dirname(playbook_filename)
command += [self._ensure_work_file(playbook_filename)]
if vars_files is not None:
self._ensure_vars_files(vars_files=vars_files,
dirname=playbook_dirname)
return command
def run_playbook(self,
@ -149,13 +160,15 @@ class AnsiblePlaybook(tobiko.SharedFixture):
playbook: str = None,
playbook_dirname: str = None,
playbook_filename: str = None,
inventory_filename: str = None):
inventory_filename: str = None,
vars_files: typing.Iterable[str] = None):
tobiko.setup_fixture(self)
command = self._get_command(command=command,
playbook=playbook,
playbook_dirname=playbook_dirname,
playbook_filename=playbook_filename,
inventory_filename=inventory_filename)
inventory_filename=inventory_filename,
vars_files=vars_files)
return self.sh_connection.execute(command, current_dir=self.work_dir)

View File

@ -0,0 +1,7 @@
---
- hosts: localhost
vars_files: vars/some-vars.yaml
tasks:
- debug: var=var1
- debug: var=var2

View File

@ -0,0 +1,4 @@
---
- var1: value1
var2: value2

View File

@ -29,5 +29,11 @@ class OpenShiftTest(testtools.TestCase):
@tripleo.skip_if_missing_tripleo_ansible_inventory
def test_ping_all_hosts(self):
tripleo.run_playbook_from_undercloud(
playbook='ping-shiftstack',
playbook='ping-shiftstack.yaml',
playbook_dirname=PLAYBOOK_DIRNAME)
def test_debug_vars(self):
tripleo.run_playbook_from_undercloud(
playbook='debug-vars.yaml',
playbook_dirname=PLAYBOOK_DIRNAME,
vars_files=['vars/some-vars.yaml'])

View File

@ -15,6 +15,7 @@ from __future__ import absolute_import
import io
import os
import typing
import tobiko
from tobiko.shell import ansible
@ -104,13 +105,15 @@ def run_playbook_from_undercloud(command: sh.ShellCommand = None,
playbook: str = None,
playbook_dirname: str = None,
playbook_filename: str = None,
inventory_filename: str = None):
inventory_filename: str = None,
vars_files: typing.Iterable[str] = None):
return undercloud_ansible_playbook().run_playbook(
command=command,
playbook=playbook,
playbook_dirname=playbook_dirname,
playbook_filename=playbook_filename,
inventory_filename=inventory_filename)
inventory_filename=inventory_filename,
vars_files=vars_files)
def setup_undercloud_ansible_plabook():