Create 'infra' type of images

If image is always built same way then it is considered 'infra'.
BINARY_SOURCE_IMAGES variable lists toplevel binary/source images.

There is a switch "--infra-rename" to enable renaming of infrastructure
images. Disabled by default to keep compatibility (will be enabled in
future patch).

Implements: blueprint infra-images

Change-Id: Ib5235e3576ef0eae3efab9559ef44227c928067c
This commit is contained in:
Marcin Juszkiewicz 2020-09-21 12:27:34 +00:00
parent 87730f8f7c
commit e40bf80f98
2 changed files with 44 additions and 3 deletions

View File

@ -254,7 +254,9 @@ _CLI_OPTS = [
cfg.BoolOpt('enable-unbuildable', default=False,
help='Enable images marked as unbuildable'),
cfg.BoolOpt('summary', default=True,
help='Show summary at the end of build')
help='Show summary at the end of build'),
cfg.BoolOpt('infra-rename', default=False,
help='Rename infrastructure images to infra')
]
_BASE_OPTS = [

View File

@ -192,6 +192,13 @@ UNBUILDABLE_IMAGES = {
},
}
# NOTE(hrw): all non-infra images and their children
BINARY_SOURCE_IMAGES = [
'kolla-toolbox',
'openstack-base',
'monasca-thresh',
]
class ArchivingError(Exception):
pass
@ -751,7 +758,10 @@ class KollaWorker(object):
sys.exit(1)
self.image_prefix = self.base + '-' + self.install_type + '-'
self.infra_image_prefix = self.image_prefix
if self.conf.infra_rename:
self.infra_image_prefix = self.base + '-infra-'
else:
self.infra_image_prefix = self.image_prefix
self.regex = conf.regex
self.image_statuses_bad = dict()
@ -1004,6 +1014,15 @@ class KollaWorker(object):
if not self.conf.work_dir:
shutil.rmtree(self.temp_dir)
def change_install_type(self, image, old_type, new_type):
# NOTE(hrw): /self.base to make sure that we do not break image name
image.canonical_name = image.canonical_name.replace(
f'/{self.base}-{old_type}-',
f'/{self.base}-{new_type}-')
if image.children:
for tmp_image in image.children:
tmp_image.parent_name = image.canonical_name
def filter_images(self):
"""Filter which images to build."""
filter_ = list()
@ -1085,6 +1104,25 @@ class KollaWorker(object):
if image.status != STATUS_UNBUILDABLE:
image.status = STATUS_MATCHED
if self.conf.infra_rename:
for image in self.images:
is_infra = True
if image.name in BINARY_SOURCE_IMAGES:
# keep as is
is_infra = False
else:
# let's check ancestors if any of them is binary/source
ancestor_image = image
while (ancestor_image.parent is not None):
ancestor_image = ancestor_image.parent
if ancestor_image.name in BINARY_SOURCE_IMAGES:
is_infra = False
break
if is_infra:
self.change_install_type(image, self.install_type, 'infra')
pass
# Next, mark any skipped images.
for image in self.images:
if image.status != STATUS_MATCHED:
@ -1343,7 +1381,8 @@ class KollaWorker(object):
for parent_name, parent in sort_images.items():
for image in sort_images.values():
if image.parent_name == parent_name:
if (image.parent_name == parent_name or image.parent_name ==
parent_name.replace(self.install_type, 'infra')):
parent.children.append(image)
image.parent = parent