diff --git a/releasenotes/notes/discover-tag-3b0b073a95178e82.yaml b/releasenotes/notes/discover-tag-3b0b073a95178e82.yaml new file mode 100644 index 000000000..28461dec3 --- /dev/null +++ b/releasenotes/notes/discover-tag-3b0b073a95178e82.yaml @@ -0,0 +1,9 @@ +--- +features: + + - The "openstack overcloud container image tag discover" command is provided + to discover the version-based tag by inspecting the image from a stable tag + like 'current-tripleo-rdo'. Stable tags like 'latest' or 'pike' can't be used + for container updates because something needs to change to trigger the new + containers being pulled. Without this command it would be up to the user to + find out what versioned tag to specify when calling prepare. diff --git a/setup.cfg b/setup.cfg index d5023c5b8..e07931000 100644 --- a/setup.cfg +++ b/setup.cfg @@ -68,6 +68,7 @@ openstack.tripleoclient.v1 = overcloud_container_image_upload = tripleoclient.v1.container_image:UploadImage overcloud_container_image_build = tripleoclient.v1.container_image:BuildImage overcloud_container_image_prepare = tripleoclient.v1.container_image:PrepareImageFiles + overcloud_container_image_tag_discover = tripleoclient.v1.container_image:DiscoverImageTag overcloud_delete = tripleoclient.v1.overcloud_delete:DeleteOvercloud overcloud_credentials = tripleoclient.v1.overcloud_credentials:OvercloudCredentials overcloud_deploy = tripleoclient.v1.overcloud_deploy:DeployOvercloud diff --git a/tripleoclient/v1/container_image.py b/tripleoclient/v1/container_image.py index fc9f27e19..5fa54055c 100644 --- a/tripleoclient/v1/container_image.py +++ b/tripleoclient/v1/container_image.py @@ -385,3 +385,38 @@ class PrepareImageFiles(command.Command): os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o666), 'w') as f: f.write(result_str) + + +class DiscoverImageTag(command.Command): + """Discover the versioned tag for an image.""" + + auth_required = False + log = logging.getLogger(__name__ + ".DiscoverImageTag") + + def get_parser(self, prog_name): + parser = super(DiscoverImageTag, self).get_parser(prog_name) + parser.add_argument( + "--image", + dest="image", + metavar='', + required=True, + help=_("Fully qualified name of the image to discover the tag for " + "(Including registry and stable tag)."), + ) + parser.add_argument( + "--tag-from-label", + dest="tag_from_label", + metavar='', + help=_("Use the value of the specified label to discover the " + "tag."), + ) + return parser + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)" % parsed_args) + + uploader = image_uploader.ImageUploadManager([]) + print(uploader.discover_image_tag( + image=parsed_args.image, + tag_from_label=parsed_args.tag_from_label + ))