Skip to content
This repository has been archived by the owner on Oct 13, 2023. It is now read-only.

Commit

Permalink
ART-3437: Make bundle tag names configurable
Browse files Browse the repository at this point in the history
- Supports `name_in_bundle` field in image meta to override the
  default tag name in `image-references`.
- If `name_in_bundle` is not set, matches both `<image_name_short_without_ose_prefix>` and `<image_name_short_with_ose_prefix>` to keep backward compatibility.
- The original `if name == self.metadata.image_name_short` branch is
  removed because it is not needed and already broken (its value is
always false because currently `name` is `openshift/ose-$something` but
`image_name_short` doesn't start with `openshift/ose-`).
  • Loading branch information
vfreex committed Nov 11, 2021
1 parent deaad6b commit e3e6315
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 40 deletions.
31 changes: 12 additions & 19 deletions doozerlib/distgit.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,6 @@ def wait(_):
task_f=lambda: exectools.cmd_gather(["podman", "pull", url])[0] == 0)


def build_image_ref_name(name):
return 'openshift/ose-' + re.sub(pattern='^ose-', repl='', string=name)


def map_image_name(name, image_map):
for match, replacement in image_map.items():
if name.find(match) != -1:
Expand Down Expand Up @@ -1869,28 +1865,25 @@ def _update_csv(self, version, release):

for ref in image_refs:
try:
name = build_image_ref_name(ref['name'])
name = ref['name']
name = map_image_name(name, image_map)
spec = ref['from']['name']
except:
raise DoozerFatalError('Error loading image-references data for {}'.format(self.metadata.distgit_key))

try:
if name == self.metadata.image_name_short: # ref is current image
image_tag = '{}:{}-{}'.format(name, version, release)
distgit = self.runtime.name_in_bundle_map.get(name, None)
# if upstream is referring to an image we don't actually build, give up.
if not distgit:
raise DoozerFatalError('Unable to find {} in image-references data for {}'.format(name, self.metadata.distgit_key))
meta = self.runtime.image_map.get(distgit, None)
if meta: # image is currently be processed
uuid_tag = "%s.%s" % (version, self.runtime.uuid) # applied by additional-tags
image_tag = '{}:{}'.format(meta.image_name_short, uuid_tag)
else:
distgit = self.runtime.image_distgit_by_name(name)
# if upstream is referring to an image we don't actually build, give up.
if not distgit:
raise DoozerFatalError('Unable to find {} in image-references data for {}'.format(name, self.metadata.distgit_key))
meta = self.runtime.image_map.get(distgit, None)
if meta: # image is currently be processed
uuid_tag = "%s.%s" % (version, self.runtime.uuid) # applied by additional-tags
image_tag = '{}:{}'.format(meta.image_name_short, uuid_tag)
else:
meta = self.runtime.late_resolve_image(distgit)
_, v, r = meta.get_latest_build_info()
image_tag = '{}:{}-{}'.format(meta.image_name_short, v, r)
meta = self.runtime.late_resolve_image(distgit)
_, v, r = meta.get_latest_build_info()
image_tag = '{}:{}-{}'.format(meta.image_name_short, v, r)

namespace = self.runtime.group_config.get('csv_namespace', None)
if not namespace:
Expand Down
15 changes: 15 additions & 0 deletions doozerlib/runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,8 @@ def __init__(self, **kwargs):
self.image_order = []
# allows mapping from name or distgit to meta
self.image_name_map = {}
# allows mapping from name in bundle to meta
self.name_in_bundle_map: Dict[str, ImageMetadata] = {}

# holds untouched group config
self.raw_group_config = {}
Expand Down Expand Up @@ -587,11 +589,24 @@ def filter_disabled(n, d):
# name or distgit. For now this is used elsewhere
image_name_data = self.gitdata.load_data(path='images')

def _register_name_in_bundle(name_in_bundle: str, distgit_key: str):
if name_in_bundle in self.name_in_bundle_map:
raise ValueError(f"Image {distgit_key} has name_in_bundle={name_in_bundle}, which is already taken by image {self.name_in_bundle_map[name_in_bundle]}")
self.name_in_bundle_map[name_in_bundle] = img.key

for img in image_name_data.values():
name = img.data.get('name')
short_name = name.split('/')[1]
self.image_name_map[name] = img.key
self.image_name_map[short_name] = img.key
name_in_bundle = img.data.get('name_in_bundle')
if name_in_bundle:
_register_name_in_bundle(name_in_bundle, img.key)
else:
short_name_without_ose = short_name[4:] if short_name.startswith("ose-") else short_name
_register_name_in_bundle(short_name_without_ose, img.key)
short_name_with_ose = "ose-" + short_name_without_ose
_register_name_in_bundle(short_name_with_ose, img.key)

image_data = self.gitdata.load_data(path='images', keys=image_keys,
exclude=image_ex,
Expand Down
21 changes: 0 additions & 21 deletions tests/test_distgit/test_build_image_ref_name.py

This file was deleted.

0 comments on commit e3e6315

Please sign in to comment.