Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions cmd/kops/create_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (

"github.com/golang/glog"
"github.com/spf13/cobra"
"k8s.io/kops"
"k8s.io/kops/cmd/kops/util"
api "k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/apis/kops/registry"
Expand Down Expand Up @@ -228,6 +229,11 @@ func RunCreateCluster(f *util.Factory, out io.Writer, c *CreateClusterOptions) e

if channel.Spec.Cluster != nil {
cluster.Spec = *channel.Spec.Cluster

kubernetesVersion := api.RecommendedKubernetesVersion(channel, kops.Version)
if kubernetesVersion != nil {
cluster.Spec.KubernetesVersion = kubernetesVersion.String()
}
}
cluster.Spec.Channel = c.Channel

Expand Down
3 changes: 2 additions & 1 deletion cmd/kops/upgrade_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/blang/semver"
"github.com/golang/glog"
"github.com/spf13/cobra"
"k8s.io/kops"
api "k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/apis/kops/util"
"k8s.io/kops/pkg/apis/kops/validation"
Expand Down Expand Up @@ -140,7 +141,7 @@ func (c *UpgradeClusterCmd) Run(args []string) error {
}
}

proposedKubernetesVersion := api.RecommendedKubernetesVersion(channel)
proposedKubernetesVersion := api.RecommendedKubernetesVersion(channel, kops.Version)

// We won't propose a downgrade
// TODO: What if a kubernetes version is bad?
Expand Down
4 changes: 1 addition & 3 deletions pkg/apis/kops/channel.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
"fmt"
"github.com/blang/semver"
"github.com/golang/glog"
"k8s.io/kops"
"k8s.io/kops/pkg/apis/kops/util"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/util/pkg/vfs"
Expand Down Expand Up @@ -276,8 +275,7 @@ func (c *Channel) FindImage(provider fi.CloudProviderID, kubernetesVersion semve
return matches[0]
}

func RecommendedKubernetesVersion(c *Channel) *semver.Version {
kopsVersionString := kops.Version
func RecommendedKubernetesVersion(c *Channel, kopsVersionString string) *semver.Version {
kopsVersion, err := semver.ParseTolerant(kopsVersionString)
if err != nil {
glog.Warningf("unable to parse kops version %q", kopsVersionString)
Expand Down
54 changes: 54 additions & 0 deletions tests/integration/channel/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,60 @@ func TestFindImage(t *testing.T) {
}
}

// TestRecommendedKubernetesVersion tests the version logic kubernetes kops versions
func TestRecommendedKubernetesVersion(t *testing.T) {
srcDir := "simple"
sourcePath := path.Join(srcDir, "channel.yaml")
sourceBytes, err := ioutil.ReadFile(sourcePath)
if err != nil {
t.Fatalf("unexpected error reading sourcePath %q: %v", sourcePath, err)
}

channel, err := kops.ParseChannel(sourceBytes)
if err != nil {
t.Fatalf("failed to parse channel: %v", err)
}

grid := []struct {
KopsVersion string
ExpectedKubernetesVersion string
}{
{
KopsVersion: "1.4.4",
ExpectedKubernetesVersion: "1.4.8",
},
{
KopsVersion: "1.4.5",
ExpectedKubernetesVersion: "1.4.8",
},
{
KopsVersion: "1.5.0",
ExpectedKubernetesVersion: "1.5.2",
},
{
KopsVersion: "1.5.0-beta2",
ExpectedKubernetesVersion: "1.5.0",
},
}
for _, g := range grid {
kubernetesVersion := kops.RecommendedKubernetesVersion(channel, g.KopsVersion)
if semverString(kubernetesVersion) != g.ExpectedKubernetesVersion {
t.Errorf("unexpected result from RecommendedKubernetesVersion(%q): expected=%q, actual=%q", g.KopsVersion, g.ExpectedKubernetesVersion, semverString(kubernetesVersion))
continue
}
}
}

func TestOrdering(t *testing.T) {
if !semver.MustParse("1.5.0").GTE(semver.MustParse("1.5.0-alpha1")) {
t.Fatalf("Expected: 1.5.0 >= 1.5.0-alpha1")
}

if !semver.MustParseRange(">=1.5.0-alpha1")(semver.MustParse("1.5.0")) {
t.Fatalf("Expected: '>=1.5.0-alpha1' to include 1.5.0")
}
}

func semverString(sv *semver.Version) string {
if sv == nil {
return ""
Expand Down
4 changes: 3 additions & 1 deletion tests/integration/channel/simple/channel.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@ spec:
- range: ">=1.5.0"
recommendedVersion: 1.5.1
requiredVersion: 1.5.0
kubernetesVersion: 1.5.2
- range: ">=1.5.0-alpha1"
recommendedVersion: 1.5.0-beta1
requiredVersion: 1.5.0-beta1
kubernetesVersion: 1.5.0
- range: "<1.5.0"
recommendedVersion: 1.4.5
requiredVersion: 1.4.5

kubernetesVersion: 1.4.8
9 changes: 8 additions & 1 deletion upup/pkg/fi/cloudup/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import (
"k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/util/pkg/vfs"
"strings"

kopsversion "k8s.io/kops"
)

// PerformAssignments populates values that are required and immutable
Expand Down Expand Up @@ -91,10 +93,15 @@ func ensureKubernetesVersion(c *kops.Cluster) error {
if err != nil {
return err
}
kubernetesVersion := kops.RecommendedKubernetesVersion(channel)
kubernetesVersion := kops.RecommendedKubernetesVersion(channel, kopsversion.Version)
if kubernetesVersion != nil {
c.Spec.KubernetesVersion = kubernetesVersion.String()
glog.Infof("Using KubernetesVersion %q from channel %q", c.Spec.KubernetesVersion, c.Spec.Channel)
} else {
glog.Warningf("Cannot determine recommended kubernetes version from channel %q", c.Spec.Channel)
}
} else {
glog.Warningf("Channel is not set; cannot determine KubernetesVersion from channel")
}
}

Expand Down
3 changes: 2 additions & 1 deletion upup/pkg/kutil/convert_kubeup_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/aws/aws-sdk-go/service/autoscaling"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/golang/glog"
"k8s.io/kops"
api "k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/apis/kops/registry"
"k8s.io/kops/pkg/client/simple"
Expand Down Expand Up @@ -87,7 +88,7 @@ func (x *ConvertKubeupCluster) Upgrade() error {

// Set KubernetesVersion from channel
if x.Channel != nil {
kubernetesVersion := api.RecommendedKubernetesVersion(x.Channel)
kubernetesVersion := api.RecommendedKubernetesVersion(x.Channel, kops.Version)
if kubernetesVersion != nil {
cluster.Spec.KubernetesVersion = kubernetesVersion.String()
}
Expand Down