diff --git a/tripleoclient/tests/v1/overcloud_image/test_overcloud_image.py b/tripleoclient/tests/v1/overcloud_image/test_overcloud_image.py index 5ec8fa9be..f3f649a5b 100644 --- a/tripleoclient/tests/v1/overcloud_image/test_overcloud_image.py +++ b/tripleoclient/tests/v1/overcloud_image/test_overcloud_image.py @@ -38,6 +38,24 @@ class TestOvercloudImageBuild(TestPluginV1): self.cmd = overcloud_image.BuildOvercloudImage(self.app, None) self.cmd._create_builder = _force_builder + @mock.patch('tripleo_common.image.build.ImageBuildManager', autospec=True) + def test_overcloud_image_build_default_yaml(self, mock_manager): + arglist = [] + verifylist = [] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + + mock_manager.assert_called_once_with( + ['/usr/share/openstack-tripleo-common/image-yaml/' + 'overcloud-images.yaml', + '/usr/share/openstack-tripleo-common/image-yaml/' + 'overcloud-images-centos7.yaml'], + output_directory='.', + skip=True, + images=None) + @mock.patch('tripleo_common.image.build.ImageBuildManager', autospec=True) def test_overcloud_image_build_yaml(self, mock_manager): arglist = ['--config-file', 'config.yaml'] @@ -102,13 +120,15 @@ class TestOvercloudImageBuild(TestPluginV1): skip=True, images=None) + @mock.patch('tripleo_common.image.build.ImageBuildManager', autospec=True) @mock.patch('os.path.isfile', autospec=True) @mock.patch('platform.linux_distribution') @mock.patch.object(overcloud_image.BuildOvercloudImage, '_build_image_fedora_user', autospec=True) def test_overcloud_image_build_all(self, mock_fedora_user, mock_linux_distribution, - mock_os_path_isfile): + mock_os_path_isfile, + mock_manager): arglist = ['--all'] verifylist = [('all', True)] @@ -119,6 +139,7 @@ class TestOvercloudImageBuild(TestPluginV1): self.cmd.take_action(parsed_args) self.assertEqual(2, self.mock_disk_image_create.call_count) + self.assertEqual(0, mock_manager.call_count) @mock.patch('platform.linux_distribution') @mock.patch('subprocess.call', autospec=True) @@ -161,12 +182,14 @@ class TestOvercloudImageBuild(TestPluginV1): mock_open_context.assert_has_calls( [mock.call('fedora-user.qcow2', 'wb')]) + @mock.patch('tripleo_common.image.build.ImageBuildManager', autospec=True) @mock.patch('platform.linux_distribution') @mock.patch('os.path.isfile', autospec=True) def test_overcloud_image_build_overcloud_full( self, mock_os_path_isfile, - mock_linux_distribution): + mock_linux_distribution, + mock_manager): arglist = ['--type', 'overcloud-full'] verifylist = [('image_types', ['overcloud-full'])] @@ -199,6 +222,7 @@ class TestOvercloudImageBuild(TestPluginV1): self.assertEqual([mock.call('overcloud-full.qcow2'), mock.call('overcloud-full.qcow2')], mock_os_path_isfile.mock_calls) + self.assertEqual(0, mock_manager.call_count) @mock.patch('platform.linux_distribution') @mock.patch('os.path.isfile', autospec=True) diff --git a/tripleoclient/v1/overcloud_image.py b/tripleoclient/v1/overcloud_image.py index 24cce363e..cff2abc5b 100644 --- a/tripleoclient/v1/overcloud_image.py +++ b/tripleoclient/v1/overcloud_image.py @@ -177,6 +177,10 @@ class BuildOvercloudImage(command.Command): auth_required = False log = logging.getLogger(__name__ + ".BuildOvercloudImage") + IMAGE_YAML_PATH = "/usr/share/openstack-tripleo-common/image-yaml" + DEFAULT_YAML = ['overcloud-images.yaml', 'overcloud-images-centos7.yaml'] + + # The constants below are deprecated and will be removed in Pike TRIPLEOPUPPETELEMENTS = "/usr/share/tripleo-puppet-elements" INSTACKUNDERCLOUDELEMENTS = "/usr/share/instack-undercloud" PUPPET_COMMON_ELEMENTS = [ @@ -229,7 +233,7 @@ class BuildOvercloudImage(command.Command): def get_parser(self, prog_name): parser = super(BuildOvercloudImage, self).get_parser(prog_name) - image_group = parser.add_mutually_exclusive_group(required=True) + image_group = parser.add_mutually_exclusive_group(required=False) image_group.add_argument( "--all", dest="all", @@ -592,9 +596,12 @@ class BuildOvercloudImage(command.Command): def take_action(self, parsed_args): self.log.debug("take_action(%s)" % parsed_args) - if not parsed_args.config_files: + if parsed_args.all or parsed_args.image_types: return self._legacy_build(parsed_args) + if not parsed_args.config_files: + parsed_args.config_files = [os.path.join(self.IMAGE_YAML_PATH, f) + for f in self.DEFAULT_YAML] manager = build.ImageBuildManager( parsed_args.config_files, output_directory=parsed_args.output_directory,