diff --git a/tripleoclient/tests/v2/container_image/test_tripleo_container_image.py b/tripleoclient/tests/v2/container_image/test_tripleo_container_image.py index 8a8301864..55290bd2f 100644 --- a/tripleoclient/tests/v2/container_image/test_tripleo_container_image.py +++ b/tripleoclient/tests/v2/container_image/test_tripleo_container_image.py @@ -208,6 +208,15 @@ class TestContainerImages(deploy_fakes.TestDeployOvercloud): self.check_parser(self.cmd, arglist, verifylist) + def test_image_build_config_dir(self): + arglist = ["--config-file", "config.yaml", "--config-path", "/foo"] + verifylist = [("config_file", "config.yaml"), ("config_path", "/foo")] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self._take_action(parsed_args=parsed_args) + self.assertEqual(self.cmd.tcib_config_path, '/foo/tcib') + def test_image_build_failure_no_config_dir(self): arglist = ["--config-path", "not-a-path"] verifylist = [ @@ -220,6 +229,28 @@ class TestContainerImages(deploy_fakes.TestDeployOvercloud): mock_isfile.return_value = True self.assertRaises(IOError, self.cmd.take_action, parsed_args) + def test_process_images(self): + rtn_value = {'yay': 'values'} + arglist = ["--config-path", "foobar/"] + verifylist = [ + ("config_path", "foobar/"), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + expected_images = ['foo', 'foobar'] + image_configs = {} + self.cmd.tcib_config_path = '/foo/tcib' + with mock.patch("tripleoclient.v2.tripleo_container_image.Build" + ".find_image", autospec=True) as mock_find_image: + + mock_find_image.return_value = rtn_value + cfgs = self.cmd.process_images(expected_images, parsed_args, + image_configs) + mock_find_image.assert_called_once_with(self.cmd, 'foo', + '/foo/tcib', 'ubi8') + self.assertEqual(cfgs, {'foo': rtn_value}) + class TestContainerImagesHotfix(deploy_fakes.TestDeployOvercloud): def setUp(self): diff --git a/tripleoclient/v2/tripleo_container_image.py b/tripleoclient/v2/tripleo_container_image.py index de983587f..bab633cf2 100644 --- a/tripleoclient/v2/tripleo_container_image.py +++ b/tripleoclient/v2/tripleo_container_image.py @@ -98,8 +98,9 @@ class Build(command.Command): default=BASE_PATH, help=_( "Base configuration path. This is the base path for all " - "container-image files. If this option is set, the " - "default path for will be modified. " + "container-image files. The defined containers must reside " + "within a 'tcib' folder that is in this path. If this option " + "is set, the default path for will be modified. " "(default: %(default)s)" ), ) @@ -365,8 +366,10 @@ class Build(command.Command): """ image_configs = collections.OrderedDict() + config_path_base = os.path.basename( + os.path.abspath(parsed_args.config_path)) for image in expected_images: - if image != "container-images" and image not in image_configs: + if (image != config_path_base and image not in image_configs): self.log.debug("processing image configs".format(image)) image_config = self.find_image( image, @@ -399,6 +402,7 @@ class Build(command.Command): self.tcib_config_path = os.path.join( self.config_path, DEFAULT_TCIB_CONFIG_BASE ) + if not os.path.isdir(self.tcib_config_path): raise IOError( "Configuration directory {} was not found.".format(