From a56e8eb0497627d1b366ff170290bf7e3147aad6 Mon Sep 17 00:00:00 2001 From: John Gardiner Myers Date: Tue, 11 Jul 2023 09:33:41 -0700 Subject: [PATCH] Refactor UsesExternalECRCredentialsProvider() --- nodeup/pkg/model/context.go | 4 ++++ nodeup/pkg/model/kubelet.go | 4 ++-- pkg/apis/kops/cluster.go | 4 ---- pkg/apis/kops/model/features.go | 6 ++++++ upup/pkg/fi/cloudup/apply_cluster.go | 3 ++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/nodeup/pkg/model/context.go b/nodeup/pkg/model/context.go index 84443abbc7..b8a4a30d19 100644 --- a/nodeup/pkg/model/context.go +++ b/nodeup/pkg/model/context.go @@ -402,6 +402,10 @@ func (c *NodeupModelContext) UseChallengeCallback(cloudProvider kops.CloudProvid return model.UseChallengeCallback(cloudProvider) } +func (c *NodeupModelContext) UseExternalECRCredentialsProvider() bool { + return model.UseExternalECRCredentialsProvider(c.kubernetesVersion, c.CloudProvider()) +} + // UsesSecondaryIP checks if the CNI in use attaches secondary interfaces to the host. func (c *NodeupModelContext) UsesSecondaryIP() bool { return (c.NodeupConfig.Networking.CNI != nil && c.NodeupConfig.Networking.CNI.UsesSecondaryIP) || diff --git a/nodeup/pkg/model/kubelet.go b/nodeup/pkg/model/kubelet.go index cd95af9fff..9123b6ad3b 100644 --- a/nodeup/pkg/model/kubelet.go +++ b/nodeup/pkg/model/kubelet.go @@ -158,7 +158,7 @@ func (b *KubeletBuilder) Build(c *fi.NodeupModelBuilderContext) error { return err } - if b.Cluster.UsesExternalECRCredentialsProvider() { + if b.UseExternalECRCredentialsProvider() { if err := b.addECRCP(c); err != nil { return fmt.Errorf("failed to add ECR credential provider: %w", err) } @@ -346,7 +346,7 @@ func (b *KubeletBuilder) buildSystemdEnvironmentFile(kubeletConfig *kops.Kubelet flags += " --config=" + kubeletConfigFilePath - if b.Cluster.UsesExternalECRCredentialsProvider() { + if b.UseExternalECRCredentialsProvider() { flags += " --image-credential-provider-config=" + credentialProviderConfigFilePath flags += " --image-credential-provider-bin-dir=" + b.binaryPath() } diff --git a/pkg/apis/kops/cluster.go b/pkg/apis/kops/cluster.go index f517e08dfa..a987033bdf 100644 --- a/pkg/apis/kops/cluster.go +++ b/pkg/apis/kops/cluster.go @@ -909,10 +909,6 @@ func (c *Cluster) UsesNoneDNS() bool { return false } -func (c *Cluster) UsesExternalECRCredentialsProvider() bool { - return c.IsKubernetesGTE("1.27") && c.Spec.GetCloudProvider() == CloudProviderAWS -} - func (c *Cluster) APIInternalName() string { return "api.internal." + c.ObjectMeta.Name } diff --git a/pkg/apis/kops/model/features.go b/pkg/apis/kops/model/features.go index 5005f0377a..6829b59fe8 100644 --- a/pkg/apis/kops/model/features.go +++ b/pkg/apis/kops/model/features.go @@ -17,7 +17,9 @@ limitations under the License. package model import ( + "github.com/blang/semver/v4" "k8s.io/kops/pkg/apis/kops" + "k8s.io/kops/pkg/apis/kops/util" ) // UseKopsControllerForNodeBootstrap is true if nodeup should use kops-controller for bootstrapping. @@ -69,3 +71,7 @@ func UseCiliumEtcd(cluster *kops.Cluster) bool { return false } + +func UseExternalECRCredentialsProvider(k8sVersion semver.Version, cloudProvider kops.CloudProviderID) bool { + return util.IsKubernetesGTE("1.27", k8sVersion) && cloudProvider == kops.CloudProviderAWS +} diff --git a/upup/pkg/fi/cloudup/apply_cluster.go b/upup/pkg/fi/cloudup/apply_cluster.go index dd9eb377e8..cc4a63a026 100644 --- a/upup/pkg/fi/cloudup/apply_cluster.go +++ b/upup/pkg/fi/cloudup/apply_cluster.go @@ -1054,7 +1054,8 @@ func (c *ApplyClusterCmd) addFileAssets(assetBuilder *assets.AssetBuilder) error c.Assets[arch] = append(c.Assets[arch], mirrors.BuildMirroredAsset(u, hash)) } - if c.Cluster.UsesExternalECRCredentialsProvider() { + kubernetesVersion, _ := util.ParseKubernetesVersion(c.Cluster.Spec.KubernetesVersion) + if apiModel.UseExternalECRCredentialsProvider(*kubernetesVersion, c.Cluster.Spec.GetCloudProvider()) { binaryLocation := c.Cluster.Spec.CloudProvider.AWS.BinariesLocation if binaryLocation == nil { binaryLocation = fi.PtrTo("https://artifacts.k8s.io/binaries/cloud-provider-aws/v1.27.1")