Support the latest Helm (>=v3.3.2) and bump the Helm version in Docker image. (#1488)

Changes:

* Bump Helm to v2.16.12 and v3.3.3.
* Add --force-update only when using Helm 3.
This commit is contained in:
Wi1dcard 2020-09-21 08:41:49 +08:00 committed by GitHub
parent 028bcc51dc
commit 988c218096
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 23 additions and 19 deletions

View File

@ -95,7 +95,7 @@ jobs:
- run: - run:
name: Install helm name: Install helm
environment: environment:
HELM_VERSION: v2.16.1 HELM_VERSION: v2.16.12
command: | command: |
HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
curl -Lo ${HELM_FILENAME} "https://kubernetes-helm.storage.googleapis.com/${HELM_FILENAME}" curl -Lo ${HELM_FILENAME} "https://kubernetes-helm.storage.googleapis.com/${HELM_FILENAME}"
@ -153,7 +153,7 @@ jobs:
- run: - run:
name: Install helm name: Install helm
environment: environment:
HELM_VERSION: v3.1.0 HELM_VERSION: v3.3.3
command: | command: |
HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
curl -Lo ${HELM_FILENAME} "https://get.helm.sh/${HELM_FILENAME}" curl -Lo ${HELM_FILENAME} "https://get.helm.sh/${HELM_FILENAME}"

View File

@ -11,10 +11,10 @@ FROM alpine:3.11
RUN apk add --no-cache ca-certificates git bash curl jq RUN apk add --no-cache ca-certificates git bash curl jq
ARG HELM_VERSION=v2.16.1 ARG HELM_VERSION=v2.16.12
ARG HELM_LOCATION="https://kubernetes-helm.storage.googleapis.com" ARG HELM_LOCATION="https://kubernetes-helm.storage.googleapis.com"
ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
ARG HELM_SHA256="7eebaaa2da4734242bbcdced62cc32ba8c7164a18792c8acdf16c77abffce202" ARG HELM_SHA256="756ab375314329b66b452c0f9d569f74b0760141670217c07b79890ad314c214"
RUN wget ${HELM_LOCATION}/${HELM_FILENAME} && \ RUN wget ${HELM_LOCATION}/${HELM_FILENAME} && \
echo Verifying ${HELM_FILENAME}... && \ echo Verifying ${HELM_FILENAME}... && \
sha256sum ${HELM_FILENAME} | grep -q "${HELM_SHA256}" && \ sha256sum ${HELM_FILENAME} | grep -q "${HELM_SHA256}" && \

View File

@ -11,10 +11,10 @@ FROM alpine:3.11
RUN apk add --no-cache ca-certificates git bash curl jq RUN apk add --no-cache ca-certificates git bash curl jq
ARG HELM_VERSION=v3.2.1 ARG HELM_VERSION=v3.3.3
ARG HELM_LOCATION="https://get.helm.sh" ARG HELM_LOCATION="https://get.helm.sh"
ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
ARG HELM_SHA256="018f9908cb950701a5d59e757653a790c66d8eda288625dbb185354ca6f41f6b" ARG HELM_SHA256="246d58b6b353e63ae8627415a7340089015e3eb542ff7b5ce124b0b1409369cc"
RUN wget ${HELM_LOCATION}/${HELM_FILENAME} && \ RUN wget ${HELM_LOCATION}/${HELM_FILENAME} && \
echo Verifying ${HELM_FILENAME}... && \ echo Verifying ${HELM_FILENAME}... && \
sha256sum ${HELM_FILENAME} | grep -q "${HELM_SHA256}" && \ sha256sum ${HELM_FILENAME} | grep -q "${HELM_SHA256}" && \

View File

@ -2462,7 +2462,7 @@ func (helm *mockHelmExec) GetVersion() helmexec.Version {
return helmexec.Version{} return helmexec.Version{}
} }
func (helm *mockHelmExec) IsVersionAtLeast(major int, minor int) bool { func (helm *mockHelmExec) IsVersionAtLeast(major int, minor int, patch int) bool {
return false return false
} }

View File

@ -97,7 +97,7 @@ func (helm *noCallHelmExec) GetVersion() helmexec.Version {
return helmexec.Version{} return helmexec.Version{}
} }
func (helm *noCallHelmExec) IsVersionAtLeast(major int, minor int) bool { func (helm *noCallHelmExec) IsVersionAtLeast(major int, minor int, patch int) bool {
helm.doPanic() helm.doPanic()
return false return false
} }

View File

@ -170,12 +170,12 @@ func (helm *Helm) GetVersion() helmexec.Version {
return helmexec.Version{} return helmexec.Version{}
} }
func (helm *Helm) IsVersionAtLeast(major int, minor int) bool { func (helm *Helm) IsVersionAtLeast(major int, minor int, patch int) bool {
if helm.Version == nil { if helm.Version == nil {
return false return false
} }
return helm.Version.Major >= major && minor >= helm.Version.Minor return helm.Version.Major >= major && minor >= helm.Version.Minor && patch >= helm.Version.Patch
} }
func (helm *Helm) sync(m *sync.Mutex, f func()) { func (helm *Helm) sync(m *sync.Mutex, f func()) {

View File

@ -130,6 +130,9 @@ func (helm *execer) AddRepo(name, repository, cafile, certfile, keyfile, usernam
return fmt.Errorf("empty field name") return fmt.Errorf("empty field name")
} }
args = append(args, "repo", "add", name, repository) args = append(args, "repo", "add", name, repository)
if helm.IsHelm3() && helm.IsVersionAtLeast(3, 3, 2) {
args = append(args, "--force-update")
}
if certfile != "" && keyfile != "" { if certfile != "" && keyfile != "" {
args = append(args, "--cert-file", certfile, "--key-file", keyfile) args = append(args, "--cert-file", certfile, "--key-file", keyfile)
} }
@ -398,6 +401,6 @@ func (helm *execer) GetVersion() Version {
return helm.version return helm.version
} }
func (helm *execer) IsVersionAtLeast(major int, minor int) bool { func (helm *execer) IsVersionAtLeast(major int, minor int, patch int) bool {
return helm.version.Major >= major && helm.version.Minor >= minor return helm.version.Major >= major && helm.version.Minor >= minor && helm.version.Patch >= patch
} }

View File

@ -557,15 +557,15 @@ func Test_GetVersion(t *testing.T) {
func Test_IsVersionAtLeast(t *testing.T) { func Test_IsVersionAtLeast(t *testing.T) {
helm2Runner := mockRunner{output: []byte("Client: v2.16.1+ge13bc94\n")} helm2Runner := mockRunner{output: []byte("Client: v2.16.1+ge13bc94\n")}
helm := New("helm", NewLogger(os.Stdout, "info"), "dev", &helm2Runner) helm := New("helm", NewLogger(os.Stdout, "info"), "dev", &helm2Runner)
if !helm.IsVersionAtLeast(2, 1) { if !helm.IsVersionAtLeast(2, 1, 0) {
t.Error("helmexec.IsVersionAtLeast - 2.16.1 not atleast 2.1") t.Error("helmexec.IsVersionAtLeast - 2.16.1 not atleast 2.1")
} }
if helm.IsVersionAtLeast(2, 19) { if helm.IsVersionAtLeast(2, 19, 0) {
t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 2.19") t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 2.19")
} }
if helm.IsVersionAtLeast(3, 2) { if helm.IsVersionAtLeast(3, 2, 0) {
t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 3.2") t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 3.2")
} }

View File

@ -28,7 +28,7 @@ type Interface interface {
DecryptSecret(context HelmContext, name string, flags ...string) (string, error) DecryptSecret(context HelmContext, name string, flags ...string) (string, error)
IsHelm3() bool IsHelm3() bool
GetVersion() Version GetVersion() Version
IsVersionAtLeast(major int, minor int) bool IsVersionAtLeast(major int, minor int, patch int) bool
} }
type DependencyUpdater interface { type DependencyUpdater interface {

View File

@ -6,8 +6,6 @@ import (
"encoding/hex" "encoding/hex"
"errors" "errors"
"fmt" "fmt"
"github.com/imdario/mergo"
"golang.org/x/sync/errgroup"
"io" "io"
"io/ioutil" "io/ioutil"
"os" "os"
@ -20,6 +18,9 @@ import (
"sync" "sync"
"text/template" "text/template"
"github.com/imdario/mergo"
"golang.org/x/sync/errgroup"
"github.com/variantdev/chartify" "github.com/variantdev/chartify"
"github.com/roboll/helmfile/pkg/environment" "github.com/roboll/helmfile/pkg/environment"
@ -2063,7 +2064,7 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
if release.CreateNamespace != nil && *release.CreateNamespace || if release.CreateNamespace != nil && *release.CreateNamespace ||
release.CreateNamespace == nil && (st.HelmDefaults.CreateNamespace == nil || *st.HelmDefaults.CreateNamespace) { release.CreateNamespace == nil && (st.HelmDefaults.CreateNamespace == nil || *st.HelmDefaults.CreateNamespace) {
if helm.IsVersionAtLeast(3, 2) { if helm.IsVersionAtLeast(3, 2, 0) {
flags = append(flags, "--create-namespace") flags = append(flags, "--create-namespace")
} else if release.CreateNamespace != nil || st.HelmDefaults.CreateNamespace != nil { } else if release.CreateNamespace != nil || st.HelmDefaults.CreateNamespace != nil {
// createNamespace was set explicitly, but not running supported version of helm - error // createNamespace was set explicitly, but not running supported version of helm - error