Skip to content

Commit d00e45b

Browse files
authored
Merge pull request #18200 from hakman/fix-side-loading
fix: use KOPS_BASE_URL image version when side-loading
2 parents 29e2e54 + b49f425 commit d00e45b

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

pkg/commands/toolbox_enroll.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import (
5252
"k8s.io/kops/pkg/model"
5353
"k8s.io/kops/pkg/model/resources"
5454
"k8s.io/kops/pkg/nodemodel"
55+
"k8s.io/kops/pkg/nodemodel/wellknownassets"
5556
"k8s.io/kops/pkg/wellknownservices"
5657
"k8s.io/kops/upup/pkg/fi"
5758
"k8s.io/kops/upup/pkg/fi/cloudup"
@@ -96,6 +97,12 @@ func RunToolboxEnroll(ctx context.Context, f commandutils.Factory, out io.Writer
9697
return fmt.Errorf("host is required")
9798
}
9899

100+
// Resolve KOPS_BASE_URL early so that kops.Version is overridden
101+
// before the version downgrade check in ApplyClusterCmd.Run.
102+
if _, err := wellknownassets.BaseURL(); err != nil {
103+
return err
104+
}
105+
99106
clientset, err := f.KopsClient()
100107
if err != nil {
101108
return err

pkg/nodemodel/wellknownassets/kopsassets.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ func BaseURL() (*url.URL, error) {
6767
return nil, fmt.Errorf("unable to parse env var KOPS_BASE_URL %q as a url: %v", baseURLString, err)
6868
}
6969
klog.Warningf("Using base url from env var: KOPS_BASE_URL=%q", baseURLString)
70+
71+
// The last path component of KOPS_BASE_URL is the artifact version.
72+
// Override kops.Version so image tags in manifests match the sideloaded images.
73+
if v := path.Base(kopsBaseURL.Path); v != "" && v != "." && v != "/" && v != kops.Version {
74+
klog.Infof("Overriding kops version from KOPS_BASE_URL: %q -> %q", kops.Version, v)
75+
kops.Version = v
76+
}
7077
}
7178

7279
return copyBaseURL(kopsBaseURL)

pkg/nodemodel/wellknownassets/kopsassets_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,66 @@ import (
2727
"k8s.io/kops/util/pkg/hashing"
2828
)
2929

30+
func TestBaseURL_OverridesVersionFromKopsBaseURL(t *testing.T) {
31+
origVersion := kops.Version
32+
t.Cleanup(func() {
33+
kops.Version = origVersion
34+
kopsBaseURL = nil
35+
})
36+
37+
tests := []struct {
38+
name string
39+
kopsBaseURL string
40+
expectedVersion string
41+
}{
42+
{
43+
name: "postsubmit URL",
44+
kopsBaseURL: "https://storage.googleapis.com/k8s-staging-kops/kops/releases/1.35.0-beta.2+v1.35.0-beta.1-384-gf369c3ab16",
45+
expectedVersion: "1.35.0-beta.2+v1.35.0-beta.1-384-gf369c3ab16",
46+
},
47+
{
48+
name: "postsubmit URL with trailing slash",
49+
kopsBaseURL: "https://storage.googleapis.com/k8s-staging-kops/kops/releases/1.35.0-beta.2+v1.35.0-beta.1-384-gf369c3ab16/",
50+
expectedVersion: "1.35.0-beta.2+v1.35.0-beta.1-384-gf369c3ab16",
51+
},
52+
{
53+
name: "CI URL",
54+
kopsBaseURL: "https://storage.googleapis.com/k8s-staging-kops/kops/ci/1.35.0-beta.2+abc123",
55+
expectedVersion: "1.35.0-beta.2+abc123",
56+
},
57+
{
58+
name: "CI URL with trailing slash",
59+
kopsBaseURL: "https://storage.googleapis.com/k8s-staging-kops/kops/ci/1.35.0-beta.2+abc123/",
60+
expectedVersion: "1.35.0-beta.2+abc123",
61+
},
62+
{
63+
name: "release URL",
64+
kopsBaseURL: "https://artifacts.k8s.io/binaries/kops/1.35.0",
65+
expectedVersion: "1.35.0",
66+
},
67+
{
68+
name: "same version as binary does not override",
69+
kopsBaseURL: fmt.Sprintf("https://example.com/kops/%s", origVersion),
70+
expectedVersion: origVersion,
71+
},
72+
}
73+
for _, tc := range tests {
74+
t.Run(tc.name, func(t *testing.T) {
75+
kops.Version = origVersion
76+
kopsBaseURL = nil
77+
t.Setenv("KOPS_BASE_URL", tc.kopsBaseURL)
78+
79+
_, err := BaseURL()
80+
if err != nil {
81+
t.Fatalf("BaseURL() error: %v", err)
82+
}
83+
if kops.Version != tc.expectedVersion {
84+
t.Errorf("kops.Version = %q, want %q", kops.Version, tc.expectedVersion)
85+
}
86+
})
87+
}
88+
}
89+
3090
func Test_BuildMirroredAsset(t *testing.T) {
3191
tests := []struct {
3292
url string

0 commit comments

Comments
 (0)