Add label argument for the container image build

This change adds a new argument for the container image build CLI,
which allows operators to inject specific labels into a build that
also supports basic string replacement from user input. This
feature will allow maintainers and vendors to appropriately label
their container images without running any post validation or
injection.

Change-Id: Ia1337dcbeceed485eda14733221164529daf0856
Signed-off-by: Kevin Carter <kecarter@redhat.com>
(cherry picked from commit 2c5927a5ad)
This commit is contained in:
Kevin Carter 2021-02-25 14:24:00 -06:00 committed by Kevin Carter
parent a9d220cb42
commit 7c8ba02989
2 changed files with 44 additions and 0 deletions

View File

@ -0,0 +1,12 @@
---
features:
- The container image build command now has the ability to inject labels
into various images being constructed. To add labels into a container,
the argument `--label` can be specified multiple times. The value is
always a key=value pair and each key must be unique.
other:
- The container image build label agument has the ability to do simple
string replacements following the python standard. Available options
for string replacement are `registry`, `namespace`, `prefix`,
`image`, `tag`, and `name`. Example usage
`--label component="%(prefix)s-%(name)s-container"`.

View File

@ -184,6 +184,18 @@ class Build(command.Command):
"(default: %(default)s)"
),
)
parser.add_argument(
"--label",
dest="labels",
metavar="<label-data>",
default=[],
action="append",
help=_(
"Add labels to the containers. This option can be "
"specified multiple times. Each label is a key=value "
"pair."
),
)
parser.add_argument(
"--volume",
dest="volumes",
@ -562,6 +574,26 @@ class Build(command.Command):
rhel_modules.update({name: version})
image_config['tcib_rhel_modules'] = rhel_modules
if parsed_args.labels:
_desc = "OpenStack Platform {}".format(image_parsed_name)
label_data = image_config['tcib_labels'] = {
"tcib_managed": True,
"maintainer": "OpenStack TripleO Team",
"description": _desc,
"summary": _desc,
"io.k8s.display-name": _desc,
}
for item in parsed_args.labels:
key, value = item.split("=", 1)
label_data[key] = value % dict(
registry=parsed_args.registry,
namespace=parsed_args.namespace,
prefix=parsed_args.prefix,
image=image_name,
tag=parsed_args.tag,
name=image_parsed_name,
)
# NOTE(cloudnull): Check if the reference config has a valid
# "from" option. If the reference "from"
# option is valid, it will be used.