Skip to content

Commit ad91eb1

Browse files
committed
create cluster: take correct k8s version
We were not overriding the cluster version, even when a kubernetes version could be determined from the direct specifications.
1 parent 3dfcc6d commit ad91eb1

File tree

7 files changed

+76
-7
lines changed

7 files changed

+76
-7
lines changed

cmd/kops/create_cluster.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
"github.com/golang/glog"
2828
"github.com/spf13/cobra"
29+
"k8s.io/kops"
2930
"k8s.io/kops/cmd/kops/util"
3031
api "k8s.io/kops/pkg/apis/kops"
3132
"k8s.io/kops/pkg/apis/kops/registry"
@@ -228,6 +229,11 @@ func RunCreateCluster(f *util.Factory, out io.Writer, c *CreateClusterOptions) e
228229

229230
if channel.Spec.Cluster != nil {
230231
cluster.Spec = *channel.Spec.Cluster
232+
233+
kubernetesVersion := api.RecommendedKubernetesVersion(channel, kops.Version)
234+
if kubernetesVersion != nil {
235+
cluster.Spec.KubernetesVersion = kubernetesVersion.String()
236+
}
231237
}
232238
cluster.Spec.Channel = c.Channel
233239

cmd/kops/upgrade_cluster.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/blang/semver"
2424
"github.com/golang/glog"
2525
"github.com/spf13/cobra"
26+
"k8s.io/kops"
2627
api "k8s.io/kops/pkg/apis/kops"
2728
"k8s.io/kops/pkg/apis/kops/util"
2829
"k8s.io/kops/pkg/apis/kops/validation"
@@ -140,7 +141,7 @@ func (c *UpgradeClusterCmd) Run(args []string) error {
140141
}
141142
}
142143

143-
proposedKubernetesVersion := api.RecommendedKubernetesVersion(channel)
144+
proposedKubernetesVersion := api.RecommendedKubernetesVersion(channel, kops.Version)
144145

145146
// We won't propose a downgrade
146147
// TODO: What if a kubernetes version is bad?

pkg/apis/kops/channel.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"fmt"
2121
"github.com/blang/semver"
2222
"github.com/golang/glog"
23-
"k8s.io/kops"
2423
"k8s.io/kops/pkg/apis/kops/util"
2524
"k8s.io/kops/upup/pkg/fi"
2625
"k8s.io/kops/util/pkg/vfs"
@@ -276,8 +275,7 @@ func (c *Channel) FindImage(provider fi.CloudProviderID, kubernetesVersion semve
276275
return matches[0]
277276
}
278277

279-
func RecommendedKubernetesVersion(c *Channel) *semver.Version {
280-
kopsVersionString := kops.Version
278+
func RecommendedKubernetesVersion(c *Channel, kopsVersionString string) *semver.Version {
281279
kopsVersion, err := semver.ParseTolerant(kopsVersionString)
282280
if err != nil {
283281
glog.Warningf("unable to parse kops version %q", kopsVersionString)

tests/integration/channel/integration_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,60 @@ func TestFindImage(t *testing.T) {
250250
}
251251
}
252252

253+
// TestRecommendedKubernetesVersion tests the version logic kubernetes kops versions
254+
func TestRecommendedKubernetesVersion(t *testing.T) {
255+
srcDir := "simple"
256+
sourcePath := path.Join(srcDir, "channel.yaml")
257+
sourceBytes, err := ioutil.ReadFile(sourcePath)
258+
if err != nil {
259+
t.Fatalf("unexpected error reading sourcePath %q: %v", sourcePath, err)
260+
}
261+
262+
channel, err := kops.ParseChannel(sourceBytes)
263+
if err != nil {
264+
t.Fatalf("failed to parse channel: %v", err)
265+
}
266+
267+
grid := []struct {
268+
KopsVersion string
269+
ExpectedKubernetesVersion string
270+
}{
271+
{
272+
KopsVersion: "1.4.4",
273+
ExpectedKubernetesVersion: "1.4.8",
274+
},
275+
{
276+
KopsVersion: "1.4.5",
277+
ExpectedKubernetesVersion: "1.4.8",
278+
},
279+
{
280+
KopsVersion: "1.5.0",
281+
ExpectedKubernetesVersion: "1.5.2",
282+
},
283+
{
284+
KopsVersion: "1.5.0-beta2",
285+
ExpectedKubernetesVersion: "1.5.0",
286+
},
287+
}
288+
for _, g := range grid {
289+
kubernetesVersion := kops.RecommendedKubernetesVersion(channel, g.KopsVersion)
290+
if semverString(kubernetesVersion) != g.ExpectedKubernetesVersion {
291+
t.Errorf("unexpected result from RecommendedKubernetesVersion(%q): expected=%q, actual=%q", g.KopsVersion, g.ExpectedKubernetesVersion, semverString(kubernetesVersion))
292+
continue
293+
}
294+
}
295+
}
296+
297+
func TestOrdering(t *testing.T) {
298+
if !semver.MustParse("1.5.0").GTE(semver.MustParse("1.5.0-alpha1")) {
299+
t.Fatalf("Expected: 1.5.0 >= 1.5.0-alpha1")
300+
}
301+
302+
if !semver.MustParseRange(">=1.5.0-alpha1")(semver.MustParse("1.5.0")) {
303+
t.Fatalf("Expected: '>=1.5.0-alpha1' to include 1.5.0")
304+
}
305+
}
306+
253307
func semverString(sv *semver.Version) string {
254308
if sv == nil {
255309
return ""

tests/integration/channel/simple/channel.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ spec:
2222
- range: ">=1.5.0"
2323
recommendedVersion: 1.5.1
2424
requiredVersion: 1.5.0
25+
kubernetesVersion: 1.5.2
2526
- range: ">=1.5.0-alpha1"
2627
recommendedVersion: 1.5.0-beta1
2728
requiredVersion: 1.5.0-beta1
29+
kubernetesVersion: 1.5.0
2830
- range: "<1.5.0"
2931
recommendedVersion: 1.4.5
3032
requiredVersion: 1.4.5
31-
33+
kubernetesVersion: 1.4.8

upup/pkg/fi/cloudup/defaults.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222
"k8s.io/kops/pkg/apis/kops"
2323
"k8s.io/kops/util/pkg/vfs"
2424
"strings"
25+
26+
kopsversion "k8s.io/kops"
2527
)
2628

2729
// PerformAssignments populates values that are required and immutable
@@ -91,10 +93,15 @@ func ensureKubernetesVersion(c *kops.Cluster) error {
9193
if err != nil {
9294
return err
9395
}
94-
kubernetesVersion := kops.RecommendedKubernetesVersion(channel)
96+
kubernetesVersion := kops.RecommendedKubernetesVersion(channel, kopsversion.Version)
9597
if kubernetesVersion != nil {
9698
c.Spec.KubernetesVersion = kubernetesVersion.String()
99+
glog.Infof("Using KubernetesVersion %q from channel %q", c.Spec.KubernetesVersion, c.Spec.Channel)
100+
} else {
101+
glog.Warningf("Cannot determine recommended kubernetes version from channel %q", c.Spec.Channel)
97102
}
103+
} else {
104+
glog.Warningf("Channel is not set; cannot determine KubernetesVersion from channel")
98105
}
99106
}
100107

upup/pkg/kutil/convert_kubeup_cluster.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/aws/aws-sdk-go/service/autoscaling"
2323
"github.com/aws/aws-sdk-go/service/ec2"
2424
"github.com/golang/glog"
25+
"k8s.io/kops"
2526
api "k8s.io/kops/pkg/apis/kops"
2627
"k8s.io/kops/pkg/apis/kops/registry"
2728
"k8s.io/kops/pkg/client/simple"
@@ -87,7 +88,7 @@ func (x *ConvertKubeupCluster) Upgrade() error {
8788

8889
// Set KubernetesVersion from channel
8990
if x.Channel != nil {
90-
kubernetesVersion := api.RecommendedKubernetesVersion(x.Channel)
91+
kubernetesVersion := api.RecommendedKubernetesVersion(x.Channel, kops.Version)
9192
if kubernetesVersion != nil {
9293
cluster.Spec.KubernetesVersion = kubernetesVersion.String()
9394
}

0 commit comments

Comments
 (0)