diff --git a/tripleo_common/image/kolla_builder.py b/tripleo_common/image/kolla_builder.py index 59825f722..8d7cd3d6b 100644 --- a/tripleo_common/image/kolla_builder.py +++ b/tripleo_common/image/kolla_builder.py @@ -431,7 +431,7 @@ class KollaImageBuilder(base.BaseImageManager): result.append(entry) return result - def build_images(self, kolla_config_files=None): + def build_images(self, kolla_config_files=None, excludes=[]): cmd = ['kolla-build'] if kolla_config_files: @@ -442,11 +442,13 @@ class KollaImageBuilder(base.BaseImageManager): container_images = self.load_config_files(self.CONTAINER_IMAGES) or [] container_images.sort(key=lambda i: i.get('imagename')) for i in container_images: - # Do not attempt to build containers that are not from kolla + # Do not attempt to build containers that are not from kolla or + # are in our exclude list if not i.get('image_source', '') == 'kolla': continue image = self.imagename_to_regex(i.get('imagename')) - if image: + # Make sure the image was properly parsed and not purposely skipped + if image and image not in excludes: cmd.append(image) self.logger.info('Running %s' % ' '.join(cmd)) diff --git a/tripleo_common/tests/image/test_kolla_builder.py b/tripleo_common/tests/image/test_kolla_builder.py index cd160b287..95aad669f 100644 --- a/tripleo_common/tests/image/test_kolla_builder.py +++ b/tripleo_common/tests/image/test_kolla_builder.py @@ -138,6 +138,29 @@ class TestKollaImageBuilder(base.TestCase): 'kolla-build', ], env=env, stdout=-1) + @mock.patch('tripleo_common.image.base.open', + mock.mock_open(read_data=filedata), create=True) + @mock.patch('os.path.isfile', return_value=True) + @mock.patch('subprocess.Popen') + def test_build_images_exclude(self, mock_popen, mock_path): + process = mock.Mock() + process.returncode = 0 + process.communicate.return_value = 'done', '' + mock_popen.return_value = process + + builder = kb.KollaImageBuilder(self.filelist) + self.assertEqual('done', builder.build_images(['kolla-config.conf'], + ['nova-compute'])) + env = os.environ.copy() + mock_popen.assert_called_once_with([ + 'kolla-build', + '--config-file', + 'kolla-config.conf', + 'nova-libvirt', + 'heat-docker-agents-centos', + 'image-with-missing-tag', + ], env=env, stdout=-1) + @mock.patch('subprocess.Popen') def test_build_images_fail(self, mock_popen): process = mock.Mock()