From 05092f8389aeb7e95e9009a4fbca07fb62948582 Mon Sep 17 00:00:00 2001 From: Ole Markus With Date: Sat, 30 Jan 2021 08:34:09 +0100 Subject: [PATCH] Add template function returning the latest image Apply suggestions from code review Co-authored-by: Peter Rifel --- docs/operations/cluster_template.md | 12 ++++++++---- pkg/util/templater/BUILD.bazel | 1 + pkg/util/templater/template_functions.go | 7 +++++++ pkg/util/templater/templater_test.go | 5 +++++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/docs/operations/cluster_template.md b/docs/operations/cluster_template.md index bfc302c8cb..2dcbd81a5c 100644 --- a/docs/operations/cluster_template.md +++ b/docs/operations/cluster_template.md @@ -16,8 +16,8 @@ metadata: kops.k8s.io/cluster: {{ '{{.clusterName}}.{{.dnsZone}}' }} name: nodes spec: - image: coreos.com/CoreOS-stable-1409.6.0-hvm - kubernetesVersion: {{ '{{.kubernetesVersion}}' }} + image: {{ ChannelRecommendedImage .cloud .kubernetesVersion }} + kubernetesVersion: {{ '{{ ChannelRecommendedKubernetesUpgradeVersion .kubernetesVersion }}' }} machineType: m4.large maxPrice: "0.5" maxSize: 20 @@ -127,9 +127,13 @@ spec: This function returns the kubernetes version recommended for the running kops version. -##### ChannelRecommendedKopsUpgradeVersion +##### ChannelRecommendedKubernetesUpgradeVersion -This function returns the kubernetes upgrade recommendation given that you run ``. Typically this is the latest minor version supported by the given channel. +This function returns the recommended kubernetes version given that you currently run ``. Typically this is the latest patch version supported by the given channel. + +##### ChannelRecommendedImage + +This function returns the recommended image for the given cloud provider and kubernetes version. #### Sprig functions diff --git a/pkg/util/templater/BUILD.bazel b/pkg/util/templater/BUILD.bazel index 87b96665be..58de4dd77c 100644 --- a/pkg/util/templater/BUILD.bazel +++ b/pkg/util/templater/BUILD.bazel @@ -13,6 +13,7 @@ go_library( "//pkg/apis/kops:go_default_library", "//pkg/apis/kops/util:go_default_library", "//vendor/github.com/Masterminds/sprig/v3:go_default_library", + "//vendor/github.com/blang/semver/v4:go_default_library", ], ) diff --git a/pkg/util/templater/template_functions.go b/pkg/util/templater/template_functions.go index bac7fac431..2f9e2010e4 100644 --- a/pkg/util/templater/template_functions.go +++ b/pkg/util/templater/template_functions.go @@ -20,6 +20,7 @@ import ( "text/template" "github.com/Masterminds/sprig/v3" + "github.com/blang/semver/v4" "k8s.io/kops" kopsapi "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/apis/kops/util" @@ -62,5 +63,11 @@ func (r *Templater) templateFuncsMap(tm *template.Template) template.FuncMap { } + funcs["ChannelRecommendedImage"] = func(cloud, k8sVersion string) string { + ver, _ := semver.ParseTolerant(k8sVersion) + imageSpec := r.channel.FindImage(kopsapi.CloudProviderID(cloud), ver) + return imageSpec.Name + } + return funcs } diff --git a/pkg/util/templater/templater_test.go b/pkg/util/templater/templater_test.go index f557cf0eaf..38663a3b6b 100644 --- a/pkg/util/templater/templater_test.go +++ b/pkg/util/templater/templater_test.go @@ -95,6 +95,11 @@ func TestRenderChannelFunctions(t *testing.T) { Template: `{{ ChannelRecommendedKubernetesUpgradeVersion "1.4.2" }}`, Expected: "1.4.8", }, + { + Context: map[string]interface{}{}, + Template: `{{ ChannelRecommendedImage "aws" "1.4.2" }}`, + Expected: "kope.io/k8s-1.4-debian-jessie-amd64-hvm-ebs-2016-10-21", + }, } makeRenderTests(t, cases) }