diff --git a/releasenotes/notes/image-build-labels-97fda64f693cd8ba.yaml b/releasenotes/notes/image-build-labels-97fda64f693cd8ba.yaml new file mode 100644 index 000000000..666cf45e4 --- /dev/null +++ b/releasenotes/notes/image-build-labels-97fda64f693cd8ba.yaml @@ -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"`. diff --git a/tripleoclient/v2/tripleo_container_image.py b/tripleoclient/v2/tripleo_container_image.py index 45efcfb76..728fa60fa 100644 --- a/tripleoclient/v2/tripleo_container_image.py +++ b/tripleoclient/v2/tripleo_container_image.py @@ -189,6 +189,18 @@ class Build(command.Command): "(default: %(default)s)" ), ) + parser.add_argument( + "--label", + dest="labels", + metavar="", + 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", @@ -577,6 +589,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.