Fix pathing for container image prepare

When we pass the paths to the ansible playbook, they need to be absolute
paths as the relative cwd changes when it runs.

Change-Id: I8a434e38eb1a69530190df96d3b555ea14e4488a
Closes-Bug: #1895194
This commit is contained in:
Alex Schultz 2020-09-10 14:19:19 -06:00
parent e21e04884e
commit 5abe17dc4a
2 changed files with 55 additions and 4 deletions

View File

@ -28,6 +28,7 @@ from osc_lib import exceptions as oscexc
from six.moves.urllib import parse
from tripleo_common.image import image_uploader
from tripleo_common.image import kolla_builder
from tripleoclient import constants
from tripleoclient.tests.v1.test_plugin import TestPluginV1
from tripleoclient.v1 import container_image
@ -825,7 +826,7 @@ class TestTripleoImagePrepare(TestPluginV1):
verifylist = []
self.app.command_options = [
'tripleo', 'container', 'image', 'prepare', 'default'
'tripleo', 'container', 'image', 'prepare'
] + arglist
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -844,6 +845,47 @@ class TestTripleoImagePrepare(TestPluginV1):
playbook_dir='/usr/share/ansible/tripleo-playbooks',
verbosity=3, workdir=mock.ANY)
@mock.patch('tripleoclient.utils.rel_or_abs_path')
@mock.patch('tripleoclient.utils.run_ansible_playbook',
autospec=True)
def test_tripleo_container_image_prepare_paths(self, mock_playbook,
mock_path):
arglist = ['-e', 'foo.yaml',
'-e', '/bar.yaml',
'--environment-directory', 'foo',
'--environment-directory', '/bar',
'-r', 'foo.yaml']
verifylist = []
self.app.command_options = [
'tripleo', 'container', 'image', 'prepare'
] + arglist
mock_path.return_value = ('/usr/share/openstack-tripleo-heat-templates'
'/foo.yaml')
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
e_vars = {'roles_file': ('/usr/share/'
'openstack-tripleo-heat-templates/foo.yaml'),
'environment_directories': [
os.path.expanduser(constants.DEFAULT_ENV_DIRECTORY),
os.getcwd() + '/foo',
'/bar'
],
'environment_files': [
os.getcwd() + '/foo.yaml',
'/bar.yaml'
],
'cleanup': 'full', 'dry_run': False,
'log_file': 'container_image_prepare.log', 'debug': True}
mock_playbook.assert_called_with(
extra_vars=e_vars,
inventory='localhost,',
playbook='cli-container-image-prepare.yaml',
playbook_dir='/usr/share/ansible/tripleo-playbooks',
verbosity=3, workdir=mock.ANY)
class TestTripleoImagePrepareDefault(TestPluginV1):

View File

@ -1054,10 +1054,19 @@ class TripleOImagePrepare(command.Command):
if parsed_args.cleanup not in image_uploader.CLEANUP:
raise oscexc.CommandError('--cleanup must be one of: %s' %
', '.join(image_uploader.CLEANUP))
role_file = None
if parsed_args.roles_file:
role_file = utils.rel_or_abs_path(parsed_args.roles_file,
constants.TRIPLEO_HEAT_TEMPLATES)
env_dirs = [os.path.abspath(x)
for x in parsed_args.environment_directories]
env_files = [os.path.abspath(x)
for x in parsed_args.environment_files]
extra_vars = {
"roles_file": parsed_args.roles_file,
"environment_directories": parsed_args.environment_directories,
"environment_files": parsed_args.environment_files,
"roles_file": role_file,
"environment_directories": env_dirs,
"environment_files": env_files,
"cleanup": parsed_args.cleanup,
"dry_run": parsed_args.dry_run,
"log_file": parsed_args.log_file}