From 5f9a44e1e629fcc20b0e1b85715b42f2183cd814 Mon Sep 17 00:00:00 2001 From: Jared Rodriguez Date: Wed, 17 Mar 2021 11:11:06 -0500 Subject: [PATCH] support semver_metadata imagetags --- cmd/kubeadm/app/phases/upgrade/staticpods.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/cmd/kubeadm/app/phases/upgrade/staticpods.go b/cmd/kubeadm/app/phases/upgrade/staticpods.go index 26b43b850c8..a9b3cd98882 100644 --- a/cmd/kubeadm/app/phases/upgrade/staticpods.go +++ b/cmd/kubeadm/app/phases/upgrade/staticpods.go @@ -20,6 +20,7 @@ import ( "fmt" "os" "path/filepath" + "strings" "time" "github.com/pkg/errors" @@ -286,7 +287,8 @@ func performEtcdStaticPodUpgrade(certsRenewMgr *renewal.Manager, client clientse // or the kubeadm preferred one for the desired Kubernetes version var desiredEtcdVersion *version.Version if cfg.Etcd.Local.ImageTag != "" { - desiredEtcdVersion, err = version.ParseSemantic(cfg.Etcd.Local.ImageTag) + desiredEtcdVersion, err = version.ParseSemantic( + ConvertImageTagMetadataToSemver(cfg.Etcd.Local.ImageTag)) if err != nil { return true, errors.Wrapf(err, "failed to parse tag %q as a semantic version", cfg.Etcd.Local.ImageTag) } @@ -643,5 +645,14 @@ func GetEtcdImageTagFromStaticPod(manifestDir string) (string, error) { return "", err } - return image.TagFromImage(pod.Spec.Containers[0].Image), nil + return ConvertImageTagMetadataToSemver(image.TagFromImage(pod.Spec.Containers[0].Image)), nil +} + +// ConvertImageTagMetadataToSemver converts imagetag in the format of semver_metadata to semver+metadata +func ConvertImageTagMetadataToSemver(tag string) string { + // Container registries do not support `+` characters in tag names. This prevents imagetags from + // correctly representing semantic versions which use the plus symbol to delimit build metadata. + // Kubernetes uses the the convention of using an underscore in image registries to preserve + // build metadata information in imagetags. + return strings.Replace(tag, "_", "+", 1) }