Drop Helm v2 support (#613)
Resolves #589 Signed-off-by: xiaomudk <xiaomudk@gmail.com>
This commit is contained in:
parent
1f134d931f
commit
c4eb62388b
|
|
@ -178,8 +178,6 @@ lockFilePath: path/to/lock.file
|
|||
# In other words, unset values results in no flags passed to helm.
|
||||
# See the helm usage (helm SUBCOMMAND -h) for more info on default values when those flags aren't provided.
|
||||
helmDefaults:
|
||||
tillerNamespace: tiller-namespace #dedicated default key for tiller-namespace
|
||||
tillerless: false #dedicated default key for tillerless
|
||||
kubeContext: kube-context #dedicated default key for kube-context (--kube-context)
|
||||
cleanupOnFail: false #dedicated default key for helm flag --cleanup-on-fail
|
||||
# additional and global args passed to helm (default "")
|
||||
|
|
@ -289,10 +287,6 @@ releases:
|
|||
atomic: true
|
||||
# when true, cleans up any new resources created during a failed release (default false)
|
||||
cleanupOnFail: false
|
||||
# name of the tiller namespace (default "")
|
||||
tillerNamespace: vault
|
||||
# if true, will use the helm-tiller plugin (default false)
|
||||
tillerless: false
|
||||
# enable TLS for request to Tiller (default false)
|
||||
tls: true
|
||||
# path to TLS CA certificate file (default "$HELM_HOME/ca.pem")
|
||||
|
|
@ -1008,13 +1002,6 @@ environments:
|
|||
- http://$HOSTNAME/artifactory/example-repo-local/test.tgz@environments/production.secret.yaml
|
||||
```
|
||||
|
||||
## Tillerless
|
||||
|
||||
With the [helm-tiller](https://github.com/rimusz/helm-tiller) plugin installed, you can work without tiller installed.
|
||||
|
||||
To enable this mode, you need to define `tillerless: true` and set the `tillerNamespace` in the `helmDefaults` section
|
||||
or in the `releases` entries.
|
||||
|
||||
## DAG-aware installation/deletion ordering with `needs`
|
||||
|
||||
`needs` controls the order of the installation/deletion of the release:
|
||||
|
|
|
|||
|
|
@ -112,8 +112,8 @@ releases:
|
|||
|
||||
Release Templating supports the following parts of release definition:
|
||||
- basic fields: `name`, `namespace`, `chart`, `version`
|
||||
- boolean fields: `installed`, `wait`, `waitForJobs`, `tillerless`, `verify` by the means of additional text
|
||||
fields designed for templating only: `installedTemplate`, `waitTemplate`, `tillerlessTemplate`, `verifyTemplate`
|
||||
- boolean fields: `installed`, `wait`, `waitForJobs`, `verify` by the means of additional text
|
||||
fields designed for templating only: `installedTemplate`, `waitTemplate`, `verifyTemplate`
|
||||
```yaml
|
||||
# ...
|
||||
installedTemplate: '{{`{{ eq .Release.Namespace "kube-system" }}`}}'
|
||||
|
|
@ -328,7 +328,6 @@ Where the gotmpl file loaded in the second part looks like:
|
|||
|
||||
```yaml
|
||||
helmDefaults:
|
||||
tillerNamespace: kube-system
|
||||
kubeContext: {{ .Values.kubeContext }}
|
||||
verify: false
|
||||
{{ if .Values.wait }}
|
||||
|
|
@ -347,7 +346,6 @@ So in `mydefaults.yaml.gotmpl`, both `.Values.kubeContext` and `.Values.wait` ar
|
|||
|
||||
```yaml
|
||||
helmDefaults:
|
||||
tillerNamespace: kube-system
|
||||
kubeContext: test
|
||||
verify: false
|
||||
wait: false
|
||||
|
|
|
|||
|
|
@ -232,10 +232,7 @@ func (a *App) Template(c TemplateConfigProvider) error {
|
|||
// Live output should never be enabled for the "template" subcommand to avoid breaking `helmfile template | kubectl apply -f -`
|
||||
run.helm.SetEnableLiveOutput(false)
|
||||
|
||||
// `helm template` in helm v2 does not support local chart.
|
||||
// So, we set forceDownload=true for helm v2 only
|
||||
prepErr := run.withPreparedCharts("template", state.ChartPrepareOptions{
|
||||
ForceDownload: !run.helm.IsHelm3(),
|
||||
SkipRepos: c.SkipDeps(),
|
||||
SkipDeps: c.SkipDeps(),
|
||||
IncludeCRDs: &includeCRDs,
|
||||
|
|
@ -257,14 +254,11 @@ func (a *App) Template(c TemplateConfigProvider) error {
|
|||
|
||||
func (a *App) WriteValues(c WriteValuesConfigProvider) error {
|
||||
return a.ForEachState(func(run *Run) (ok bool, errs []error) {
|
||||
// `helm template` in helm v2 does not support local chart.
|
||||
// So, we set forceDownload=true for helm v2 only
|
||||
prepErr := run.withPreparedCharts("write-values", state.ChartPrepareOptions{
|
||||
ForceDownload: !run.helm.IsHelm3(),
|
||||
SkipRepos: c.SkipDeps(),
|
||||
SkipDeps: c.SkipDeps(),
|
||||
SkipCleanup: c.SkipCleanup(),
|
||||
Concurrency: c.Concurrency(),
|
||||
SkipRepos: c.SkipDeps(),
|
||||
SkipDeps: c.SkipDeps(),
|
||||
SkipCleanup: c.SkipCleanup(),
|
||||
Concurrency: c.Concurrency(),
|
||||
}, func() {
|
||||
ok, errs = a.writeValues(run, c)
|
||||
})
|
||||
|
|
@ -497,7 +491,7 @@ func (a *App) Destroy(c DestroyConfigProvider) error {
|
|||
|
||||
func (a *App) Test(c TestConfigProvider) error {
|
||||
return a.ForEachState(func(run *Run) (_ bool, errs []error) {
|
||||
if c.Cleanup() && run.helm.IsHelm3() {
|
||||
if c.Cleanup() {
|
||||
a.Logger.Warnf("warn: requested cleanup will not be applied. " +
|
||||
"To clean up test resources with Helm 3, you have to remove them manually " +
|
||||
"or set helm.sh/hook-delete-policy\n")
|
||||
|
|
@ -1056,7 +1050,7 @@ func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converg
|
|||
f := converge
|
||||
if opts.Filter {
|
||||
f = func(st *state.HelmState) (bool, []error) {
|
||||
return processFilteredReleases(st, a.getHelm(st), func(st *state.HelmState) []error {
|
||||
return processFilteredReleases(st, func(st *state.HelmState) []error {
|
||||
_, err := converge(st)
|
||||
return err
|
||||
},
|
||||
|
|
@ -1073,7 +1067,7 @@ func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converg
|
|||
return a.visitStates(fileOrDir, opts, fHelmStatsWithOverrides)
|
||||
}
|
||||
|
||||
func processFilteredReleases(st *state.HelmState, helm helmexec.Interface, converge func(st *state.HelmState) []error, includeTransitiveNeeds bool) (bool, []error) {
|
||||
func processFilteredReleases(st *state.HelmState, converge func(st *state.HelmState) []error, includeTransitiveNeeds bool) (bool, []error) {
|
||||
if len(st.Selectors) > 0 {
|
||||
err := st.FilterReleases(includeTransitiveNeeds)
|
||||
if err != nil {
|
||||
|
|
@ -1081,7 +1075,7 @@ func processFilteredReleases(st *state.HelmState, helm helmexec.Interface, conve
|
|||
}
|
||||
}
|
||||
|
||||
if err := checkDuplicates(helm, st, st.Releases); err != nil {
|
||||
if err := checkDuplicates(st.Releases); err != nil {
|
||||
return false, []error{err}
|
||||
}
|
||||
|
||||
|
|
@ -1092,7 +1086,7 @@ func processFilteredReleases(st *state.HelmState, helm helmexec.Interface, conve
|
|||
return processed, errs
|
||||
}
|
||||
|
||||
func checkDuplicates(helm helmexec.Interface, st *state.HelmState, releases []state.ReleaseSpec) error {
|
||||
func checkDuplicates(releases []state.ReleaseSpec) error {
|
||||
type Key struct {
|
||||
TillerNamespace, Name, KubeContext string
|
||||
}
|
||||
|
|
@ -1100,13 +1094,6 @@ func checkDuplicates(helm helmexec.Interface, st *state.HelmState, releases []st
|
|||
releaseNameCounts := map[Key]int{}
|
||||
for _, r := range releases {
|
||||
namespace := r.Namespace
|
||||
if !helm.IsHelm3() {
|
||||
if r.TillerNamespace != "" {
|
||||
namespace = r.TillerNamespace
|
||||
} else {
|
||||
namespace = st.HelmDefaults.TillerNamespace
|
||||
}
|
||||
}
|
||||
releaseNameCounts[Key{namespace, r.Name, r.KubeContext}]++
|
||||
}
|
||||
for name, c := range releaseNameCounts {
|
||||
|
|
@ -1130,7 +1117,7 @@ func checkDuplicates(helm helmexec.Interface, st *state.HelmState, releases []st
|
|||
|
||||
func (a *App) Wrap(converge func(*state.HelmState, helmexec.Interface) []error) func(st *state.HelmState, helm helmexec.Interface, includeTransitiveNeeds bool) (bool, []error) {
|
||||
return func(st *state.HelmState, helm helmexec.Interface, includeTransitiveNeeds bool) (bool, []error) {
|
||||
return processFilteredReleases(st, helm, func(st *state.HelmState) []error {
|
||||
return processFilteredReleases(st, func(st *state.HelmState) []error {
|
||||
return converge(st, helm)
|
||||
}, includeTransitiveNeeds)
|
||||
}
|
||||
|
|
@ -1268,7 +1255,7 @@ func (a *App) getSelectedReleases(r *Run, includeTransitiveNeeds bool) ([]state.
|
|||
}
|
||||
}
|
||||
|
||||
if err := checkDuplicates(r.helm, r.state, deduplicated); err != nil {
|
||||
if err := checkDuplicates(deduplicated); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ func TestApply_hooks(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, tc.logLevel, func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
@ -387,10 +388,10 @@ releases:
|
|||
},
|
||||
selectors: []string{"app=test"},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -437,10 +438,10 @@ releases:
|
|||
},
|
||||
selectors: []string{"app=test"},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: ``,
|
||||
{Filter: "^bar$", Flags: listFlags("default", "default")}: ``,
|
||||
},
|
||||
upgraded: []exectest.Release{
|
||||
{Name: "foo"},
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ func TestApply_3(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
@ -183,10 +184,10 @@ releases:
|
|||
{Name: "my-release", Chart: "incubator/raw", Flags: "--namespacedefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -231,7 +232,7 @@ releases:
|
|||
{Name: "external-secrets", Flags: []string{"--namespace", "default"}},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
^external-secrets$ 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -285,13 +286,13 @@ releases:
|
|||
{Name: "my-release", Chart: "incubator/raw", Flags: "--namespacedefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
kubernetes-external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -341,10 +342,10 @@ releases:
|
|||
{Name: "my-release", Chart: "incubator/raw", Flags: "--namespacedefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -390,13 +391,13 @@ releases:
|
|||
selectors: []string{"app=test"},
|
||||
upgraded: []exectest.Release{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
kubernetes-external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -446,11 +447,11 @@ releases:
|
|||
selectors: []string{"app=test"},
|
||||
upgraded: []exectest.Release{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: ``,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "")}: ``,
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ func TestApply_2(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
@ -183,10 +184,10 @@ releases:
|
|||
{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -231,7 +232,7 @@ releases:
|
|||
{Name: "external-secrets", Flags: []string{"--kube-context", "default", "--namespace", "default"}},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
^external-secrets$ 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -285,13 +286,13 @@ releases:
|
|||
{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
kubernetes-external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -341,10 +342,10 @@ releases:
|
|||
{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -390,13 +391,13 @@ releases:
|
|||
selectors: []string{"app=test"},
|
||||
upgraded: []exectest.Release{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
kubernetes-external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -446,11 +447,11 @@ releases:
|
|||
selectors: []string{"app=test"},
|
||||
upgraded: []exectest.Release{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlags}: ``,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "default")}: ``,
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -501,13 +502,13 @@ releases:
|
|||
{Name: "serviceC", Chart: "my/chart", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^serviceA$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^serviceA$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
serviceA 4 Fri Nov 1 08:40:07 2019 DEPLOYED chart-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^serviceB$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^serviceB$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
serviceB 4 Fri Nov 1 08:40:07 2019 DEPLOYED chart-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^serviceC$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^serviceC$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
serviceC 4 Fri Nov 1 08:40:07 2019 DEPLOYED chart-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -646,7 +647,7 @@ releases:
|
|||
{Name: "foo", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -712,7 +713,7 @@ releases:
|
|||
{Name: "foo", Chart: "incubator/raw", Flags: "--kube-contextdefault--namespacedefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ func TestDiffWithNeeds(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
@ -316,6 +317,7 @@ func TestDiffWithInstalled(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
@ -385,7 +387,7 @@ releases:
|
|||
`,
|
||||
selectors: []string{"name=a"},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^a$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^a$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -409,7 +411,7 @@ releases:
|
|||
`,
|
||||
selectors: []string{"name=a"},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^a$", Flags: helmV2ListFlags}: ``,
|
||||
{Filter: "^a$", Flags: listFlags("default", "default")}: ``,
|
||||
},
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ func TestLint(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ func TestSync(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
@ -175,10 +176,10 @@ releases:
|
|||
{Name: "my-release", Flags: []string{"--kube-context", "default", "--namespace", "default"}},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -306,13 +307,13 @@ releases:
|
|||
selectors: []string{"app=test"},
|
||||
upgraded: []exectest.Release{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
kubernetes-external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -440,13 +441,13 @@ releases:
|
|||
selectors: []string{"name=serviceA"},
|
||||
upgraded: []exectest.Release{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^serviceC$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^serviceC$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
serviceC 4 Fri Nov 1 08:40:07 2019 DEPLOYED chart-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^serviceB$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^serviceB$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
serviceB 4 Fri Nov 1 08:40:07 2019 DEPLOYED chart-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^serviceA$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^serviceA$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
serviceA 4 Fri Nov 1 08:40:07 2019 DEPLOYED chart-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -572,13 +573,13 @@ releases:
|
|||
selectors: []string{"app=test"},
|
||||
upgraded: []exectest.Release{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
kubernetes-external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -721,11 +722,11 @@ releases:
|
|||
upgraded: []exectest.Release{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
// delete frontend-v1 and backend-v1
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: helmV2ListFlags}: ``,
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "default")}: ``,
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ func TestTemplate(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
@ -236,7 +237,7 @@ releases:
|
|||
},
|
||||
selectors: []string{"name=test2"},
|
||||
templated: []exectest.Release{
|
||||
{Name: "test2", Flags: []string(nil)},
|
||||
{Name: "test2", Flags: []string{}},
|
||||
},
|
||||
})
|
||||
})
|
||||
|
|
@ -249,8 +250,8 @@ releases:
|
|||
},
|
||||
selectors: []string{"name=test3"},
|
||||
templated: []exectest.Release{
|
||||
{Name: "test2", Flags: []string(nil)},
|
||||
{Name: "test3", Flags: []string(nil)},
|
||||
{Name: "test2", Flags: []string{}},
|
||||
{Name: "test3", Flags: []string{}},
|
||||
},
|
||||
})
|
||||
})
|
||||
|
|
@ -264,8 +265,8 @@ releases:
|
|||
},
|
||||
selectors: []string{"name=test3"},
|
||||
templated: []exectest.Release{
|
||||
{Name: "test2", Flags: []string(nil)},
|
||||
{Name: "test3", Flags: []string(nil)},
|
||||
{Name: "test2", Flags: []string{}},
|
||||
{Name: "test3", Flags: []string{}},
|
||||
},
|
||||
})
|
||||
})
|
||||
|
|
@ -279,7 +280,7 @@ releases:
|
|||
},
|
||||
selectors: []string{"name=test2"},
|
||||
templated: []exectest.Release{
|
||||
{Name: "test2", Flags: []string(nil)},
|
||||
{Name: "test2", Flags: []string{}},
|
||||
},
|
||||
})
|
||||
})
|
||||
|
|
@ -293,8 +294,8 @@ releases:
|
|||
},
|
||||
selectors: []string{"name=test3"},
|
||||
templated: []exectest.Release{
|
||||
{Name: "test2", Flags: []string(nil)},
|
||||
{Name: "test3", Flags: []string(nil)},
|
||||
{Name: "test2", Flags: []string{}},
|
||||
{Name: "test3", Flags: []string{}},
|
||||
},
|
||||
})
|
||||
})
|
||||
|
|
@ -330,6 +331,7 @@ func TestTemplate_StrictParsing(t *testing.T) {
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
_ = runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
|
|||
|
|
@ -48,16 +48,16 @@ func injectFs(app *App, fs *testhelper.TestFs) *App {
|
|||
}
|
||||
|
||||
func expectNoCallsToHelm(app *App) {
|
||||
expectNoCallsToHelmVersion(app, false)
|
||||
expectNoCallsToHelmVersion(app)
|
||||
}
|
||||
|
||||
func expectNoCallsToHelmVersion(app *App, isHelm3 bool) {
|
||||
func expectNoCallsToHelmVersion(app *App) {
|
||||
if app.helms != nil {
|
||||
panic("invalid call to expectNoCallsToHelm")
|
||||
}
|
||||
|
||||
app.helms = map[helmKey]helmexec.Interface{
|
||||
createHelmKey(app.OverrideHelmBinary, app.OverrideKubeContext): &versionOnlyHelmExec{isHelm3: isHelm3},
|
||||
createHelmKey(app.OverrideHelmBinary, app.OverrideKubeContext): &versionOnlyHelmExec{isHelm3: true},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -461,8 +461,6 @@ releases:
|
|||
chart: stable/prometheus
|
||||
`,
|
||||
"/path/to/helmfile.d/b.yaml": `
|
||||
helmDefaults:
|
||||
tillerNamespace: zoo
|
||||
releases:
|
||||
- name: grafana
|
||||
chart: stable/grafana
|
||||
|
|
@ -488,12 +486,12 @@ releases:
|
|||
duplicatedCtx: yes
|
||||
- name: bar
|
||||
chart: charts/foo
|
||||
tillerNamespace: bar1
|
||||
namespace: bar1
|
||||
labels:
|
||||
duplicatedOK: yes
|
||||
- name: bar
|
||||
chart: charts/foo
|
||||
tillerNamespace: bar2
|
||||
namespace: bar2
|
||||
labels:
|
||||
duplicatedOK: yes
|
||||
`,
|
||||
|
|
@ -510,14 +508,11 @@ releases:
|
|||
{label: "name!=", expectedCount: 0, expectErr: true, errMsg: "in ./helmfile.yaml: in .helmfiles[0]: in /path/to/helmfile.d/a1.yaml: malformed label: name!=. Expected label in form k=v or k!=v"},
|
||||
{label: "name", expectedCount: 0, expectErr: true, errMsg: "in ./helmfile.yaml: in .helmfiles[0]: in /path/to/helmfile.d/a1.yaml: malformed label: name. Expected label in form k=v or k!=v"},
|
||||
// See https://github.com/roboll/helmfile/issues/193
|
||||
{label: "duplicatedNs=yes", expectedCount: 0, expectErr: true, errMsg: "in ./helmfile.yaml: in .helmfiles[2]: in /path/to/helmfile.d/b.yaml: duplicate release \"foo\" found in namespace \"zoo\" in kubecontext \"default\": there were 2 releases named \"foo\" matching specified selector"},
|
||||
{label: "duplicatedCtx=yes", expectedCount: 0, expectErr: true, errMsg: "in ./helmfile.yaml: in .helmfiles[2]: in /path/to/helmfile.d/b.yaml: duplicate release \"foo\" found in namespace \"zoo\" in kubecontext \"default\": there were 2 releases named \"foo\" matching specified selector"},
|
||||
{label: "duplicatedNs=yes", expectedCount: 0, expectErr: true, errMsg: "in ./helmfile.yaml: in .helmfiles[2]: in /path/to/helmfile.d/b.yaml: duplicate release \"foo\" found in kubecontext \"default\": there were 2 releases named \"foo\" matching specified selector"},
|
||||
{label: "duplicatedCtx=yes", expectedCount: 0, expectErr: true, errMsg: "in ./helmfile.yaml: in .helmfiles[2]: in /path/to/helmfile.d/b.yaml: duplicate release \"foo\" found in kubecontext \"default\": there were 2 releases named \"foo\" matching specified selector"},
|
||||
{label: "duplicatedOK=yes", expectedCount: 2, expectErr: false},
|
||||
}
|
||||
|
||||
for i := range testcases {
|
||||
testcase := testcases[i]
|
||||
|
||||
for _, testcase := range testcases {
|
||||
t.Run(testcase.label, func(t *testing.T) {
|
||||
actual := []string{}
|
||||
|
||||
|
|
@ -594,12 +589,12 @@ releases:
|
|||
chart: stable/grafana
|
||||
- name: bar
|
||||
chart: charts/foo
|
||||
tillerNamespace: bar1
|
||||
namespace: bar1
|
||||
labels:
|
||||
duplicatedOK: yes
|
||||
- name: bar
|
||||
chart: charts/foo
|
||||
tillerNamespace: bar2
|
||||
namespace: bar2
|
||||
labels:
|
||||
duplicatedOK: yes
|
||||
`,
|
||||
|
|
@ -812,46 +807,39 @@ helmfiles:
|
|||
- path: helmfile.d/c*.yaml
|
||||
values:
|
||||
- env.values.yaml
|
||||
- tillerNs: INLINE_TILLER_NS_3
|
||||
`,
|
||||
"/path/to/helmfile.d/a1.yaml": `
|
||||
environments:
|
||||
default:
|
||||
values:
|
||||
- tillerNs: INLINE_TILLER_NS
|
||||
ns: INLINE_NS
|
||||
- ns: INLINE_NS
|
||||
releases:
|
||||
- name: foo
|
||||
chart: stable/zipkin
|
||||
tillerNamespace: {{ .Environment.Values.tillerNs }}
|
||||
namespace: {{ .Environment.Values.ns }}
|
||||
`,
|
||||
"/path/to/helmfile.d/b.yaml": `
|
||||
environments:
|
||||
default:
|
||||
values:
|
||||
- tillerNs: INLINE_TILLER_NS
|
||||
ns: INLINE_NS
|
||||
- ns: INLINE_NS
|
||||
releases:
|
||||
- name: bar
|
||||
chart: stable/grafana
|
||||
tillerNamespace: {{ .Environment.Values.tillerNs }}
|
||||
namespace: {{ .Environment.Values.ns }}
|
||||
`,
|
||||
"/path/to/helmfile.d/c.yaml": `
|
||||
environments:
|
||||
default:
|
||||
values:
|
||||
- tillerNs: INLINE_TILLER_NS
|
||||
ns: INLINE_NS
|
||||
- ns: INLINE_NS
|
||||
releases:
|
||||
- name: baz
|
||||
chart: stable/envoy
|
||||
tillerNamespace: {{ .Environment.Values.tillerNs }}
|
||||
namespace: {{ .Environment.Values.ns }}
|
||||
`,
|
||||
"/path/to/env.values.yaml": `
|
||||
tillerNs: INLINE_TILLER_NS_2
|
||||
ns: INLINE_NS
|
||||
`,
|
||||
}
|
||||
|
||||
|
|
@ -885,15 +873,14 @@ tillerNs: INLINE_TILLER_NS_2
|
|||
}
|
||||
|
||||
type release struct {
|
||||
chart string
|
||||
tillerNs string
|
||||
ns string
|
||||
chart string
|
||||
ns string
|
||||
}
|
||||
|
||||
expectedReleases := map[string]release{
|
||||
"foo": {"stable/zipkin", "INLINE_TILLER_NS_2", "INLINE_NS"},
|
||||
"bar": {"stable/grafana", "INLINE_TILLER_NS", "INLINE_NS"},
|
||||
"baz": {"stable/envoy", "INLINE_TILLER_NS_3", "INLINE_NS"},
|
||||
"foo": {"stable/zipkin", "INLINE_NS"},
|
||||
"bar": {"stable/grafana", "INLINE_NS"},
|
||||
"baz": {"stable/envoy", "INLINE_NS"},
|
||||
}
|
||||
|
||||
for name := range processed {
|
||||
|
|
@ -908,10 +895,6 @@ tillerNs: INLINE_TILLER_NS_2
|
|||
t.Errorf("unexpected chart: expected=%s, got=%s", expected.chart, actual.Chart)
|
||||
}
|
||||
|
||||
if expected.tillerNs != actual.TillerNamespace {
|
||||
t.Errorf("unexpected tiller namespace: expected=%s, got=%s", expected.tillerNs, actual.TillerNamespace)
|
||||
}
|
||||
|
||||
if expected.ns != actual.Namespace {
|
||||
t.Errorf("unexpected namespace: expected=%s, got=%s", expected.ns, actual.Namespace)
|
||||
}
|
||||
|
|
@ -1288,95 +1271,6 @@ releases:
|
|||
}
|
||||
}
|
||||
|
||||
// See https://github.com/roboll/helmfile/issues/1213
|
||||
func TestVisitDesiredStatesWithReleases_DuplicateReleasesHelm2(t *testing.T) {
|
||||
files := map[string]string{
|
||||
"/path/to/helmfile.yaml": `
|
||||
releases:
|
||||
- name: foo
|
||||
namespace: foo
|
||||
chart: charts/foo
|
||||
- name: foo
|
||||
namespace: bar
|
||||
chart: charts/foo
|
||||
`,
|
||||
}
|
||||
|
||||
actual := []state.ReleaseSpec{}
|
||||
|
||||
collectReleases := func(run *Run) (bool, []error) {
|
||||
actual = append(actual, run.state.Releases...)
|
||||
return false, []error{}
|
||||
}
|
||||
app := appWithFs(&App{
|
||||
OverrideHelmBinary: DefaultHelmBinary,
|
||||
OverrideKubeContext: "default",
|
||||
Logger: newAppTestLogger(),
|
||||
Namespace: "",
|
||||
Env: "default",
|
||||
FileOrDir: "helmfile.yaml",
|
||||
}, files)
|
||||
|
||||
expectNoCallsToHelmVersion(app, false)
|
||||
|
||||
err := app.ForEachState(
|
||||
collectReleases,
|
||||
false,
|
||||
SetFilter(true),
|
||||
)
|
||||
|
||||
expected := "in ./helmfile.yaml: duplicate release \"foo\" found in kubecontext \"default\": there were 2 releases named \"foo\" matching specified selector"
|
||||
if err == nil {
|
||||
t.Errorf("error expected but not happened")
|
||||
} else if err.Error() != expected {
|
||||
t.Errorf("unexpected error message: expected=\"%s\", actual=\"%s\"", expected, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// See https://github.com/roboll/helmfile/issues/1213
|
||||
func TestVisitDesiredStatesWithReleases_NoDuplicateReleasesHelm2(t *testing.T) {
|
||||
files := map[string]string{
|
||||
"/path/to/helmfile.yaml": `
|
||||
releases:
|
||||
- name: foo
|
||||
namespace: foo
|
||||
tillerNamespace: tns1
|
||||
chart: charts/foo
|
||||
- name: foo
|
||||
namespace: bar
|
||||
tillerNamespace: tns2
|
||||
chart: charts/foo
|
||||
`,
|
||||
}
|
||||
|
||||
actual := []state.ReleaseSpec{}
|
||||
|
||||
collectReleases := func(run *Run) (bool, []error) {
|
||||
actual = append(actual, run.state.Releases...)
|
||||
return false, []error{}
|
||||
}
|
||||
app := appWithFs(&App{
|
||||
OverrideHelmBinary: DefaultHelmBinary,
|
||||
OverrideKubeContext: "default",
|
||||
Logger: newAppTestLogger(),
|
||||
Namespace: "",
|
||||
Env: "default",
|
||||
FileOrDir: "helmfile.yaml",
|
||||
}, files)
|
||||
|
||||
expectNoCallsToHelmVersion(app, false)
|
||||
|
||||
err := app.ForEachState(
|
||||
collectReleases,
|
||||
false,
|
||||
SetFilter(true),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// See https://github.com/roboll/helmfile/issues/1213
|
||||
func TestVisitDesiredStatesWithReleases_NoDuplicateReleasesHelm3(t *testing.T) {
|
||||
files := map[string]string{
|
||||
|
|
@ -1406,7 +1300,7 @@ releases:
|
|||
FileOrDir: "helmfile.yaml",
|
||||
}, files)
|
||||
|
||||
expectNoCallsToHelmVersion(app, true)
|
||||
expectNoCallsToHelmVersion(app)
|
||||
|
||||
err := app.ForEachState(
|
||||
collectReleases,
|
||||
|
|
@ -1448,7 +1342,7 @@ releases:
|
|||
FileOrDir: "helmfile.yaml",
|
||||
}, files)
|
||||
|
||||
expectNoCallsToHelmVersion(app, true)
|
||||
expectNoCallsToHelmVersion(app)
|
||||
|
||||
err := app.ForEachState(
|
||||
collectReleases,
|
||||
|
|
@ -1494,7 +1388,7 @@ releases:
|
|||
FileOrDir: "helmfile.yaml",
|
||||
}, files)
|
||||
|
||||
expectNoCallsToHelmVersion(app, true)
|
||||
expectNoCallsToHelmVersion(app)
|
||||
|
||||
err := app.ForEachState(
|
||||
collectReleases,
|
||||
|
|
@ -1580,7 +1474,6 @@ releases:
|
|||
- environments/default/2.yaml
|
||||
|
||||
helmDefaults:
|
||||
tillerNamespace: {{ .Environment.Values.tillerNs }}
|
||||
`,
|
||||
"/path/to/yaml/environments/default/2.yaml": `tillerNs: TILLER_NS`,
|
||||
"/path/to/yaml/templates.yaml": `templates:
|
||||
|
|
@ -1605,10 +1498,6 @@ helmDefaults:
|
|||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if st.HelmDefaults.TillerNamespace != "TILLER_NS" {
|
||||
t.Errorf("unexpected helmDefaults.tillerNamespace: expected=TILLER_NS, got=%s", st.HelmDefaults.TillerNamespace)
|
||||
}
|
||||
|
||||
if *st.Releases[1].MissingFileHandler != "Warn" {
|
||||
t.Errorf("unexpected releases[0].missingFileHandler: expected=Warn, got=%s", *st.Releases[1].MissingFileHandler)
|
||||
}
|
||||
|
|
@ -1666,7 +1555,6 @@ releases:
|
|||
- environments/default/2.yaml
|
||||
|
||||
helmDefaults:
|
||||
tillerNamespace: {{ .Environment.Values.tillerNs }}
|
||||
`,
|
||||
"/path/to/yaml/environments/default/2.yaml": `tillerNs: TILLER_NS`,
|
||||
"/path/to/yaml/templates.yaml": `templates:
|
||||
|
|
@ -1690,9 +1578,6 @@ helmDefaults:
|
|||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if st.HelmDefaults.TillerNamespace != "TILLER_NS" {
|
||||
t.Errorf("unexpected helmDefaults.tillerNamespace: expected=TILLER_NS, got=%s", st.HelmDefaults.TillerNamespace)
|
||||
}
|
||||
firstRelease := st.Releases[0]
|
||||
if firstRelease.Name != "myrelease1" {
|
||||
t.Errorf("unexpected releases[1].name: expected=myrelease1, got=%s", firstRelease.Name)
|
||||
|
|
@ -1740,7 +1625,6 @@ releases:
|
|||
`,
|
||||
"/path/to/base.gotmpl": `helmDefaults:
|
||||
kubeContext: {{ .Environment.Values.foo }}
|
||||
tillerNamespace: {{ .Environment.Values.tillerNs }}
|
||||
`,
|
||||
"/path/to/yaml/environments/default/1.yaml": `tillerNs: TILLER_NS
|
||||
foo: FOO
|
||||
|
|
@ -1766,10 +1650,6 @@ foo: FOO
|
|||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if st.HelmDefaults.TillerNamespace != "TILLER_NS" {
|
||||
t.Errorf("unexpected helmDefaults.tillerNamespace: expected=TILLER_NS, got=%s", st.HelmDefaults.TillerNamespace)
|
||||
}
|
||||
|
||||
if st.Releases[0].Name != "myrelease0" {
|
||||
t.Errorf("unexpected releases[0].name: expected=myrelease0, got=%s", st.Releases[0].Name)
|
||||
}
|
||||
|
|
@ -1803,7 +1683,6 @@ releases:
|
|||
`,
|
||||
"/path/to/base.gotmpl": `helmDefaults:
|
||||
kubeContext: {{ .Environment.Values.foo }}
|
||||
tillerNamespace: {{ .Environment.Values.tillerNs }}
|
||||
`,
|
||||
"/path/to/yaml/environments/default/1.yaml": `tillerNs: TILLER_NS
|
||||
foo: FOO
|
||||
|
|
@ -1829,10 +1708,6 @@ foo: FOO
|
|||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if st.HelmDefaults.TillerNamespace != "INLINE_TILLER_NS" {
|
||||
t.Errorf("unexpected helmDefaults.tillerNamespace: expected=TILLER_NS, got=%s", st.HelmDefaults.TillerNamespace)
|
||||
}
|
||||
|
||||
if st.Releases[0].Name != "myrelease0" {
|
||||
t.Errorf("unexpected releases[0].name: expected=myrelease0, got=%s", st.Releases[0].Name)
|
||||
}
|
||||
|
|
@ -1886,7 +1761,6 @@ releases:
|
|||
- environments/default/2.yaml
|
||||
|
||||
helmDefaults:
|
||||
tillerNamespace: {{ .Environment.Values.tillerNs }}
|
||||
`,
|
||||
"/path/to/yaml/environments/default/2.yaml": `tillerNs: TILLER_NS`,
|
||||
"/path/to/yaml/templates.yaml": `templates:
|
||||
|
|
@ -1910,10 +1784,6 @@ helmDefaults:
|
|||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if st.HelmDefaults.TillerNamespace != "TILLER_NS" {
|
||||
t.Errorf("unexpected helmDefaults.tillerNamespace: expected=TILLER_NS, got=%s", st.HelmDefaults.TillerNamespace)
|
||||
}
|
||||
|
||||
firstRelease := st.Releases[0]
|
||||
if firstRelease.Name != "myrelease1" {
|
||||
t.Errorf("unexpected releases[1].name: expected=myrelease1, got=%s", firstRelease.Name)
|
||||
|
|
@ -2614,7 +2484,7 @@ func (helm *mockHelmExec) Lint(name, chart string, flags ...string) error {
|
|||
return nil
|
||||
}
|
||||
func (helm *mockHelmExec) IsHelm3() bool {
|
||||
return false
|
||||
return true
|
||||
}
|
||||
|
||||
func (helm *mockHelmExec) GetVersion() helmexec.Version {
|
||||
|
|
@ -2880,31 +2750,31 @@ releases:
|
|||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
// delete frontend-v1 and backend-v1
|
||||
{Filter: "^logging$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^logging$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
logging 4 Fri Nov 1 08:40:07 2019 DEPLOYED fluent-bit-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^front-proxy$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^front-proxy$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
front-proxy 4 Fri Nov 1 08:40:07 2019 DEPLOYED envoy-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^database$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^database$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
database 4 Fri Nov 1 08:40:07 2019 DEPLOYED mysql-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^servicemesh$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^servicemesh$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
servicemesh 4 Fri Nov 1 08:40:07 2019 DEPLOYED istio-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^anotherbackend$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^anotherbackend$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
anotherbackend 4 Fri Nov 1 08:40:07 2019 DEPLOYED anotherbackend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v1 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^frontend-v3$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v3$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v3 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
backend-v1 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^backend-v2$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v2$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
backend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -2945,8 +2815,8 @@ releases:
|
|||
{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: nil,
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: ``,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: ``,
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3014,11 +2884,11 @@ releases:
|
|||
{Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: ``,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: ``,
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^baz$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^baz$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
baz 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart3-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3058,11 +2928,11 @@ releases:
|
|||
{Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: ``,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: ``,
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^baz$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^baz$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
baz 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart3-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3221,71 +3091,6 @@ releases:
|
|||
{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns2"}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "helm2 upgrade when tns1/foo needs tns2/bar",
|
||||
loc: location(),
|
||||
|
||||
files: map[string]string{
|
||||
"/path/to/helmfile.yaml": `
|
||||
releases:
|
||||
- name: foo
|
||||
chart: stable/mychart1
|
||||
namespace: ns1
|
||||
tillerNamespace: tns1
|
||||
needs:
|
||||
- tns2/bar
|
||||
- name: bar
|
||||
chart: stable/mychart2
|
||||
namespace: ns2
|
||||
tillerNamespace: tns2
|
||||
`,
|
||||
},
|
||||
diffs: map[exectest.DiffKey]error{
|
||||
{Name: "bar", Chart: "stable/mychart2", Flags: "--tiller-namespacetns2--kube-contextdefault--namespacens2--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
{Name: "foo", Chart: "stable/mychart1", Flags: "--tiller-namespacetns1--kube-contextdefault--namespacens1--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
upgraded: []exectest.Release{
|
||||
{Name: "bar", Flags: []string{"--tiller-namespace", "tns2", "--kube-context", "default", "--namespace", "ns2"}},
|
||||
{Name: "foo", Flags: []string{"--tiller-namespace", "tns1", "--kube-context", "default", "--namespace", "ns1"}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "helm2 upgrade when tns2/bar needs tns1/foo",
|
||||
loc: location(),
|
||||
files: map[string]string{
|
||||
"/path/to/helmfile.yaml": `
|
||||
releases:
|
||||
- name: bar
|
||||
chart: stable/mychart2
|
||||
namespace: ns2
|
||||
tillerNamespace: tns2
|
||||
needs:
|
||||
- tns1/foo
|
||||
- name: foo
|
||||
chart: stable/mychart1
|
||||
namespace: ns1
|
||||
tillerNamespace: tns1
|
||||
`,
|
||||
},
|
||||
diffs: map[exectest.DiffKey]error{
|
||||
{Name: "bar", Chart: "stable/mychart2", Flags: "--tiller-namespacetns2--kube-contextdefault--namespacens2--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
{Name: "foo", Chart: "stable/mychart1", Flags: "--tiller-namespacetns1--kube-contextdefault--namespacens1--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
upgraded: []exectest.Release{
|
||||
{Name: "foo", Flags: []string{"--tiller-namespace", "tns1", "--kube-context", "default", "--namespace", "ns1"}},
|
||||
{Name: "bar", Flags: []string{"--tiller-namespace", "tns2", "--kube-context", "default", "--namespace", "ns2"}},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: "--tiller-namespacetns1" + helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: "--tiller-namespacetns2" + helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
|
||||
concurrency: 1,
|
||||
},
|
||||
//
|
||||
// deletes: deleting all releases in the correct order
|
||||
//
|
||||
|
|
@ -3310,10 +3115,10 @@ releases:
|
|||
{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3343,10 +3148,10 @@ releases:
|
|||
{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3378,10 +3183,10 @@ releases:
|
|||
{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3412,10 +3217,10 @@ releases:
|
|||
{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3446,10 +3251,10 @@ releases:
|
|||
{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3480,10 +3285,10 @@ releases:
|
|||
{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3540,10 +3345,10 @@ releases:
|
|||
{Name: "my-release", Flags: []string{"--kube-context", "default", "--namespace", "default"}},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^external-secrets$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
external-secrets 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^my-release$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^my-release$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -3972,8 +3777,7 @@ changing working directory back to "/path/to"
|
|||
},
|
||||
}
|
||||
|
||||
for i := range testcases {
|
||||
tc := testcases[i]
|
||||
for _, tc := range testcases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
wantUpgrades := tc.upgraded
|
||||
wantDeletes := tc.deleted
|
||||
|
|
@ -3986,6 +3790,7 @@ changing working directory back to "/path/to"
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
@ -4142,13 +3947,13 @@ changing working directory back to "/path/to"
|
|||
},
|
||||
}
|
||||
|
||||
for i := range testcases {
|
||||
tc := testcases[i]
|
||||
for _, tc := range testcases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
var helm = &exectest.Helm{
|
||||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
|
|||
|
|
@ -5,28 +5,17 @@ import (
|
|||
)
|
||||
|
||||
type Context struct {
|
||||
updatedRepos map[string]bool
|
||||
updatedReposV2 map[string]bool
|
||||
updatedRepos map[string]bool
|
||||
}
|
||||
|
||||
func NewContext() Context {
|
||||
return Context{
|
||||
updatedRepos: map[string]bool{},
|
||||
updatedReposV2: map[string]bool{},
|
||||
updatedRepos: map[string]bool{},
|
||||
}
|
||||
}
|
||||
|
||||
func (ctx Context) SyncReposOnce(st *state.HelmState, helm state.RepoUpdater) error {
|
||||
var (
|
||||
updated []string
|
||||
err error
|
||||
)
|
||||
|
||||
if helm.IsHelm3() {
|
||||
updated, err = st.SyncRepos(helm, ctx.updatedRepos)
|
||||
} else {
|
||||
updated, err = st.SyncRepos(helm, ctx.updatedReposV2)
|
||||
}
|
||||
updated, err := st.SyncRepos(helm, ctx.updatedRepos)
|
||||
|
||||
for _, r := range updated {
|
||||
ctx.updatedRepos[r] = true
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import (
|
|||
|
||||
func TestDestroy_2(t *testing.T) {
|
||||
type testcase struct {
|
||||
helm3 bool
|
||||
ns string
|
||||
concurrency int
|
||||
error string
|
||||
|
|
@ -35,7 +34,7 @@ func TestDestroy_2(t *testing.T) {
|
|||
wantDeletes := tc.deleted
|
||||
|
||||
var helm = &exectest.Helm{
|
||||
Helm3: tc.helm3,
|
||||
Helm3: true,
|
||||
FailOnUnexpectedList: true,
|
||||
FailOnUnexpectedDiff: true,
|
||||
Lists: tc.lists,
|
||||
|
|
@ -209,32 +208,32 @@ releases:
|
|||
files: files,
|
||||
diffs: map[exectest.DiffKey]error{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^frontend-v2$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v2$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^frontend-v3$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v3$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v3 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^backend-v2$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v2$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
backend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^logging$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^logging$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
logging 4 Fri Nov 1 08:40:07 2019 DEPLOYED fluent-bit-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^front-proxy$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^front-proxy$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
front-proxy 4 Fri Nov 1 08:40:07 2019 DEPLOYED envoy-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^servicemesh$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^servicemesh$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
servicemesh 4 Fri Nov 1 08:40:07 2019 DEPLOYED istio-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^database$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^database$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
database 4 Fri Nov 1 08:40:07 2019 DEPLOYED mysql-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^anotherbackend$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^anotherbackend$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
anotherbackend 4 Fri Nov 1 08:40:07 2019 DEPLOYED anotherbackend-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -426,32 +425,32 @@ changing working directory back to "/path/to"
|
|||
selectors: []string{"name=logging"},
|
||||
diffs: map[exectest.DiffKey]error{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^frontend-v2$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v2$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^frontend-v3$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v3$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v3 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^backend-v2$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v2$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
backend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^logging$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^logging$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
logging 4 Fri Nov 1 08:40:07 2019 DEPLOYED fluent-bit-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^front-proxy$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^front-proxy$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
front-proxy 4 Fri Nov 1 08:40:07 2019 DEPLOYED envoy-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^servicemesh$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^servicemesh$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
servicemesh 4 Fri Nov 1 08:40:07 2019 DEPLOYED istio-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^database$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^database$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
database 4 Fri Nov 1 08:40:07 2019 DEPLOYED mysql-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^anotherbackend$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^anotherbackend$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
anotherbackend 4 Fri Nov 1 08:40:07 2019 DEPLOYED anotherbackend-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -607,9 +606,9 @@ changing working directory back to "/path/to"
|
|||
files: filesForTwoReleases,
|
||||
diffs: map[exectest.DiffKey]error{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
},
|
||||
// Disable concurrency to avoid in-deterministic result
|
||||
|
|
@ -675,7 +674,6 @@ changing working directory back to "/path/to"
|
|||
|
||||
t.Run("helm3", func(t *testing.T) {
|
||||
check(t, testcase{
|
||||
helm3: true,
|
||||
files: filesForTwoReleases,
|
||||
diffs: map[exectest.DiffKey]error{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package app
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
|
|
@ -14,12 +15,23 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
helmV2ListFlags = "--kube-contextdefault--deleting--deployed--failed--pending"
|
||||
helmV2ListFlagsWithoutKubeContext = "--deleting--deployed--failed--pending"
|
||||
helmV3ListFlags = "--kube-contextdefault--uninstalling--deployed--failed--pending"
|
||||
helmV3ListFlagsWithoutKubeContext = "--uninstalling--deployed--failed--pending"
|
||||
)
|
||||
|
||||
func listFlags(namespace, kubeContext string) string {
|
||||
var flags []string
|
||||
if kubeContext != "" {
|
||||
flags = append(flags, "--kube-context", kubeContext)
|
||||
}
|
||||
if namespace != "" {
|
||||
flags = append(flags, "--namespace", namespace)
|
||||
}
|
||||
flags = append(flags, "--uninstalling--deployed--failed--pending")
|
||||
|
||||
return strings.Join(flags, "")
|
||||
}
|
||||
|
||||
type destroyConfig struct {
|
||||
args string
|
||||
concurrency int
|
||||
|
|
@ -55,7 +67,6 @@ func (d destroyConfig) IncludeTransitiveNeeds() bool {
|
|||
|
||||
func TestDestroy(t *testing.T) {
|
||||
type testcase struct {
|
||||
helm3 bool
|
||||
ns string
|
||||
concurrency int
|
||||
error string
|
||||
|
|
@ -75,7 +86,7 @@ func TestDestroy(t *testing.T) {
|
|||
wantDeletes := tc.deleted
|
||||
|
||||
var helm = &exectest.Helm{
|
||||
Helm3: tc.helm3,
|
||||
Helm3: true,
|
||||
FailOnUnexpectedList: true,
|
||||
FailOnUnexpectedDiff: true,
|
||||
Lists: tc.lists,
|
||||
|
|
@ -248,32 +259,32 @@ releases:
|
|||
files: files,
|
||||
diffs: map[exectest.DiffKey]error{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^frontend-v2$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v2$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^frontend-v3$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v3$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v3 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^backend-v2$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v2$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
backend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^logging$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^logging$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
logging 4 Fri Nov 1 08:40:07 2019 DEPLOYED fluent-bit-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^front-proxy$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^front-proxy$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
front-proxy 4 Fri Nov 1 08:40:07 2019 DEPLOYED envoy-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^servicemesh$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^servicemesh$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
servicemesh 4 Fri Nov 1 08:40:07 2019 DEPLOYED istio-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^database$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^database$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
database 4 Fri Nov 1 08:40:07 2019 DEPLOYED mysql-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^anotherbackend$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^anotherbackend$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
anotherbackend 4 Fri Nov 1 08:40:07 2019 DEPLOYED anotherbackend-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -465,32 +476,32 @@ changing working directory back to "/path/to"
|
|||
selectors: []string{"name=logging"},
|
||||
diffs: map[exectest.DiffKey]error{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^frontend-v2$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v2$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^frontend-v3$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v3$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v3 4 Fri Nov 1 08:40:07 2019 DEPLOYED frontend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^backend-v2$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v2$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
backend-v2 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^logging$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^logging$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
logging 4 Fri Nov 1 08:40:07 2019 DEPLOYED fluent-bit-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^front-proxy$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^front-proxy$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
front-proxy 4 Fri Nov 1 08:40:07 2019 DEPLOYED envoy-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^servicemesh$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^servicemesh$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
servicemesh 4 Fri Nov 1 08:40:07 2019 DEPLOYED istio-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^database$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^database$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
database 4 Fri Nov 1 08:40:07 2019 DEPLOYED mysql-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^anotherbackend$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^anotherbackend$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
anotherbackend 4 Fri Nov 1 08:40:07 2019 DEPLOYED anotherbackend-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -646,9 +657,9 @@ changing working directory back to "/path/to"
|
|||
files: filesForTwoReleases,
|
||||
diffs: map[exectest.DiffKey]error{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
},
|
||||
// Disable concurrency to avoid in-deterministic result
|
||||
|
|
@ -714,13 +725,12 @@ changing working directory back to "/path/to"
|
|||
|
||||
t.Run("helm3", func(t *testing.T) {
|
||||
check(t, testcase{
|
||||
helm3: true,
|
||||
files: filesForTwoReleases,
|
||||
diffs: map[exectest.DiffKey]error{},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^frontend-v1$", Flags: helmV3ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV3ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
`,
|
||||
},
|
||||
// Disable concurrency to avoid in-deterministic result
|
||||
|
|
|
|||
|
|
@ -116,10 +116,10 @@ releases:
|
|||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
// delete frontend-v1 and backend-v1
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v1 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
backend-v1 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -152,8 +152,8 @@ releases:
|
|||
{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode--reset-values"}: nil,
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: ``,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: ``,
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -332,61 +332,6 @@ releases:
|
|||
},
|
||||
upgraded: []exectest.Release{},
|
||||
},
|
||||
{
|
||||
name: "helm2 upgrade when tns1 foo needs tns2 bar",
|
||||
loc: location(),
|
||||
|
||||
files: map[string]string{
|
||||
"/path/to/helmfile.yaml": `
|
||||
releases:
|
||||
- name: foo
|
||||
chart: mychart1
|
||||
namespace: ns1
|
||||
tillerNamespace: tns1
|
||||
needs:
|
||||
- tns2/bar
|
||||
- name: bar
|
||||
chart: mychart2
|
||||
namespace: ns2
|
||||
tillerNamespace: tns2
|
||||
`,
|
||||
},
|
||||
detailedExitcode: true,
|
||||
error: "Identified at least one change",
|
||||
diffs: map[exectest.DiffKey]error{
|
||||
{Name: "bar", Chart: "mychart2", Flags: "--tiller-namespacetns2--namespacens2--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
{Name: "foo", Chart: "mychart1", Flags: "--tiller-namespacetns1--namespacens1--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
upgraded: []exectest.Release{},
|
||||
},
|
||||
{
|
||||
name: "helm2 upgrade when tns2 bar needs tns1 foo",
|
||||
loc: location(),
|
||||
files: map[string]string{
|
||||
"/path/to/helmfile.yaml": `
|
||||
releases:
|
||||
- name: bar
|
||||
chart: mychart2
|
||||
namespace: ns2
|
||||
tillerNamespace: tns2
|
||||
needs:
|
||||
- tns1/foo
|
||||
- name: foo
|
||||
chart: mychart1
|
||||
namespace: ns1
|
||||
tillerNamespace: tns1
|
||||
`,
|
||||
},
|
||||
detailedExitcode: true,
|
||||
error: "Identified at least one change",
|
||||
diffs: map[exectest.DiffKey]error{
|
||||
{Name: "bar", Chart: "mychart2", Flags: "--tiller-namespacetns2--namespacens2--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
{Name: "foo", Chart: "mychart1", Flags: "--tiller-namespacetns1--namespacens1--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
upgraded: []exectest.Release{},
|
||||
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
|
||||
concurrency: 1,
|
||||
},
|
||||
{
|
||||
name: "helm3 upgrade when ns2 bar needs ns1 foo",
|
||||
loc: location(),
|
||||
|
|
@ -439,10 +384,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -471,10 +416,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -505,10 +450,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -537,10 +482,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -572,10 +517,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -607,10 +552,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -639,10 +584,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -671,10 +616,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -1008,8 +953,7 @@ changing working directory back to "/path/to"
|
|||
},
|
||||
}
|
||||
|
||||
for i := range testcases {
|
||||
tc := testcases[i]
|
||||
for _, tc := range testcases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
wantUpgrades := tc.upgraded
|
||||
wantDeletes := tc.deleted
|
||||
|
|
@ -1022,6 +966,7 @@ changing working directory back to "/path/to"
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
|
|||
|
|
@ -251,10 +251,10 @@ releases:
|
|||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
// delete frontend-v1 and backend-v1
|
||||
{Filter: "^frontend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^frontend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
frontend-v1 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^backend-v1$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^backend-v1$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
backend-v1 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -287,8 +287,8 @@ releases:
|
|||
{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: nil,
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: ``,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: ``,
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -505,51 +505,21 @@ releases:
|
|||
- name: foo
|
||||
chart: mychart1
|
||||
namespace: ns1
|
||||
tillerNamespace: tns1
|
||||
needs:
|
||||
- tns2/bar
|
||||
- ns2/bar
|
||||
- name: bar
|
||||
chart: mychart2
|
||||
namespace: ns2
|
||||
tillerNamespace: tns2
|
||||
`,
|
||||
},
|
||||
detailedExitcode: true,
|
||||
error: "Identified at least one change",
|
||||
diffs: map[exectest.DiffKey]error{
|
||||
{Name: "bar", Chart: "mychart2", Flags: "--tiller-namespacetns2--kube-contextdefault--namespacens2--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
{Name: "foo", Chart: "mychart1", Flags: "--tiller-namespacetns1--kube-contextdefault--namespacens1--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--namespacens2--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--namespacens1--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
upgraded: []exectest.Release{},
|
||||
},
|
||||
{
|
||||
name: "helm2 upgrade when tns2 bar needs tns1 foo",
|
||||
loc: location(),
|
||||
files: map[string]string{
|
||||
"/path/to/helmfile.yaml": `
|
||||
releases:
|
||||
- name: bar
|
||||
chart: mychart2
|
||||
namespace: ns2
|
||||
tillerNamespace: tns2
|
||||
needs:
|
||||
- tns1/foo
|
||||
- name: foo
|
||||
chart: mychart1
|
||||
namespace: ns1
|
||||
tillerNamespace: tns1
|
||||
`,
|
||||
},
|
||||
detailedExitcode: true,
|
||||
error: "Identified at least one change",
|
||||
diffs: map[exectest.DiffKey]error{
|
||||
{Name: "bar", Chart: "mychart2", Flags: "--tiller-namespacetns2--kube-contextdefault--namespacens2--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
{Name: "foo", Chart: "mychart1", Flags: "--tiller-namespacetns1--kube-contextdefault--namespacens1--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
upgraded: []exectest.Release{},
|
||||
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
|
||||
concurrency: 1,
|
||||
},
|
||||
{
|
||||
name: "helm3 upgrade when ns2 bar needs ns1 foo",
|
||||
loc: location(),
|
||||
|
|
@ -602,10 +572,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -634,10 +604,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -668,10 +638,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -700,10 +670,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -735,10 +705,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -770,10 +740,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -802,10 +772,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -837,10 +807,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -872,10 +842,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -904,10 +874,10 @@ releases:
|
|||
{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode--reset-values"}: helmexec.ExitError{Code: 2},
|
||||
},
|
||||
lists: map[exectest.ListKey]string{
|
||||
{Filter: "^foo$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default
|
||||
`,
|
||||
{Filter: "^bar$", Flags: helmV2ListFlags}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
|
||||
bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default
|
||||
`,
|
||||
},
|
||||
|
|
@ -1305,8 +1275,7 @@ changing working directory back to "/path/to"
|
|||
},
|
||||
}
|
||||
|
||||
for i := range testcases {
|
||||
tc := testcases[i]
|
||||
for _, tc := range testcases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
wantUpgrades := tc.upgraded
|
||||
wantDeletes := tc.deleted
|
||||
|
|
@ -1319,6 +1288,7 @@ changing working directory back to "/path/to"
|
|||
DiffMutex: &sync.Mutex{},
|
||||
ChartsMutex: &sync.Mutex{},
|
||||
ReleasesMutex: &sync.Mutex{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
bs := runWithLogCapture(t, "debug", func(t *testing.T, logger *zap.SugaredLogger) {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,10 @@ func NewRun(st *state.HelmState, helm helmexec.Interface, ctx Context) *Run {
|
|||
panic("Assertion failed: helmexec.Interface must not be nil")
|
||||
}
|
||||
|
||||
if !helm.IsHelm3() {
|
||||
panic("helmfile has deprecated helm2 since v1.0")
|
||||
}
|
||||
|
||||
return &Run{state: st, helm: helm, ctx: ctx}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,54 +0,0 @@
|
|||
processing file "helmfile.yaml" in directory "."
|
||||
changing working directory to "/path/to"
|
||||
first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=<nil>
|
||||
first-pass uses: &{default map[] map[]}
|
||||
first-pass rendering output of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: bar
|
||||
3: chart: mychart2
|
||||
4: namespace: ns2
|
||||
5: tillerNamespace: tns2
|
||||
6: needs:
|
||||
7: - tns1/foo
|
||||
8: - name: foo
|
||||
9: chart: mychart1
|
||||
10: namespace: ns1
|
||||
11: tillerNamespace: tns1
|
||||
12:
|
||||
|
||||
first-pass produced: &{default map[] map[]}
|
||||
first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
|
||||
vals:
|
||||
map[]
|
||||
defaultVals:[]
|
||||
second-pass rendering result of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: bar
|
||||
3: chart: mychart2
|
||||
4: namespace: ns2
|
||||
5: tillerNamespace: tns2
|
||||
6: needs:
|
||||
7: - tns1/foo
|
||||
8: - name: foo
|
||||
9: chart: mychart1
|
||||
10: namespace: ns1
|
||||
11: tillerNamespace: tns1
|
||||
12:
|
||||
|
||||
merged environment: &{default map[] map[]}
|
||||
2 release(s) found in helmfile.yaml
|
||||
|
||||
processing 2 groups of releases in this order:
|
||||
GROUP RELEASES
|
||||
1 default/tns1/foo
|
||||
2 default/tns2/bar
|
||||
|
||||
processing releases in group 1/2: default/tns1/foo
|
||||
processing releases in group 2/2: default/tns2/bar
|
||||
Affected releases are:
|
||||
bar (mychart2) UPDATED
|
||||
foo (mychart1) UPDATED
|
||||
|
||||
changing working directory back to "/path/to"
|
||||
|
|
@ -8,14 +8,12 @@ first-pass rendering output of "helmfile.yaml.part.0":
|
|||
2: - name: foo
|
||||
3: chart: mychart1
|
||||
4: namespace: ns1
|
||||
5: tillerNamespace: tns1
|
||||
6: needs:
|
||||
7: - tns2/bar
|
||||
8: - name: bar
|
||||
9: chart: mychart2
|
||||
10: namespace: ns2
|
||||
11: tillerNamespace: tns2
|
||||
12:
|
||||
5: needs:
|
||||
6: - ns2/bar
|
||||
7: - name: bar
|
||||
8: chart: mychart2
|
||||
9: namespace: ns2
|
||||
10:
|
||||
|
||||
first-pass produced: &{default map[] map[]}
|
||||
first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
|
||||
|
|
@ -28,25 +26,23 @@ second-pass rendering result of "helmfile.yaml.part.0":
|
|||
2: - name: foo
|
||||
3: chart: mychart1
|
||||
4: namespace: ns1
|
||||
5: tillerNamespace: tns1
|
||||
6: needs:
|
||||
7: - tns2/bar
|
||||
8: - name: bar
|
||||
9: chart: mychart2
|
||||
10: namespace: ns2
|
||||
11: tillerNamespace: tns2
|
||||
12:
|
||||
5: needs:
|
||||
6: - ns2/bar
|
||||
7: - name: bar
|
||||
8: chart: mychart2
|
||||
9: namespace: ns2
|
||||
10:
|
||||
|
||||
merged environment: &{default map[] map[]}
|
||||
2 release(s) found in helmfile.yaml
|
||||
|
||||
processing 2 groups of releases in this order:
|
||||
GROUP RELEASES
|
||||
1 default/tns2/bar
|
||||
2 default/tns1/foo
|
||||
1 default/ns2/bar
|
||||
2 default/ns1/foo
|
||||
|
||||
processing releases in group 1/2: default/tns2/bar
|
||||
processing releases in group 2/2: default/tns1/foo
|
||||
processing releases in group 1/2: default/ns2/bar
|
||||
processing releases in group 2/2: default/ns1/foo
|
||||
Affected releases are:
|
||||
bar (mychart2) UPDATED
|
||||
foo (mychart1) UPDATED
|
||||
|
|
|
|||
|
|
@ -1,54 +0,0 @@
|
|||
processing file "helmfile.yaml" in directory "."
|
||||
changing working directory to "/path/to"
|
||||
first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=<nil>
|
||||
first-pass uses: &{default map[] map[]}
|
||||
first-pass rendering output of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: foo
|
||||
3: chart: mychart1
|
||||
4: namespace: ns1
|
||||
5: tillerNamespace: tns1
|
||||
6: needs:
|
||||
7: - tns2/bar
|
||||
8: - name: bar
|
||||
9: chart: mychart2
|
||||
10: namespace: ns2
|
||||
11: tillerNamespace: tns2
|
||||
12:
|
||||
|
||||
first-pass produced: &{default map[] map[]}
|
||||
first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
|
||||
vals:
|
||||
map[]
|
||||
defaultVals:[]
|
||||
second-pass rendering result of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: foo
|
||||
3: chart: mychart1
|
||||
4: namespace: ns1
|
||||
5: tillerNamespace: tns1
|
||||
6: needs:
|
||||
7: - tns2/bar
|
||||
8: - name: bar
|
||||
9: chart: mychart2
|
||||
10: namespace: ns2
|
||||
11: tillerNamespace: tns2
|
||||
12:
|
||||
|
||||
merged environment: &{default map[] map[]}
|
||||
2 release(s) found in helmfile.yaml
|
||||
|
||||
processing 2 groups of releases in this order:
|
||||
GROUP RELEASES
|
||||
1 tns2/bar
|
||||
2 tns1/foo
|
||||
|
||||
processing releases in group 1/2: tns2/bar
|
||||
processing releases in group 2/2: tns1/foo
|
||||
Affected releases are:
|
||||
bar (mychart2) UPDATED
|
||||
foo (mychart1) UPDATED
|
||||
|
||||
changing working directory back to "/path/to"
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
processing file "helmfile.yaml" in directory "."
|
||||
changing working directory to "/path/to"
|
||||
first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=<nil>
|
||||
first-pass uses: &{default map[] map[]}
|
||||
first-pass rendering output of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: bar
|
||||
3: chart: mychart2
|
||||
4: namespace: ns2
|
||||
5: tillerNamespace: tns2
|
||||
6: needs:
|
||||
7: - tns1/foo
|
||||
8: - name: foo
|
||||
9: chart: mychart1
|
||||
10: namespace: ns1
|
||||
11: tillerNamespace: tns1
|
||||
12:
|
||||
|
||||
first-pass produced: &{default map[] map[]}
|
||||
first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
|
||||
vals:
|
||||
map[]
|
||||
defaultVals:[]
|
||||
second-pass rendering result of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: bar
|
||||
3: chart: mychart2
|
||||
4: namespace: ns2
|
||||
5: tillerNamespace: tns2
|
||||
6: needs:
|
||||
7: - tns1/foo
|
||||
8: - name: foo
|
||||
9: chart: mychart1
|
||||
10: namespace: ns1
|
||||
11: tillerNamespace: tns1
|
||||
12:
|
||||
|
||||
merged environment: &{default map[] map[]}
|
||||
2 release(s) found in helmfile.yaml
|
||||
|
||||
processing 2 groups of releases in this order:
|
||||
GROUP RELEASES
|
||||
1 tns1/foo
|
||||
2 tns2/bar
|
||||
|
||||
processing releases in group 1/2: tns1/foo
|
||||
processing releases in group 2/2: tns2/bar
|
||||
Affected releases are:
|
||||
bar (mychart2) UPDATED
|
||||
foo (mychart1) UPDATED
|
||||
|
||||
changing working directory back to "/path/to"
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
processing file "helmfile.yaml" in directory "."
|
||||
changing working directory to "/path/to"
|
||||
first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=<nil>
|
||||
first-pass uses: &{default map[] map[]}
|
||||
first-pass rendering output of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: foo
|
||||
3: chart: stable/mychart1
|
||||
4: namespace: ns1
|
||||
5: tillerNamespace: tns1
|
||||
6: needs:
|
||||
7: - tns2/bar
|
||||
8: - name: bar
|
||||
9: chart: stable/mychart2
|
||||
10: namespace: ns2
|
||||
11: tillerNamespace: tns2
|
||||
12:
|
||||
|
||||
first-pass produced: &{default map[] map[]}
|
||||
first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
|
||||
vals:
|
||||
map[]
|
||||
defaultVals:[]
|
||||
second-pass rendering result of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: foo
|
||||
3: chart: stable/mychart1
|
||||
4: namespace: ns1
|
||||
5: tillerNamespace: tns1
|
||||
6: needs:
|
||||
7: - tns2/bar
|
||||
8: - name: bar
|
||||
9: chart: stable/mychart2
|
||||
10: namespace: ns2
|
||||
11: tillerNamespace: tns2
|
||||
12:
|
||||
|
||||
merged environment: &{default map[] map[]}
|
||||
2 release(s) found in helmfile.yaml
|
||||
|
||||
Affected releases are:
|
||||
bar (stable/mychart2) UPDATED
|
||||
foo (stable/mychart1) UPDATED
|
||||
|
||||
invoking preapply hooks for 2 groups of releases in this order:
|
||||
GROUP RELEASES
|
||||
1 default/tns1/foo
|
||||
2 default/tns2/bar
|
||||
|
||||
invoking preapply hooks for releases in group 1/2: default/tns1/foo
|
||||
invoking preapply hooks for releases in group 2/2: default/tns2/bar
|
||||
processing 2 groups of releases in this order:
|
||||
GROUP RELEASES
|
||||
1 default/tns2/bar
|
||||
2 default/tns1/foo
|
||||
|
||||
processing releases in group 1/2: default/tns2/bar
|
||||
getting deployed release version failed: Failed to get the version for: mychart2
|
||||
processing releases in group 2/2: default/tns1/foo
|
||||
getting deployed release version failed: Failed to get the version for: mychart1
|
||||
|
||||
UPDATED RELEASES:
|
||||
NAME CHART VERSION
|
||||
bar stable/mychart2
|
||||
foo stable/mychart1
|
||||
|
||||
changing working directory back to "/path/to"
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
processing file "helmfile.yaml" in directory "."
|
||||
changing working directory to "/path/to"
|
||||
first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=<nil>
|
||||
first-pass uses: &{default map[] map[]}
|
||||
first-pass rendering output of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: bar
|
||||
3: chart: stable/mychart2
|
||||
4: namespace: ns2
|
||||
5: tillerNamespace: tns2
|
||||
6: needs:
|
||||
7: - tns1/foo
|
||||
8: - name: foo
|
||||
9: chart: stable/mychart1
|
||||
10: namespace: ns1
|
||||
11: tillerNamespace: tns1
|
||||
12:
|
||||
|
||||
first-pass produced: &{default map[] map[]}
|
||||
first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
|
||||
vals:
|
||||
map[]
|
||||
defaultVals:[]
|
||||
second-pass rendering result of "helmfile.yaml.part.0":
|
||||
0:
|
||||
1: releases:
|
||||
2: - name: bar
|
||||
3: chart: stable/mychart2
|
||||
4: namespace: ns2
|
||||
5: tillerNamespace: tns2
|
||||
6: needs:
|
||||
7: - tns1/foo
|
||||
8: - name: foo
|
||||
9: chart: stable/mychart1
|
||||
10: namespace: ns1
|
||||
11: tillerNamespace: tns1
|
||||
12:
|
||||
|
||||
merged environment: &{default map[] map[]}
|
||||
2 release(s) found in helmfile.yaml
|
||||
|
||||
Affected releases are:
|
||||
bar (stable/mychart2) UPDATED
|
||||
foo (stable/mychart1) UPDATED
|
||||
|
||||
invoking preapply hooks for 2 groups of releases in this order:
|
||||
GROUP RELEASES
|
||||
1 default/tns2/bar
|
||||
2 default/tns1/foo
|
||||
|
||||
invoking preapply hooks for releases in group 1/2: default/tns2/bar
|
||||
invoking preapply hooks for releases in group 2/2: default/tns1/foo
|
||||
processing 2 groups of releases in this order:
|
||||
GROUP RELEASES
|
||||
1 default/tns1/foo
|
||||
2 default/tns2/bar
|
||||
|
||||
processing releases in group 1/2: default/tns1/foo
|
||||
processing releases in group 2/2: default/tns2/bar
|
||||
|
||||
UPDATED RELEASES:
|
||||
NAME CHART VERSION
|
||||
foo stable/mychart1 3.1.0
|
||||
bar stable/mychart2 3.1.0
|
||||
|
||||
changing working directory back to "/path/to"
|
||||
|
|
@ -54,10 +54,10 @@ GROUP RELEASES
|
|||
2 default//foo
|
||||
|
||||
processing releases in group 1/2: default//baz, default//bar
|
||||
getting deployed release version failed: unexpected list key: listkey(filter=^baz$,flags=--kube-contextdefault--deleting--deployed--failed--pending) not found in
|
||||
getting deployed release version failed: unexpected list key: listkey(filter=^bar$,flags=--kube-contextdefault--deleting--deployed--failed--pending) not found in
|
||||
getting deployed release version failed: unexpected list key: listkey(filter=^baz$,flags=--kube-contextdefault--uninstalling--deployed--failed--pending) not found in
|
||||
getting deployed release version failed: unexpected list key: listkey(filter=^bar$,flags=--kube-contextdefault--uninstalling--deployed--failed--pending) not found in
|
||||
processing releases in group 2/2: default//foo
|
||||
getting deployed release version failed: unexpected list key: listkey(filter=^foo$,flags=--kube-contextdefault--deleting--deployed--failed--pending) not found in
|
||||
getting deployed release version failed: unexpected list key: listkey(filter=^foo$,flags=--kube-contextdefault--uninstalling--deployed--failed--pending) not found in
|
||||
|
||||
UPDATED RELEASES:
|
||||
NAME CHART VERSION
|
||||
|
|
|
|||
|
|
@ -27,17 +27,17 @@ func TestGetArgs(t *testing.T) {
|
|||
expected: "-e a.yaml -d b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false -q www -w",
|
||||
},
|
||||
{
|
||||
args: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false --tiller-namespace ns",
|
||||
expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false --tiller-namespace ns",
|
||||
args: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false",
|
||||
expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false",
|
||||
},
|
||||
{
|
||||
args: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true --tiller-namespace ns",
|
||||
args: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true",
|
||||
defaultArgs: []string{"--recreate-pods", "--force"},
|
||||
expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true --tiller-namespace ns --recreate-pods --force",
|
||||
expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true --recreate-pods --force",
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
Helmdefaults := state.HelmSpec{KubeContext: "test", TillerNamespace: "test-namespace", Args: test.defaultArgs}
|
||||
Helmdefaults := state.HelmSpec{KubeContext: "test", Args: test.defaultArgs}
|
||||
testState := &state.HelmState{
|
||||
ReleaseSetSpec: state.ReleaseSetSpec{
|
||||
HelmDefaults: Helmdefaults,
|
||||
|
|
|
|||
|
|
@ -2,43 +2,10 @@ package helmexec
|
|||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type HelmContext struct {
|
||||
Tillerless bool
|
||||
TillerNamespace string
|
||||
HistoryMax int
|
||||
WorkerIndex int
|
||||
Writer io.Writer
|
||||
}
|
||||
|
||||
func (context *HelmContext) GetTillerlessArgs(helm *execer) []string {
|
||||
if context.Tillerless && !helm.IsHelm3() {
|
||||
if context.TillerNamespace != "" {
|
||||
return []string{"tiller", "run", context.TillerNamespace, "--", helm.helmBinary}
|
||||
}
|
||||
return []string{"tiller", "run", "--", helm.helmBinary}
|
||||
}
|
||||
return []string{}
|
||||
}
|
||||
|
||||
func (context *HelmContext) getTillerlessEnv() map[string]string {
|
||||
if context.Tillerless {
|
||||
result := map[string]string{
|
||||
"HELM_TILLER_SILENT": "true",
|
||||
// Changing the TILLER port doesn't really work: https://github.com/helm/helm/issues/3159
|
||||
// So this is not used for the moment.
|
||||
// "HELM_TILLER_PORT": strconv.Itoa(44134 + context.WorkerIndex),
|
||||
}
|
||||
if config := os.Getenv("KUBECONFIG"); config != "" {
|
||||
absConfig, err := filepath.Abs(config)
|
||||
if err == nil {
|
||||
result["KUBECONFIG"] = absConfig
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
return map[string]string{}
|
||||
HistoryMax int
|
||||
WorkerIndex int
|
||||
Writer io.Writer
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,100 +0,0 @@
|
|||
package helmexec
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// TestGetTillerlessArgs tests the GetTillerlessArgs function
|
||||
func TestGetTillerlessArgs(t *testing.T) {
|
||||
helmBinary := "helm"
|
||||
|
||||
tests := []struct {
|
||||
tillerless bool
|
||||
helmMajorVersion string
|
||||
tillerNamespace string
|
||||
expected []string
|
||||
}{
|
||||
{
|
||||
tillerless: true,
|
||||
helmMajorVersion: "2.0.0",
|
||||
expected: []string{"tiller", "run", "--", helmBinary},
|
||||
},
|
||||
{
|
||||
tillerless: true,
|
||||
helmMajorVersion: "2.0.0",
|
||||
tillerNamespace: "test-namespace",
|
||||
expected: []string{"tiller", "run", "test-namespace", "--", helmBinary},
|
||||
},
|
||||
{
|
||||
tillerless: false,
|
||||
helmMajorVersion: "2.0.0",
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
tillerless: true,
|
||||
helmMajorVersion: "3.0.0",
|
||||
expected: []string{},
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
hc := &HelmContext{
|
||||
Tillerless: test.tillerless,
|
||||
TillerNamespace: test.tillerNamespace,
|
||||
}
|
||||
sr, _ := semver.NewVersion(test.helmMajorVersion)
|
||||
he := &execer{
|
||||
helmBinary: helmBinary,
|
||||
version: *sr,
|
||||
}
|
||||
require.Equalf(t, test.expected, hc.GetTillerlessArgs(he), "expected result %s, received result %s", test.expected, hc.GetTillerlessArgs(he))
|
||||
}
|
||||
}
|
||||
|
||||
func pwd() string {
|
||||
pwd, _ := os.Getwd()
|
||||
return pwd
|
||||
}
|
||||
|
||||
// TestGetTillerlessEnv tests the getTillerlessEnv function
|
||||
func TestGetTillerlessEnv(t *testing.T) {
|
||||
kubeconfigEnv := "KUBECONFIG"
|
||||
|
||||
tests := []struct {
|
||||
tillerless bool
|
||||
kubeconfig string
|
||||
expected map[string]string
|
||||
}{
|
||||
{
|
||||
tillerless: true,
|
||||
kubeconfig: "",
|
||||
expected: map[string]string{"HELM_TILLER_SILENT": "true"},
|
||||
},
|
||||
{
|
||||
tillerless: true,
|
||||
kubeconfig: "abc",
|
||||
expected: map[string]string{"HELM_TILLER_SILENT": "true", kubeconfigEnv: filepath.Join(pwd(), "abc")},
|
||||
},
|
||||
{
|
||||
tillerless: true,
|
||||
kubeconfig: "/path/to/kubeconfig",
|
||||
expected: map[string]string{"HELM_TILLER_SILENT": "true", kubeconfigEnv: "/path/to/kubeconfig"},
|
||||
},
|
||||
{
|
||||
tillerless: false,
|
||||
expected: map[string]string{},
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
hc := &HelmContext{
|
||||
Tillerless: test.tillerless,
|
||||
}
|
||||
t.Setenv(kubeconfigEnv, test.kubeconfig)
|
||||
result := hc.getTillerlessEnv()
|
||||
require.Equalf(t, test.expected, result, "expected result %s, received result %s", test.expected, result)
|
||||
}
|
||||
}
|
||||
|
|
@ -248,14 +248,10 @@ func (helm *execer) UpdateDeps(chart string) error {
|
|||
|
||||
func (helm *execer) SyncRelease(context HelmContext, name, chart string, flags ...string) error {
|
||||
helm.logger.Infof("Upgrading release=%v, chart=%v", name, redactedURL(chart))
|
||||
preArgs := context.GetTillerlessArgs(helm)
|
||||
env := context.getTillerlessEnv()
|
||||
preArgs := make([]string, 0)
|
||||
env := make(map[string]string)
|
||||
|
||||
if helm.IsHelm3() {
|
||||
flags = append(flags, "--history-max", strconv.Itoa(context.HistoryMax))
|
||||
} else {
|
||||
env["HELM_TILLER_HISTORY_MAX"] = strconv.Itoa(context.HistoryMax)
|
||||
}
|
||||
flags = append(flags, "--history-max", strconv.Itoa(context.HistoryMax))
|
||||
|
||||
out, err := helm.exec(append(append(preArgs, "upgrade", "--install", name, chart), flags...), env, nil)
|
||||
helm.write(nil, out)
|
||||
|
|
@ -264,8 +260,8 @@ func (helm *execer) SyncRelease(context HelmContext, name, chart string, flags .
|
|||
|
||||
func (helm *execer) ReleaseStatus(context HelmContext, name string, flags ...string) error {
|
||||
helm.logger.Infof("Getting status %v", name)
|
||||
preArgs := context.GetTillerlessArgs(helm)
|
||||
env := context.getTillerlessEnv()
|
||||
preArgs := make([]string, 0)
|
||||
env := make(map[string]string)
|
||||
out, err := helm.exec(append(append(preArgs, "status", name), flags...), env, nil)
|
||||
helm.write(nil, out)
|
||||
return err
|
||||
|
|
@ -273,14 +269,9 @@ func (helm *execer) ReleaseStatus(context HelmContext, name string, flags ...str
|
|||
|
||||
func (helm *execer) List(context HelmContext, filter string, flags ...string) (string, error) {
|
||||
helm.logger.Infof("Listing releases matching %v", filter)
|
||||
preArgs := context.GetTillerlessArgs(helm)
|
||||
env := context.getTillerlessEnv()
|
||||
var args []string
|
||||
if helm.IsHelm3() {
|
||||
args = []string{"list", "--filter", filter}
|
||||
} else {
|
||||
args = []string{"list", filter}
|
||||
}
|
||||
preArgs := make([]string, 0)
|
||||
env := make(map[string]string)
|
||||
args := []string{"list", "--filter", filter}
|
||||
|
||||
enableLiveOutput := false
|
||||
out, err := helm.exec(append(append(preArgs, args...), flags...), env, &enableLiveOutput)
|
||||
|
|
@ -290,11 +281,9 @@ func (helm *execer) List(context HelmContext, filter string, flags ...string) (s
|
|||
// of the release to exist.
|
||||
//
|
||||
// This fixes it by removing the header from the v3 output, so that the output is formatted the same as that of v2.
|
||||
if helm.IsHelm3() {
|
||||
lines := strings.Split(string(out), "\n")
|
||||
lines = lines[1:]
|
||||
out = []byte(strings.Join(lines, "\n"))
|
||||
}
|
||||
lines := strings.Split(string(out), "\n")
|
||||
lines = lines[1:]
|
||||
out = []byte(strings.Join(lines, "\n"))
|
||||
helm.write(nil, out)
|
||||
return string(out), err
|
||||
}
|
||||
|
|
@ -320,8 +309,8 @@ func (helm *execer) DecryptSecret(context HelmContext, name string, flags ...str
|
|||
helm.decryptedSecretMutex.Unlock()
|
||||
|
||||
helm.logger.Infof("Decrypting secret %v", absPath)
|
||||
preArgs := context.GetTillerlessArgs(helm)
|
||||
env := context.getTillerlessEnv()
|
||||
preArgs := make([]string, 0)
|
||||
env := make(map[string]string)
|
||||
settings := cli.New()
|
||||
pluginVersion, err := GetPluginVersion("secrets", settings.PluginsDirectory)
|
||||
if err != nil {
|
||||
|
|
@ -389,12 +378,7 @@ func (helm *execer) DecryptSecret(context HelmContext, name string, flags ...str
|
|||
|
||||
func (helm *execer) TemplateRelease(name string, chart string, flags ...string) error {
|
||||
helm.logger.Infof("Templating release=%v, chart=%v", name, redactedURL(chart))
|
||||
var args []string
|
||||
if helm.IsHelm3() {
|
||||
args = []string{"template", name, chart}
|
||||
} else {
|
||||
args = []string{"template", chart, "--name", name}
|
||||
}
|
||||
args := []string{"template", name, chart}
|
||||
|
||||
out, err := helm.exec(append(args, flags...), map[string]string{}, nil)
|
||||
|
||||
|
|
@ -431,8 +415,8 @@ func (helm *execer) DiffRelease(context HelmContext, name, chart string, suppres
|
|||
} else {
|
||||
helm.logger.Infof("Comparing release=%v, chart=%v", name, redactedURL(chart))
|
||||
}
|
||||
preArgs := context.GetTillerlessArgs(helm)
|
||||
env := context.getTillerlessEnv()
|
||||
preArgs := make([]string, 0)
|
||||
env := make(map[string]string)
|
||||
var overrideEnableLiveOutput *bool = nil
|
||||
if suppressDiff {
|
||||
enableLiveOutput := false
|
||||
|
|
@ -511,8 +495,8 @@ func (helm *execer) ChartExport(chart string, path string, flags ...string) erro
|
|||
|
||||
func (helm *execer) DeleteRelease(context HelmContext, name string, flags ...string) error {
|
||||
helm.logger.Infof("Deleting %v", name)
|
||||
preArgs := context.GetTillerlessArgs(helm)
|
||||
env := context.getTillerlessEnv()
|
||||
preArgs := make([]string, 0)
|
||||
env := make(map[string]string)
|
||||
out, err := helm.exec(append(append(preArgs, "delete", name), flags...), env, nil)
|
||||
helm.write(nil, out)
|
||||
return err
|
||||
|
|
@ -520,8 +504,8 @@ func (helm *execer) DeleteRelease(context HelmContext, name string, flags ...str
|
|||
|
||||
func (helm *execer) TestRelease(context HelmContext, name string, flags ...string) error {
|
||||
helm.logger.Infof("Testing %v", name)
|
||||
preArgs := context.GetTillerlessArgs(helm)
|
||||
env := context.getTillerlessEnv()
|
||||
preArgs := make([]string, 0)
|
||||
env := make(map[string]string)
|
||||
args := []string{"test", name}
|
||||
out, err := helm.exec(append(append(preArgs, args...), flags...), env, nil)
|
||||
helm.write(nil, out)
|
||||
|
|
@ -634,10 +618,6 @@ func resolveOciChart(ociChart string) (ociChartURL, ociChartTag string) {
|
|||
}
|
||||
|
||||
func (helm *execer) ShowChart(chartPath string) (chart.Metadata, error) {
|
||||
if !helm.IsHelm3() {
|
||||
// show chart command isn't supported in helm2
|
||||
return chart.Metadata{}, fmt.Errorf("helm show isn't supported in helm2")
|
||||
}
|
||||
var helmArgs = []string{"show", "chart", chartPath}
|
||||
out, error := helm.exec(helmArgs, map[string]string{}, nil)
|
||||
if error != nil {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"regexp"
|
||||
|
|
@ -277,7 +276,7 @@ func Test_SyncRelease(t *testing.T) {
|
|||
helm := MockExecer(logger, "dev")
|
||||
err := helm.SyncRelease(HelmContext{}, "release", "chart", "--timeout 10", "--wait", "--wait-for-jobs")
|
||||
expected := `Upgrading release=release, chart=chart
|
||||
exec: helm --kube-context dev upgrade --install release chart --timeout 10 --wait --wait-for-jobs
|
||||
exec: helm --kube-context dev upgrade --install release chart --timeout 10 --wait --wait-for-jobs --history-max 0
|
||||
`
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
|
|
@ -289,7 +288,7 @@ exec: helm --kube-context dev upgrade --install release chart --timeout 10 --wai
|
|||
buffer.Reset()
|
||||
err = helm.SyncRelease(HelmContext{}, "release", "chart")
|
||||
expected = `Upgrading release=release, chart=chart
|
||||
exec: helm --kube-context dev upgrade --install release chart
|
||||
exec: helm --kube-context dev upgrade --install release chart --history-max 0
|
||||
`
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
|
|
@ -301,24 +300,7 @@ exec: helm --kube-context dev upgrade --install release chart
|
|||
buffer.Reset()
|
||||
err = helm.SyncRelease(HelmContext{}, "release", "https://example_user:example_password@repo.example.com/chart.tgz")
|
||||
expected = `Upgrading release=release, chart=https://example_user:xxxxx@repo.example.com/chart.tgz
|
||||
exec: helm --kube-context dev upgrade --install release https://example_user:example_password@repo.example.com/chart.tgz
|
||||
`
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
if buffer.String() != expected {
|
||||
t.Errorf("helmexec.SyncRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_SyncReleaseTillerless(t *testing.T) {
|
||||
var buffer bytes.Buffer
|
||||
logger := NewLogger(&buffer, "debug")
|
||||
helm := MockExecer(logger, "dev")
|
||||
err := helm.SyncRelease(HelmContext{Tillerless: true, TillerNamespace: "foo"}, "release", "chart",
|
||||
"--timeout 10", "--wait", "--wait-for-jobs")
|
||||
expected := `Upgrading release=release, chart=chart
|
||||
exec: helm --kube-context dev tiller run foo -- helm upgrade --install release chart --timeout 10 --wait --wait-for-jobs
|
||||
exec: helm --kube-context dev upgrade --install release https://example_user:example_password@repo.example.com/chart.tgz --history-max 0
|
||||
`
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
|
|
@ -548,22 +530,6 @@ exec: helm --kube-context dev diff upgrade --allow-unreleased release https://ex
|
|||
}
|
||||
}
|
||||
|
||||
func Test_DiffReleaseTillerless(t *testing.T) {
|
||||
var buffer bytes.Buffer
|
||||
logger := NewLogger(&buffer, "debug")
|
||||
helm := MockExecer(logger, "dev")
|
||||
err := helm.DiffRelease(HelmContext{Tillerless: true}, "release", "chart", false, "--timeout 10", "--wait", "--wait-for-jobs")
|
||||
expected := `Comparing release=release, chart=chart
|
||||
exec: helm --kube-context dev tiller run -- helm diff upgrade --allow-unreleased release chart --timeout 10 --wait --wait-for-jobs
|
||||
`
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
if buffer.String() != expected {
|
||||
t.Errorf("helmexec.DiffRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_DeleteRelease(t *testing.T) {
|
||||
var buffer bytes.Buffer
|
||||
logger := NewLogger(&buffer, "debug")
|
||||
|
|
@ -887,31 +853,6 @@ func Test_LogLevels(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func Test_getTillerlessEnv(t *testing.T) {
|
||||
context := HelmContext{Tillerless: true, TillerNamespace: "foo", WorkerIndex: 1}
|
||||
|
||||
os.Unsetenv("KUBECONFIG")
|
||||
actual := context.getTillerlessEnv()
|
||||
if val, found := actual["HELM_TILLER_SILENT"]; !found || val != "true" {
|
||||
t.Errorf("getTillerlessEnv() HELM_TILLER_SILENT\nactual = %s\nexpect = true", val)
|
||||
}
|
||||
// This feature is disabled until it is fixed in helm
|
||||
/*if val, found := actual["HELM_TILLER_PORT"]; !found || val != "44135" {
|
||||
t.Errorf("getTillerlessEnv() HELM_TILLER_PORT\nactual = %s\nexpect = 44135", val)
|
||||
}*/
|
||||
if val, found := actual["KUBECONFIG"]; found {
|
||||
t.Errorf("getTillerlessEnv() KUBECONFIG\nactual = %s\nexpect = nil", val)
|
||||
}
|
||||
|
||||
t.Setenv("KUBECONFIG", "toto")
|
||||
actual = context.getTillerlessEnv()
|
||||
cwd, _ := os.Getwd()
|
||||
expected := path.Join(cwd, "toto")
|
||||
if val, found := actual["KUBECONFIG"]; !found || val != expected {
|
||||
t.Errorf("getTillerlessEnv() KUBECONFIG\nactual = %s\nexpect = %s", val, expected)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_mergeEnv(t *testing.T) {
|
||||
actual := env2map(mergeEnv([]string{"A=1", "B=c=d", "E=2"}, map[string]string{"B": "3", "F": "4"}))
|
||||
expected := map[string]string{"A": "1", "B": "3", "E": "2", "F": "4"}
|
||||
|
|
@ -926,7 +867,7 @@ func Test_Template(t *testing.T) {
|
|||
helm := MockExecer(logger, "dev")
|
||||
err := helm.TemplateRelease("release", "path/to/chart", "--values", "file.yml")
|
||||
expected := `Templating release=release, chart=path/to/chart
|
||||
exec: helm --kube-context dev template path/to/chart --name release --values file.yml
|
||||
exec: helm --kube-context dev template release path/to/chart --values file.yml
|
||||
`
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
|
|
@ -938,7 +879,7 @@ exec: helm --kube-context dev template path/to/chart --name release --values fil
|
|||
buffer.Reset()
|
||||
err = helm.TemplateRelease("release", "https://example_user:example_password@repo.example.com/chart.tgz", "--values", "file.yml")
|
||||
expected = `Templating release=release, chart=https://example_user:xxxxx@repo.example.com/chart.tgz
|
||||
exec: helm --kube-context dev template https://example_user:example_password@repo.example.com/chart.tgz --name release --values file.yml
|
||||
exec: helm --kube-context dev template release https://example_user:example_password@repo.example.com/chart.tgz --values file.yml
|
||||
`
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
|
|
@ -1064,15 +1005,8 @@ func Test_resolveOciChart(t *testing.T) {
|
|||
}
|
||||
|
||||
func Test_ShowChart(t *testing.T) {
|
||||
helm2Runner := mockRunner{output: []byte("Client: v2.16.1+ge13bc94\n")}
|
||||
helm := New("helm", false, NewLogger(os.Stdout, "info"), "dev", &helm2Runner)
|
||||
_, err := helm.ShowChart("fake-chart")
|
||||
if err == nil {
|
||||
t.Error("helmexec.ShowChart() - helm show isn't supported in helm2")
|
||||
}
|
||||
|
||||
showChartRunner := mockRunner{output: []byte("name: my-chart\nversion: 3.2.0\n")}
|
||||
helm = &execer{
|
||||
helm := &execer{
|
||||
helmBinary: "helm",
|
||||
version: *semver.MustParse("3.3.2"),
|
||||
logger: NewLogger(os.Stdout, "info"),
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import (
|
|||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
goversion "github.com/hashicorp/go-version"
|
||||
"github.com/r3labs/diff"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"github.com/helmfile/helmfile/pkg/app/version"
|
||||
|
|
@ -297,10 +296,7 @@ func (m *chartDependencyManager) lockFileName() string {
|
|||
}
|
||||
|
||||
func (m *chartDependencyManager) Update(shell helmexec.DependencyUpdater, wd string, unresolved *UnresolvedDependencies) (*ResolvedDependencies, error) {
|
||||
if shell.IsHelm3() {
|
||||
return m.updateHelm3(shell, wd, unresolved)
|
||||
}
|
||||
return m.updateHelm2(shell, wd, unresolved)
|
||||
return m.updateHelm3(shell, wd, unresolved)
|
||||
}
|
||||
|
||||
func (m *chartDependencyManager) updateHelm3(shell helmexec.DependencyUpdater, wd string, unresolved *UnresolvedDependencies) (*ResolvedDependencies, error) {
|
||||
|
|
@ -319,24 +315,6 @@ func (m *chartDependencyManager) updateHelm3(shell helmexec.DependencyUpdater, w
|
|||
return m.doUpdate("Chart.lock", unresolved, shell, wd)
|
||||
}
|
||||
|
||||
func (m *chartDependencyManager) updateHelm2(shell helmexec.DependencyUpdater, wd string, unresolved *UnresolvedDependencies) (*ResolvedDependencies, error) {
|
||||
// Generate `Chart.yaml` of the temporary local chart
|
||||
if err := m.writeBytes(filepath.Join(wd, "Chart.yaml"), []byte(fmt.Sprintf("name: %s\nversion: 1.0.0\n", m.Name))); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Generate `requirements.yaml` of the temporary local chart from the helmfile state
|
||||
reqsContent, err := yaml.Marshal(unresolved.ToChartRequirements())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := m.writeBytes(filepath.Join(wd, "requirements.yaml"), reqsContent); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return m.doUpdate("requirements.lock", unresolved, shell, wd)
|
||||
}
|
||||
|
||||
func (m *chartDependencyManager) doUpdate(chartLockFile string, unresolved *UnresolvedDependencies, shell helmexec.DependencyUpdater, wd string) (*ResolvedDependencies, error) {
|
||||
// Generate `requirements.lock` of the temporary local chart by coping `<basename>.lock`
|
||||
lockFilePath := m.lockFileName()
|
||||
|
|
@ -346,7 +324,7 @@ func (m *chartDependencyManager) doUpdate(chartLockFile string, unresolved *Unre
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if shell.IsHelm3() && originalLockFileContent != nil {
|
||||
if originalLockFileContent != nil {
|
||||
if err := m.writeBytes(filepath.Join(wd, chartLockFile), originalLockFileContent); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -372,24 +350,6 @@ func (m *chartDependencyManager) doUpdate(chartLockFile string, unresolved *Unre
|
|||
return lockedReqs.ResolvedDependencies[i].ChartName < lockedReqs.ResolvedDependencies[j].ChartName
|
||||
})
|
||||
|
||||
// Don't update lock file if no dependency updated.
|
||||
if !shell.IsHelm3() && originalLockFileContent != nil {
|
||||
originalLockedReqs := &ChartLockedRequirements{}
|
||||
if err := yaml.Unmarshal(originalLockFileContent, originalLockedReqs); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
changes, err := diff.Diff(originalLockedReqs.ResolvedDependencies, lockedReqs.ResolvedDependencies)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(changes) == 0 {
|
||||
lockedReqs.Generated = originalLockedReqs.Generated
|
||||
}
|
||||
}
|
||||
|
||||
lockedReqs.Version = version.Version()
|
||||
|
||||
updatedLockFileContent, err = yaml.Marshal(lockedReqs)
|
||||
|
|
|
|||
|
|
@ -298,7 +298,7 @@ func (c *StateCreator) scatterGatherEnvSecretFiles(st *HelmState, envSecretFiles
|
|||
}
|
||||
|
||||
release := &ReleaseSpec{}
|
||||
flags := st.appendConnectionFlags([]string{}, helm, release)
|
||||
flags := st.appendConnectionFlags([]string{}, release)
|
||||
decFile, err := helm.DecryptSecret(st.createHelmContext(release, 0), urlOrPath, flags...)
|
||||
if err != nil {
|
||||
results <- secretResult{secret.id, nil, err, secret.path}
|
||||
|
|
|
|||
|
|
@ -27,16 +27,14 @@ func (st *HelmState) appendHelmXFlags(flags []string, release *ReleaseSpec) []st
|
|||
|
||||
// append post-renderer flags to helm flags
|
||||
func (st *HelmState) appendPostRenderFlags(flags []string, release *ReleaseSpec, helm helmexec.Interface) []string {
|
||||
if helm.IsHelm3() {
|
||||
switch {
|
||||
// helm.GetPostRenderer() comes from cmd flag.
|
||||
case helm.GetPostRenderer() != "":
|
||||
flags = append(flags, "--post-renderer", helm.GetPostRenderer())
|
||||
case release.PostRenderer != nil && *release.PostRenderer != "":
|
||||
flags = append(flags, "--post-renderer", *release.PostRenderer)
|
||||
case st.HelmDefaults.PostRenderer != nil && *st.HelmDefaults.PostRenderer != "":
|
||||
flags = append(flags, "--post-renderer", *st.HelmDefaults.PostRenderer)
|
||||
}
|
||||
switch {
|
||||
// helm.GetPostRenderer() comes from cmd flag.
|
||||
case helm.GetPostRenderer() != "":
|
||||
flags = append(flags, "--post-renderer", helm.GetPostRenderer())
|
||||
case release.PostRenderer != nil && *release.PostRenderer != "":
|
||||
flags = append(flags, "--post-renderer", *release.PostRenderer)
|
||||
case st.HelmDefaults.PostRenderer != nil && *st.HelmDefaults.PostRenderer != "":
|
||||
flags = append(flags, "--post-renderer", *st.HelmDefaults.PostRenderer)
|
||||
}
|
||||
return flags
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,15 +67,6 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R
|
|||
result.InstalledTemplate = &resultTmpl
|
||||
}
|
||||
|
||||
if result.TillerlessTemplate != nil {
|
||||
ts := *result.TillerlessTemplate
|
||||
resultTmpl, err := renderer.RenderTemplateContentToString([]byte(ts))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed executing template expressions in release \"%s\".version = \"%s\": %v", r.Name, ts, err)
|
||||
}
|
||||
result.TillerlessTemplate = &resultTmpl
|
||||
}
|
||||
|
||||
if result.VerifyTemplate != nil {
|
||||
ts := *result.VerifyTemplate
|
||||
resultTmpl, err := renderer.RenderTemplateContentToString([]byte(ts))
|
||||
|
|
|
|||
|
|
@ -144,11 +144,9 @@ type SubhelmfileEnvironmentSpec struct {
|
|||
|
||||
// HelmSpec to defines helmDefault values
|
||||
type HelmSpec struct {
|
||||
KubeContext string `yaml:"kubeContext,omitempty"`
|
||||
TillerNamespace string `yaml:"tillerNamespace,omitempty"`
|
||||
Tillerless bool `yaml:"tillerless"`
|
||||
Args []string `yaml:"args,omitempty"`
|
||||
Verify bool `yaml:"verify"`
|
||||
KubeContext string `yaml:"kubeContext,omitempty"`
|
||||
Args []string `yaml:"args,omitempty"`
|
||||
Verify bool `yaml:"verify"`
|
||||
// Devel, when set to true, use development versions, too. Equivalent to version '>0.0.0-0'
|
||||
Devel bool `yaml:"devel"`
|
||||
// Wait, if set to true, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment are in a ready state before marking the release as successful
|
||||
|
|
@ -295,9 +293,6 @@ type ReleaseSpec struct {
|
|||
|
||||
ValuesPathPrefix string `yaml:"valuesPathPrefix,omitempty"`
|
||||
|
||||
TillerNamespace string `yaml:"tillerNamespace,omitempty"`
|
||||
Tillerless *bool `yaml:"tillerless,omitempty"`
|
||||
|
||||
KubeContext string `yaml:"kubeContext,omitempty"`
|
||||
|
||||
TLS *bool `yaml:"tls,omitempty"`
|
||||
|
|
@ -306,10 +301,9 @@ type ReleaseSpec struct {
|
|||
TLSCert string `yaml:"tlsCert,omitempty"`
|
||||
|
||||
// These values are used in templating
|
||||
TillerlessTemplate *string `yaml:"tillerlessTemplate,omitempty"`
|
||||
VerifyTemplate *string `yaml:"verifyTemplate,omitempty"`
|
||||
WaitTemplate *string `yaml:"waitTemplate,omitempty"`
|
||||
InstalledTemplate *string `yaml:"installedTemplate,omitempty"`
|
||||
VerifyTemplate *string `yaml:"verifyTemplate,omitempty"`
|
||||
WaitTemplate *string `yaml:"waitTemplate,omitempty"`
|
||||
InstalledTemplate *string `yaml:"installedTemplate,omitempty"`
|
||||
|
||||
// These settings requires helm-x integration to work
|
||||
Dependencies []Dependency `yaml:"dependencies,omitempty"`
|
||||
|
|
@ -400,8 +394,7 @@ const MissingFileHandlerWarn = "Warn"
|
|||
const MissingFileHandlerDebug = "Debug"
|
||||
|
||||
var DefaultFetchOutputDirTemplate = path.Join(
|
||||
"{{ .OutputDir }}{{ if .Release.TillerNamespace }}",
|
||||
"{{ .Release.TillerNamespace }}{{ end }}{{ if .Release.Namespace }}",
|
||||
"{{ .OutputDir }}{{ if .Release.Namespace }}",
|
||||
"{{ .Release.Namespace }}{{ end }}{{ if .Release.KubeContext }}",
|
||||
"{{ .Release.KubeContext }}{{ end }}",
|
||||
"{{ .Release.Name }}",
|
||||
|
|
@ -432,8 +425,6 @@ func (st *HelmState) ApplyOverrides(spec *ReleaseSpec) {
|
|||
|
||||
if len(components) > 1 {
|
||||
ns = components[len(components)-2]
|
||||
} else if spec.TillerNamespace != "" {
|
||||
ns = spec.TillerNamespace
|
||||
} else {
|
||||
ns = spec.Namespace
|
||||
}
|
||||
|
|
@ -721,17 +712,14 @@ func ReleaseToID(r *ReleaseSpec) string {
|
|||
id += kc + "/"
|
||||
}
|
||||
|
||||
tns := r.TillerNamespace
|
||||
ns := r.Namespace
|
||||
|
||||
if tns != "" {
|
||||
id += tns + "/"
|
||||
} else if ns != "" {
|
||||
if ns != "" {
|
||||
id += ns + "/"
|
||||
}
|
||||
|
||||
if kc != "" {
|
||||
if tns == "" && ns == "" {
|
||||
if ns == "" {
|
||||
// This is intentional to avoid conflating kc=,ns=foo,name=bar and kc=foo,ns=,name=bar.
|
||||
// Before https://github.com/roboll/helmfile/pull/1823 they were both `foo/bar` which turned out to break `needs` in many ways.
|
||||
//
|
||||
|
|
@ -780,15 +768,10 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h
|
|||
relErr = newReleaseFailedError(release, err)
|
||||
} else {
|
||||
var args []string
|
||||
if helm.IsHelm3() {
|
||||
args = []string{}
|
||||
if release.Namespace != "" {
|
||||
args = append(args, "--namespace", release.Namespace)
|
||||
}
|
||||
} else {
|
||||
args = []string{"--purge"}
|
||||
if release.Namespace != "" {
|
||||
args = append(args, "--namespace", release.Namespace)
|
||||
}
|
||||
deletionFlags := st.appendConnectionFlags(args, helm, release)
|
||||
deletionFlags := st.appendConnectionFlags(args, release)
|
||||
m.Lock()
|
||||
if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil {
|
||||
affectedReleases.Failed = append(affectedReleases.Failed, release)
|
||||
|
|
@ -893,12 +876,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme
|
|||
relErr = newReleaseFailedError(release, err)
|
||||
} else if installed {
|
||||
var args []string
|
||||
if helm.IsHelm3() {
|
||||
args = []string{}
|
||||
} else {
|
||||
args = []string{"--purge"}
|
||||
}
|
||||
deletionFlags := st.appendConnectionFlags(args, helm, release)
|
||||
deletionFlags := st.appendConnectionFlags(args, release)
|
||||
m.Lock()
|
||||
if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil {
|
||||
affectedReleases.Failed = append(affectedReleases.Failed, release)
|
||||
|
|
@ -973,15 +951,11 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme
|
|||
}
|
||||
|
||||
func (st *HelmState) listReleases(context helmexec.HelmContext, helm helmexec.Interface, release *ReleaseSpec) (string, error) {
|
||||
flags := st.connectionFlags(helm, release)
|
||||
if helm.IsHelm3() {
|
||||
if release.Namespace != "" {
|
||||
flags = append(flags, "--namespace", release.Namespace)
|
||||
}
|
||||
flags = append(flags, "--uninstalling")
|
||||
} else {
|
||||
flags = append(flags, "--deleting")
|
||||
flags := st.connectionFlags(release)
|
||||
if release.Namespace != "" {
|
||||
flags = append(flags, "--namespace", release.Namespace)
|
||||
}
|
||||
flags = append(flags, "--uninstalling")
|
||||
flags = append(flags, "--deployed", "--failed", "--pending")
|
||||
return helm.List(context, "^"+release.Name+"$", flags...)
|
||||
}
|
||||
|
|
@ -1107,12 +1081,6 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
|
|||
jobQueue := make(chan *ReleaseSpec, len(releases))
|
||||
results := make(chan *chartPrepareResult, len(releases))
|
||||
|
||||
var helm3 bool
|
||||
|
||||
if helm != nil {
|
||||
helm3 = helm.IsHelm3()
|
||||
}
|
||||
|
||||
if !opts.SkipResolve {
|
||||
updated, err := st.ResolveDeps()
|
||||
if err != nil {
|
||||
|
|
@ -1193,7 +1161,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
|
|||
if chartification != nil && helmfileCommand != "pull" {
|
||||
c := chartify.New(
|
||||
chartify.HelmBin(st.DefaultHelmBinary),
|
||||
chartify.UseHelm3(helm3),
|
||||
chartify.UseHelm3(true),
|
||||
chartify.WithLogf(st.logger.Debugf),
|
||||
)
|
||||
|
||||
|
|
@ -1348,7 +1316,7 @@ func (st *HelmState) runHelmDepBuilds(helm helmexec.Interface, concurrency int,
|
|||
//
|
||||
// See https://github.com/roboll/helmfile/issues/1521
|
||||
for _, r := range builds {
|
||||
buildDepsFlags := getBuildDepsFlags(helm, r)
|
||||
buildDepsFlags := getBuildDepsFlags(r)
|
||||
if err := helm.BuildDeps(r.releaseName, r.chartPath, buildDepsFlags...); err != nil {
|
||||
if r.chartFetchedByGoGetter {
|
||||
diagnostic := fmt.Sprintf(
|
||||
|
|
@ -1855,14 +1823,6 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
|
|||
}
|
||||
|
||||
func (st *HelmState) createHelmContext(spec *ReleaseSpec, workerIndex int) helmexec.HelmContext {
|
||||
namespace := st.HelmDefaults.TillerNamespace
|
||||
if spec.TillerNamespace != "" {
|
||||
namespace = spec.TillerNamespace
|
||||
}
|
||||
tillerless := st.HelmDefaults.Tillerless
|
||||
if spec.Tillerless != nil {
|
||||
tillerless = *spec.Tillerless
|
||||
}
|
||||
historyMax := 10
|
||||
if st.HelmDefaults.HistoryMax != nil {
|
||||
historyMax = *st.HelmDefaults.HistoryMax
|
||||
|
|
@ -1872,10 +1832,8 @@ func (st *HelmState) createHelmContext(spec *ReleaseSpec, workerIndex int) helme
|
|||
}
|
||||
|
||||
return helmexec.HelmContext{
|
||||
Tillerless: tillerless,
|
||||
TillerNamespace: namespace,
|
||||
WorkerIndex: workerIndex,
|
||||
HistoryMax: historyMax,
|
||||
WorkerIndex: workerIndex,
|
||||
HistoryMax: historyMax,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2018,10 +1976,10 @@ func (st *HelmState) ReleaseStatuses(helm helmexec.Interface, workerLimit int) [
|
|||
st.ApplyOverrides(&release)
|
||||
|
||||
flags := []string{}
|
||||
if helm.IsHelm3() && release.Namespace != "" {
|
||||
if release.Namespace != "" {
|
||||
flags = append(flags, "--namespace", release.Namespace)
|
||||
}
|
||||
flags = st.appendConnectionFlags(flags, helm, &release)
|
||||
flags = st.appendConnectionFlags(flags, &release)
|
||||
|
||||
return helm.ReleaseStatus(st.createHelmContext(&release, workerIndex), release.Name, flags...)
|
||||
})
|
||||
|
|
@ -2032,12 +1990,9 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel
|
|||
return st.scatterGatherReleases(helm, concurrency, func(release ReleaseSpec, workerIndex int) error {
|
||||
st.ApplyOverrides(&release)
|
||||
|
||||
flags := []string{}
|
||||
if purge && !helm.IsHelm3() {
|
||||
flags = append(flags, "--purge")
|
||||
}
|
||||
flags = st.appendConnectionFlags(flags, helm, &release)
|
||||
if helm.IsHelm3() && release.Namespace != "" {
|
||||
flags := make([]string, 0)
|
||||
flags = st.appendConnectionFlags(flags, &release)
|
||||
if release.Namespace != "" {
|
||||
flags = append(flags, "--namespace", release.Namespace)
|
||||
}
|
||||
context := st.createHelmContext(&release, workerIndex)
|
||||
|
|
@ -2089,27 +2044,22 @@ func (st *HelmState) TestReleases(helm helmexec.Interface, cleanup bool, timeout
|
|||
}
|
||||
|
||||
flags := []string{}
|
||||
if helm.IsHelm3() && release.Namespace != "" {
|
||||
if release.Namespace != "" {
|
||||
flags = append(flags, "--namespace", release.Namespace)
|
||||
}
|
||||
if cleanup && !helm.IsHelm3() {
|
||||
flags = append(flags, "--cleanup")
|
||||
}
|
||||
if opts.Logs {
|
||||
flags = append(flags, "--logs")
|
||||
}
|
||||
|
||||
if timeout == EmptyTimeout {
|
||||
flags = append(flags, st.timeoutFlags(helm, &release)...)
|
||||
flags = append(flags, st.timeoutFlags(&release)...)
|
||||
} else {
|
||||
duration := strconv.Itoa(timeout)
|
||||
if helm.IsHelm3() {
|
||||
duration += "s"
|
||||
}
|
||||
duration += "s"
|
||||
flags = append(flags, "--timeout", duration)
|
||||
}
|
||||
|
||||
flags = st.appendConnectionFlags(flags, helm, &release)
|
||||
flags = st.appendConnectionFlags(flags, &release)
|
||||
|
||||
return helm.TestRelease(st.createHelmContext(&release, workerIndex), release.Name, flags...)
|
||||
})
|
||||
|
|
@ -2424,62 +2374,48 @@ func findChartDirectory(topLevelDir string) (string, error) {
|
|||
}
|
||||
|
||||
// appendConnectionFlags append all the helm command-line flags related to K8s API and Tiller connection including the kubecontext
|
||||
func (st *HelmState) appendConnectionFlags(flags []string, helm helmexec.Interface, release *ReleaseSpec) []string {
|
||||
adds := st.connectionFlags(helm, release)
|
||||
func (st *HelmState) appendConnectionFlags(flags []string, release *ReleaseSpec) []string {
|
||||
adds := st.connectionFlags(release)
|
||||
flags = append(flags, adds...)
|
||||
return flags
|
||||
}
|
||||
|
||||
func (st *HelmState) connectionFlags(helm helmexec.Interface, release *ReleaseSpec) []string {
|
||||
func (st *HelmState) connectionFlags(release *ReleaseSpec) []string {
|
||||
flags := []string{}
|
||||
tillerless := st.HelmDefaults.Tillerless
|
||||
if release.Tillerless != nil {
|
||||
tillerless = *release.Tillerless
|
||||
if release.TLS != nil && *release.TLS || release.TLS == nil && st.HelmDefaults.TLS {
|
||||
flags = append(flags, "--tls")
|
||||
}
|
||||
if !tillerless {
|
||||
if !helm.IsHelm3() {
|
||||
if release.TillerNamespace != "" {
|
||||
flags = append(flags, "--tiller-namespace", release.TillerNamespace)
|
||||
} else if st.HelmDefaults.TillerNamespace != "" {
|
||||
flags = append(flags, "--tiller-namespace", st.HelmDefaults.TillerNamespace)
|
||||
}
|
||||
}
|
||||
|
||||
if release.TLS != nil && *release.TLS || release.TLS == nil && st.HelmDefaults.TLS {
|
||||
flags = append(flags, "--tls")
|
||||
}
|
||||
if release.TLSKey != "" {
|
||||
flags = append(flags, "--tls-key", release.TLSKey)
|
||||
} else if st.HelmDefaults.TLSKey != "" {
|
||||
flags = append(flags, "--tls-key", st.HelmDefaults.TLSKey)
|
||||
}
|
||||
|
||||
if release.TLSKey != "" {
|
||||
flags = append(flags, "--tls-key", release.TLSKey)
|
||||
} else if st.HelmDefaults.TLSKey != "" {
|
||||
flags = append(flags, "--tls-key", st.HelmDefaults.TLSKey)
|
||||
}
|
||||
if release.TLSCert != "" {
|
||||
flags = append(flags, "--tls-cert", release.TLSCert)
|
||||
} else if st.HelmDefaults.TLSCert != "" {
|
||||
flags = append(flags, "--tls-cert", st.HelmDefaults.TLSCert)
|
||||
}
|
||||
|
||||
if release.TLSCert != "" {
|
||||
flags = append(flags, "--tls-cert", release.TLSCert)
|
||||
} else if st.HelmDefaults.TLSCert != "" {
|
||||
flags = append(flags, "--tls-cert", st.HelmDefaults.TLSCert)
|
||||
}
|
||||
if release.TLSCACert != "" {
|
||||
flags = append(flags, "--tls-ca-cert", release.TLSCACert)
|
||||
} else if st.HelmDefaults.TLSCACert != "" {
|
||||
flags = append(flags, "--tls-ca-cert", st.HelmDefaults.TLSCACert)
|
||||
}
|
||||
|
||||
if release.TLSCACert != "" {
|
||||
flags = append(flags, "--tls-ca-cert", release.TLSCACert)
|
||||
} else if st.HelmDefaults.TLSCACert != "" {
|
||||
flags = append(flags, "--tls-ca-cert", st.HelmDefaults.TLSCACert)
|
||||
}
|
||||
|
||||
if release.KubeContext != "" {
|
||||
flags = append(flags, "--kube-context", release.KubeContext)
|
||||
} else if st.Environments[st.Env.Name].KubeContext != "" {
|
||||
flags = append(flags, "--kube-context", st.Environments[st.Env.Name].KubeContext)
|
||||
} else if st.HelmDefaults.KubeContext != "" {
|
||||
flags = append(flags, "--kube-context", st.HelmDefaults.KubeContext)
|
||||
}
|
||||
if release.KubeContext != "" {
|
||||
flags = append(flags, "--kube-context", release.KubeContext)
|
||||
} else if st.Environments[st.Env.Name].KubeContext != "" {
|
||||
flags = append(flags, "--kube-context", st.Environments[st.Env.Name].KubeContext)
|
||||
} else if st.HelmDefaults.KubeContext != "" {
|
||||
flags = append(flags, "--kube-context", st.HelmDefaults.KubeContext)
|
||||
}
|
||||
|
||||
return flags
|
||||
}
|
||||
|
||||
func (st *HelmState) timeoutFlags(helm helmexec.Interface, release *ReleaseSpec) []string {
|
||||
func (st *HelmState) timeoutFlags(release *ReleaseSpec) []string {
|
||||
var flags []string
|
||||
|
||||
timeout := st.HelmDefaults.Timeout
|
||||
|
|
@ -2488,9 +2424,7 @@ func (st *HelmState) timeoutFlags(helm helmexec.Interface, release *ReleaseSpec)
|
|||
}
|
||||
if timeout != 0 {
|
||||
duration := strconv.Itoa(timeout)
|
||||
if helm.IsHelm3() {
|
||||
duration += "s"
|
||||
}
|
||||
duration += "s"
|
||||
flags = append(flags, "--timeout", duration)
|
||||
}
|
||||
|
||||
|
|
@ -2512,7 +2446,7 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
|
|||
flags = append(flags, "--wait-for-jobs")
|
||||
}
|
||||
|
||||
flags = append(flags, st.timeoutFlags(helm, release)...)
|
||||
flags = append(flags, st.timeoutFlags(release)...)
|
||||
|
||||
if release.Force != nil && *release.Force || release.Force == nil && st.HelmDefaults.Force {
|
||||
flags = append(flags, "--force")
|
||||
|
|
@ -2545,7 +2479,7 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
|
|||
flags = append(flags, "--disable-openapi-validation")
|
||||
}
|
||||
|
||||
flags = st.appendConnectionFlags(flags, helm, release)
|
||||
flags = st.appendConnectionFlags(flags, release)
|
||||
|
||||
flags = st.appendHelmXFlags(flags, release)
|
||||
|
||||
|
|
@ -2561,14 +2495,7 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
|
|||
func (st *HelmState) flagsForTemplate(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) ([]string, []string, error) {
|
||||
var flags []string
|
||||
|
||||
// `helm template` in helm v2 does not support `--version` flag. So we fetch with the version flag and then template
|
||||
// without the flag. See PrepareCharts function to see the Helmfile implementation of chart fetching.
|
||||
//
|
||||
// `helm template` in helm v3 supports `--version` and it automatically fetches the remote chart to template,
|
||||
// so we skip fetching on helmfile-side and let helm fetch it.
|
||||
if helm.IsHelm3() {
|
||||
flags = st.chartVersionFlags(release)
|
||||
}
|
||||
flags = st.chartVersionFlags(release)
|
||||
|
||||
flags = st.appendHelmXFlags(flags, release)
|
||||
|
||||
|
|
@ -2609,7 +2536,7 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec,
|
|||
|
||||
flags = st.appendApiVersionsFlags(flags, release)
|
||||
|
||||
flags = st.appendConnectionFlags(flags, helm, release)
|
||||
flags = st.appendConnectionFlags(flags, release)
|
||||
|
||||
flags = st.appendHelmXFlags(flags, release)
|
||||
|
||||
|
|
@ -2932,7 +2859,7 @@ func (st *HelmState) generateSecretValuesFiles(helm helmexec.Interface, release
|
|||
}
|
||||
path := paths[0]
|
||||
|
||||
decryptFlags := st.appendConnectionFlags([]string{}, helm, release)
|
||||
decryptFlags := st.appendConnectionFlags([]string{}, release)
|
||||
valfile, err := helm.DecryptSecret(st.createHelmContext(release, workerIndex), path, decryptFlags...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
|||
|
|
@ -66,15 +66,6 @@ func updateBoolTemplatedValues(r *ReleaseSpec) error {
|
|||
}
|
||||
}
|
||||
|
||||
if r.TillerlessTemplate != nil {
|
||||
if tillerless, err := getBoolRefFromStringTemplate(*r.TillerlessTemplate); err != nil {
|
||||
return fmt.Errorf("tillerlessTemplate: %v", err)
|
||||
} else {
|
||||
r.TillerlessTemplate = nil
|
||||
r.Tillerless = tillerless
|
||||
}
|
||||
}
|
||||
|
||||
if r.VerifyTemplate != nil {
|
||||
if verify, err := getBoolRefFromStringTemplate(*r.VerifyTemplate); err != nil {
|
||||
return fmt.Errorf("verifyTemplate: %v", err)
|
||||
|
|
|
|||
|
|
@ -63,25 +63,23 @@ func TestHelmState_executeTemplates(t *testing.T) {
|
|||
{
|
||||
name: "Has template expressions in boolean values",
|
||||
input: ReleaseSpec{
|
||||
Chart: "test-chart",
|
||||
Name: "app-dev",
|
||||
Namespace: "dev",
|
||||
Labels: map[string]string{"id": "app"},
|
||||
InstalledTemplate: func(i string) *string { return &i }(`{{ eq .Release.Labels.id "app" | ternary "true" "false" }}`),
|
||||
VerifyTemplate: func(i string) *string { return &i }(`{{ true }}`),
|
||||
Verify: func(i bool) *bool { return &i }(false),
|
||||
WaitTemplate: func(i string) *string { return &i }(`{{ false }}`),
|
||||
TillerlessTemplate: func(i string) *string { return &i }(`true`),
|
||||
Chart: "test-chart",
|
||||
Name: "app-dev",
|
||||
Namespace: "dev",
|
||||
Labels: map[string]string{"id": "app"},
|
||||
InstalledTemplate: func(i string) *string { return &i }(`{{ eq .Release.Labels.id "app" | ternary "true" "false" }}`),
|
||||
VerifyTemplate: func(i string) *string { return &i }(`{{ true }}`),
|
||||
Verify: func(i bool) *bool { return &i }(false),
|
||||
WaitTemplate: func(i string) *string { return &i }(`{{ false }}`),
|
||||
},
|
||||
want: ReleaseSpec{
|
||||
Chart: "test-chart",
|
||||
Name: "app-dev",
|
||||
Namespace: "dev",
|
||||
Labels: map[string]string{"id": "app"},
|
||||
Installed: func(i bool) *bool { return &i }(true),
|
||||
Verify: func(i bool) *bool { return &i }(true),
|
||||
Wait: func(i bool) *bool { return &i }(false),
|
||||
Tillerless: func(i bool) *bool { return &i }(true),
|
||||
Chart: "test-chart",
|
||||
Name: "app-dev",
|
||||
Namespace: "dev",
|
||||
Labels: map[string]string{"id": "app"},
|
||||
Installed: func(i bool) *bool { return &i }(true),
|
||||
Verify: func(i bool) *bool { return &i }(true),
|
||||
Wait: func(i bool) *bool { return &i }(false),
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -182,11 +180,6 @@ func TestHelmState_executeTemplates(t *testing.T) {
|
|||
boolPtrToString(tt.want.Installed), boolPtrToString(actual.Installed),
|
||||
)
|
||||
}
|
||||
if !reflect.DeepEqual(actual.Tillerless, tt.want.Tillerless) {
|
||||
t.Errorf("expected actual.Tillerless %+v, got %+v",
|
||||
boolPtrToString(tt.want.Tillerless), boolPtrToString(actual.Tillerless),
|
||||
)
|
||||
}
|
||||
if !reflect.DeepEqual(actual.Verify, tt.want.Verify) {
|
||||
t.Errorf("expected actual.Verify %+v, got %+v",
|
||||
boolPtrToString(tt.want.Verify), boolPtrToString(actual.Verify),
|
||||
|
|
|
|||
|
|
@ -22,16 +22,6 @@ func (st *HelmState) scatterGather(concurrency int, items int, produceInputs fun
|
|||
concurrency = items
|
||||
}
|
||||
|
||||
for _, r := range st.Releases {
|
||||
if r.Tillerless != nil {
|
||||
if *r.Tillerless {
|
||||
concurrency = 1
|
||||
}
|
||||
} else if st.HelmDefaults.Tillerless {
|
||||
concurrency = 1
|
||||
}
|
||||
}
|
||||
|
||||
// WaitGroup is required to wait until goroutine per job in job queue cleanly stops.
|
||||
var waitGroup sync.WaitGroup
|
||||
waitGroup.Add(concurrency)
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ func TestHelmState_flagsForUpgrade(t *testing.T) {
|
|||
},
|
||||
want: []string{
|
||||
"--version", "0.1",
|
||||
"--timeout", "123",
|
||||
"--timeout", "123s",
|
||||
"--namespace", "test-namespace",
|
||||
},
|
||||
},
|
||||
|
|
@ -426,7 +426,7 @@ func TestHelmState_flagsForUpgrade(t *testing.T) {
|
|||
},
|
||||
want: []string{
|
||||
"--version", "0.1",
|
||||
"--timeout", "123",
|
||||
"--timeout", "123s",
|
||||
"--namespace", "test-namespace",
|
||||
},
|
||||
},
|
||||
|
|
@ -534,79 +534,6 @@ func TestHelmState_flagsForUpgrade(t *testing.T) {
|
|||
"--namespace", "test-namespace",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "tiller",
|
||||
defaults: HelmSpec{},
|
||||
release: &ReleaseSpec{
|
||||
Chart: "test/chart",
|
||||
Version: "0.1",
|
||||
Name: "test-charts",
|
||||
TLS: boolValue(true),
|
||||
TillerNamespace: "tiller-system",
|
||||
TLSKey: "key.pem",
|
||||
TLSCert: "cert.pem",
|
||||
TLSCACert: "ca.pem",
|
||||
},
|
||||
want: []string{
|
||||
"--version", "0.1",
|
||||
"--tiller-namespace", "tiller-system",
|
||||
"--tls",
|
||||
"--tls-key", "key.pem",
|
||||
"--tls-cert", "cert.pem",
|
||||
"--tls-ca-cert", "ca.pem",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "tiller-override-defaults",
|
||||
defaults: HelmSpec{
|
||||
TLS: false,
|
||||
TillerNamespace: "a",
|
||||
TLSKey: "b.pem",
|
||||
TLSCert: "c.pem",
|
||||
TLSCACert: "d.pem",
|
||||
},
|
||||
release: &ReleaseSpec{
|
||||
Chart: "test/chart",
|
||||
Version: "0.1",
|
||||
Name: "test-charts",
|
||||
TLS: boolValue(true),
|
||||
TillerNamespace: "tiller-system",
|
||||
TLSKey: "key.pem",
|
||||
TLSCert: "cert.pem",
|
||||
TLSCACert: "ca.pem",
|
||||
},
|
||||
want: []string{
|
||||
"--version", "0.1",
|
||||
"--tiller-namespace", "tiller-system",
|
||||
"--tls",
|
||||
"--tls-key", "key.pem",
|
||||
"--tls-cert", "cert.pem",
|
||||
"--tls-ca-cert", "ca.pem",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "tiller-from-defaults",
|
||||
defaults: HelmSpec{
|
||||
TLS: true,
|
||||
TillerNamespace: "tiller-system",
|
||||
TLSKey: "key.pem",
|
||||
TLSCert: "cert.pem",
|
||||
TLSCACert: "ca.pem",
|
||||
},
|
||||
release: &ReleaseSpec{
|
||||
Chart: "test/chart",
|
||||
Version: "0.1",
|
||||
Name: "test-charts",
|
||||
},
|
||||
want: []string{
|
||||
"--version", "0.1",
|
||||
"--tiller-namespace", "tiller-system",
|
||||
"--tls",
|
||||
"--tls-key", "key.pem",
|
||||
"--tls-cert", "cert.pem",
|
||||
"--tls-ca-cert", "ca.pem",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "create-namespace-default-helm3.2",
|
||||
defaults: HelmSpec{
|
||||
|
|
@ -1263,18 +1190,6 @@ func TestHelmState_SyncReleases(t *testing.T) {
|
|||
helm: &exectest.Helm{},
|
||||
wantReleases: []exectest.Release{{Name: "releaseName", Flags: []string{"--reset-values"}}},
|
||||
},
|
||||
{
|
||||
name: "with tiller args",
|
||||
releases: []ReleaseSpec{
|
||||
{
|
||||
Name: "releaseName",
|
||||
Chart: "foo",
|
||||
TillerNamespace: "tillerns",
|
||||
},
|
||||
},
|
||||
helm: &exectest.Helm{},
|
||||
wantReleases: []exectest.Release{{Name: "releaseName", Flags: []string{"--tiller-namespace", "tillerns", "--reset-values"}}},
|
||||
},
|
||||
{
|
||||
name: "escaped values",
|
||||
releases: []ReleaseSpec{
|
||||
|
|
@ -1478,6 +1393,7 @@ func TestHelmState_SyncReleases_MissingValuesFileForUndesiredRelease(t *testing.
|
|||
state = injectFs(state, fs)
|
||||
helm := &exectest.Helm{
|
||||
Lists: map[exectest.ListKey]string{},
|
||||
Helm3: true,
|
||||
}
|
||||
//simulate the helm.list call result
|
||||
helm.Lists[exectest.ListKey{Filter: "^" + tt.release.Name + "$"}] = tt.listResult
|
||||
|
|
@ -1610,8 +1526,7 @@ func TestHelmState_SyncReleasesAffectedRealeases(t *testing.T) {
|
|||
},
|
||||
},
|
||||
}
|
||||
for i := range tests {
|
||||
tt := tests[i]
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
state := &HelmState{
|
||||
ReleaseSetSpec: ReleaseSetSpec{
|
||||
|
|
@ -1627,7 +1542,7 @@ func TestHelmState_SyncReleasesAffectedRealeases(t *testing.T) {
|
|||
//simulate the release is already installed
|
||||
for i, release := range tt.releases {
|
||||
if tt.installed != nil && tt.installed[i] {
|
||||
helm.Lists[exectest.ListKey{Filter: "^" + release.Name + "$", Flags: "--deleting--deployed--failed--pending"}] = release.Name
|
||||
helm.Lists[exectest.ListKey{Filter: "^" + release.Name + "$", Flags: "--uninstalling--deployed--failed--pending"}] = release.Name
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1724,8 +1639,7 @@ func TestGetDeployedVersion(t *testing.T) {
|
|||
installedVersion: "3.2.0",
|
||||
},
|
||||
}
|
||||
for i := range tests {
|
||||
tt := tests[i]
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
state := &HelmState{
|
||||
ReleaseSetSpec: ReleaseSetSpec{
|
||||
|
|
@ -1740,7 +1654,7 @@ func TestGetDeployedVersion(t *testing.T) {
|
|||
Lists: map[exectest.ListKey]string{},
|
||||
}
|
||||
// simulate the helm.list call result
|
||||
helm.Lists[exectest.ListKey{Filter: "^" + tt.release.Name + "$", Flags: "--deleting--deployed--failed--pending"}] = tt.listResult
|
||||
helm.Lists[exectest.ListKey{Filter: "^" + tt.release.Name + "$", Flags: "--uninstalling--deployed--failed--pending"}] = tt.listResult
|
||||
|
||||
affectedReleases := AffectedReleases{}
|
||||
state.SyncReleases(&affectedReleases, helm, []string{}, 1)
|
||||
|
|
@ -1770,18 +1684,6 @@ func TestHelmState_DiffReleases(t *testing.T) {
|
|||
helm: &exectest.Helm{},
|
||||
wantReleases: []exectest.Release{{Name: "releaseName", Flags: []string{"--reset-values"}}},
|
||||
},
|
||||
{
|
||||
name: "with tiller args",
|
||||
releases: []ReleaseSpec{
|
||||
{
|
||||
Name: "releaseName",
|
||||
Chart: "foo",
|
||||
TillerNamespace: "tillerns",
|
||||
},
|
||||
},
|
||||
helm: &exectest.Helm{},
|
||||
wantReleases: []exectest.Release{{Name: "releaseName", Flags: []string{"--tiller-namespace", "tillerns", "--reset-values"}}},
|
||||
},
|
||||
{
|
||||
name: "escaped values",
|
||||
releases: []ReleaseSpec{
|
||||
|
|
@ -2100,6 +2002,7 @@ func TestHelmState_DiffReleasesCleanup(t *testing.T) {
|
|||
func TestHelmState_UpdateDeps(t *testing.T) {
|
||||
helm := &exectest.Helm{
|
||||
UpdateDepsCallbacks: map[string]func(string) error{},
|
||||
Helm3: true,
|
||||
}
|
||||
|
||||
var generatedDir string
|
||||
|
|
@ -2121,7 +2024,7 @@ func TestHelmState_UpdateDeps(t *testing.T) {
|
|||
digest: sha256:8194b597c85bb3d1fee8476d4a486e952681d5c65f185ad5809f2118bc4079b5
|
||||
generated: 2019-05-16T15:42:45.50486+09:00
|
||||
`)
|
||||
filename := filepath.Join(generatedDir, "requirements.lock")
|
||||
filename := filepath.Join(generatedDir, "Chart.lock")
|
||||
logger.Debugf("test: writing %s: %s", filename, content)
|
||||
return os.WriteFile(filename, content, 0644)
|
||||
}
|
||||
|
|
@ -2350,19 +2253,6 @@ func TestHelmState_ReleaseStatuses(t *testing.T) {
|
|||
helm: &exectest.Helm{},
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "with tiller args",
|
||||
releases: []ReleaseSpec{
|
||||
{
|
||||
Name: "releaseA",
|
||||
TillerNamespace: "tillerns",
|
||||
},
|
||||
},
|
||||
helm: &exectest.Helm{},
|
||||
want: []exectest.Release{
|
||||
{Name: "releaseA", Flags: []string{"--tiller-namespace", "tillerns"}},
|
||||
},
|
||||
},
|
||||
}
|
||||
for i := range tests {
|
||||
tt := tests[i]
|
||||
|
|
@ -2402,13 +2292,12 @@ func TestHelmState_ReleaseStatuses(t *testing.T) {
|
|||
|
||||
func TestHelmState_TestReleasesNoCleanUp(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
cleanup bool
|
||||
releases []ReleaseSpec
|
||||
helm *exectest.Helm
|
||||
want []exectest.Release
|
||||
wantErr bool
|
||||
tillerNamespace string
|
||||
name string
|
||||
cleanup bool
|
||||
releases []ReleaseSpec
|
||||
helm *exectest.Helm
|
||||
want []exectest.Release
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "happy path",
|
||||
|
|
@ -2418,7 +2307,7 @@ func TestHelmState_TestReleasesNoCleanUp(t *testing.T) {
|
|||
},
|
||||
},
|
||||
helm: &exectest.Helm{},
|
||||
want: []exectest.Release{{Name: "releaseA", Flags: []string{"--timeout", "1"}}},
|
||||
want: []exectest.Release{{Name: "releaseA", Flags: []string{"--timeout", "1s"}}},
|
||||
},
|
||||
{
|
||||
name: "do cleanup",
|
||||
|
|
@ -2429,7 +2318,7 @@ func TestHelmState_TestReleasesNoCleanUp(t *testing.T) {
|
|||
},
|
||||
},
|
||||
helm: &exectest.Helm{},
|
||||
want: []exectest.Release{{Name: "releaseB", Flags: []string{"--cleanup", "--timeout", "1"}}},
|
||||
want: []exectest.Release{{Name: "releaseB", Flags: []string{"--timeout", "1s"}}},
|
||||
},
|
||||
{
|
||||
name: "happy path",
|
||||
|
|
@ -2441,21 +2330,9 @@ func TestHelmState_TestReleasesNoCleanUp(t *testing.T) {
|
|||
helm: &exectest.Helm{},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "with tiller args",
|
||||
releases: []ReleaseSpec{
|
||||
{
|
||||
Name: "releaseA",
|
||||
TillerNamespace: "tillerns",
|
||||
},
|
||||
},
|
||||
helm: &exectest.Helm{},
|
||||
want: []exectest.Release{{Name: "releaseA", Flags: []string{"--timeout", "1", "--tiller-namespace", "tillerns"}}},
|
||||
},
|
||||
}
|
||||
for i := range tests {
|
||||
tt := tests[i]
|
||||
f := func(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
state := &HelmState{
|
||||
ReleaseSetSpec: ReleaseSetSpec{
|
||||
Releases: tt.releases,
|
||||
|
|
@ -2470,8 +2347,7 @@ func TestHelmState_TestReleasesNoCleanUp(t *testing.T) {
|
|||
if !reflect.DeepEqual(tt.helm.Releases, tt.want) {
|
||||
t.Errorf("HelmState.TestReleases() for [%s] = %v, want %v", tt.name, tt.helm.Releases, tt.want)
|
||||
}
|
||||
}
|
||||
t.Run(tt.name, f)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2529,16 +2405,16 @@ func TestHelmState_NoReleaseMatched(t *testing.T) {
|
|||
|
||||
func TestHelmState_Delete(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
deleted []exectest.Release
|
||||
wantErr bool
|
||||
desired *bool
|
||||
installed bool
|
||||
purge bool
|
||||
flags string
|
||||
tillerNamespace string
|
||||
kubeContext string
|
||||
defKubeContext string
|
||||
name string
|
||||
deleted []exectest.Release
|
||||
wantErr bool
|
||||
desired *bool
|
||||
installed bool
|
||||
purge bool
|
||||
flags string
|
||||
namespace string
|
||||
kubeContext string
|
||||
defKubeContext string
|
||||
}{
|
||||
{
|
||||
name: "desired and installed (purge=false)",
|
||||
|
|
@ -2570,7 +2446,7 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
desired: boolValue(true),
|
||||
installed: true,
|
||||
purge: true,
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--purge"}}},
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{}}},
|
||||
},
|
||||
{
|
||||
name: "desired but not installed (purge=false)",
|
||||
|
|
@ -2586,7 +2462,7 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
desired: boolValue(true),
|
||||
installed: false,
|
||||
purge: true,
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--purge"}}},
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{}}},
|
||||
},
|
||||
{
|
||||
name: "installed but filtered (purge=false)",
|
||||
|
|
@ -2602,7 +2478,7 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
desired: boolValue(false),
|
||||
installed: true,
|
||||
purge: true,
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--purge"}}},
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{}}},
|
||||
},
|
||||
{
|
||||
name: "not installed, and filtered (purge=false)",
|
||||
|
|
@ -2618,17 +2494,7 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
desired: boolValue(false),
|
||||
installed: false,
|
||||
purge: true,
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--purge"}}},
|
||||
},
|
||||
{
|
||||
name: "with tiller args",
|
||||
wantErr: false,
|
||||
desired: nil,
|
||||
installed: true,
|
||||
purge: true,
|
||||
tillerNamespace: "tillerns",
|
||||
flags: "--tiller-namespacetillerns",
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--purge", "--tiller-namespace", "tillerns"}}},
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{}}},
|
||||
},
|
||||
{
|
||||
name: "with kubecontext",
|
||||
|
|
@ -2638,7 +2504,7 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
purge: true,
|
||||
kubeContext: "ctx",
|
||||
flags: "--kube-contextctx",
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--purge", "--kube-context", "ctx"}}},
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--kube-context", "ctx"}}},
|
||||
},
|
||||
{
|
||||
name: "with default kubecontext",
|
||||
|
|
@ -2648,7 +2514,7 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
purge: true,
|
||||
defKubeContext: "defctx",
|
||||
flags: "--kube-contextdefctx",
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--purge", "--kube-context", "defctx"}}},
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--kube-context", "defctx"}}},
|
||||
},
|
||||
{
|
||||
name: "with non-default and default kubecontexts",
|
||||
|
|
@ -2659,21 +2525,20 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
kubeContext: "ctx",
|
||||
defKubeContext: "defctx",
|
||||
flags: "--kube-contextctx",
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--purge", "--kube-context", "ctx"}}},
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--kube-context", "ctx"}}},
|
||||
},
|
||||
}
|
||||
for i := range tests {
|
||||
tt := tests[i]
|
||||
f := func(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
name := "releaseA"
|
||||
if tt.wantErr {
|
||||
name = "releaseA-error"
|
||||
}
|
||||
release := ReleaseSpec{
|
||||
Name: name,
|
||||
Installed: tt.desired,
|
||||
TillerNamespace: tt.tillerNamespace,
|
||||
KubeContext: tt.kubeContext,
|
||||
Name: name,
|
||||
Installed: tt.desired,
|
||||
Namespace: tt.namespace,
|
||||
KubeContext: tt.kubeContext,
|
||||
}
|
||||
releases := []ReleaseSpec{
|
||||
release,
|
||||
|
|
@ -2691,6 +2556,7 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
helm := &exectest.Helm{
|
||||
Lists: map[exectest.ListKey]string{},
|
||||
Deleted: []exectest.Release{},
|
||||
Helm3: true,
|
||||
}
|
||||
if tt.installed {
|
||||
helm.Lists[exectest.ListKey{Filter: "^" + name + "$", Flags: tt.flags}] = name
|
||||
|
|
@ -2705,8 +2571,7 @@ func TestHelmState_Delete(t *testing.T) {
|
|||
} else if !(reflect.DeepEqual(tt.deleted, helm.Deleted) && (len(affectedReleases.Deleted) == len(tt.deleted))) {
|
||||
t.Errorf("unexpected deletions happened: expected %v, got %v", tt.deleted, helm.Deleted)
|
||||
}
|
||||
}
|
||||
t.Run(tt.name, f)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2758,6 +2623,7 @@ func TestDiffpareSyncReleases(t *testing.T) {
|
|||
}
|
||||
helm := &exectest.Helm{
|
||||
Lists: map[exectest.ListKey]string{},
|
||||
Helm3: true,
|
||||
}
|
||||
results, es := state.prepareDiffReleases(helm, []string{}, 1, false, false, []string{}, false, false, false, tt.diffOptions)
|
||||
|
||||
|
|
@ -2818,6 +2684,7 @@ func TestPrepareSyncReleases(t *testing.T) {
|
|||
}
|
||||
helm := &exectest.Helm{
|
||||
Lists: map[exectest.ListKey]string{},
|
||||
Helm3: true,
|
||||
}
|
||||
results, es := state.prepareSyncReleases(helm, []string{}, 1, tt.syncOptions)
|
||||
|
||||
|
|
@ -3126,14 +2993,6 @@ func TestGenerateChartPath(t *testing.T) {
|
|||
wantErr: false,
|
||||
expected: "/output-dir/release-name/chart-name/0.0.0",
|
||||
},
|
||||
{
|
||||
testName: "PathGeneratedWithGivenOutputDirAndGivenReleaseTillerNamespace",
|
||||
chartName: "chart-name",
|
||||
release: &ReleaseSpec{Name: "release-name", TillerNamespace: "tiller-namespace"},
|
||||
outputDir: "/output-dir",
|
||||
wantErr: false,
|
||||
expected: "/output-dir/tiller-namespace/release-name/chart-name/latest",
|
||||
},
|
||||
{
|
||||
testName: "PathGeneratedWithGivenOutputDirAndGivenReleaseNamespace",
|
||||
chartName: "chart-name",
|
||||
|
|
@ -3142,14 +3001,6 @@ func TestGenerateChartPath(t *testing.T) {
|
|||
wantErr: false,
|
||||
expected: "/output-dir/release-namespace/release-name/chart-name/latest",
|
||||
},
|
||||
{
|
||||
testName: "PathGeneratedWithGivenOutputDirAndGivenReleaseTillerNamespaceAndGivenReleaseNamespace",
|
||||
chartName: "chart-name",
|
||||
release: &ReleaseSpec{Name: "release-name", TillerNamespace: "tiller-namespace", Namespace: "release-namespace"},
|
||||
outputDir: "/output-dir",
|
||||
wantErr: false,
|
||||
expected: "/output-dir/tiller-namespace/release-namespace/release-name/chart-name/latest",
|
||||
},
|
||||
{
|
||||
testName: "PathGeneratedWithGivenOutputDirAndGivenReleaseKubeContext",
|
||||
chartName: "chart-name",
|
||||
|
|
@ -3166,22 +3017,6 @@ func TestGenerateChartPath(t *testing.T) {
|
|||
wantErr: false,
|
||||
expected: "/output-dir/release-namespace/kube-context/release-name/chart-name/latest",
|
||||
},
|
||||
{
|
||||
testName: "PathGeneratedWithGivenOutputDirAndGivenReleaseTillerNamespaceAndGivenReleaseKubeContext",
|
||||
chartName: "chart-name",
|
||||
release: &ReleaseSpec{Name: "release-name", TillerNamespace: "tiller-namespace", KubeContext: "kube-context"},
|
||||
outputDir: "/output-dir",
|
||||
wantErr: false,
|
||||
expected: "/output-dir/tiller-namespace/kube-context/release-name/chart-name/latest",
|
||||
},
|
||||
{
|
||||
testName: "PathGeneratedWithGivenOutputDirAndGivenReleaseTillerNamespaceAndGivenReleaseNamespaceAndGivenReleaseKubeContext",
|
||||
chartName: "chart-name",
|
||||
release: &ReleaseSpec{Name: "release-name", TillerNamespace: "tiller-namespace", Namespace: "release-namespace", KubeContext: "kube-context"},
|
||||
outputDir: "/output-dir",
|
||||
wantErr: false,
|
||||
expected: "/output-dir/tiller-namespace/release-namespace/kube-context/release-name/chart-name/latest",
|
||||
},
|
||||
{
|
||||
testName: "PathGeneratedWithGivenOutputDirAndGivenOutputDirTemplateWithFieldNameOutputDir",
|
||||
chartName: "chart-name",
|
||||
|
|
|
|||
|
|
@ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) {
|
|||
run(testcase{
|
||||
subject: "baseline",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
want: "foo-values-648b77cdd4",
|
||||
want: "foo-values-5d85cdbb5d",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different bytes content",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
data: []byte(`{"k":"v"}`),
|
||||
want: "foo-values-5dfbf8fdb7",
|
||||
want: "foo-values-9548bdcd9",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different map content",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
data: map[string]interface{}{"k": "v"},
|
||||
want: "foo-values-7565d47dd9",
|
||||
want: "foo-values-5db884fb87",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different chart",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
|
||||
want: "foo-values-7c4f76c445",
|
||||
want: "foo-values-6596c997cc",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different name",
|
||||
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
|
||||
want: "bar-values-644fb47865",
|
||||
want: "bar-values-5ccfd9f8b5",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "specific ns",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
|
||||
want: "myns-foo-values-c5ddcc795",
|
||||
want: "myns-foo-values-bc7cd5b87",
|
||||
})
|
||||
|
||||
for id, n := range ids {
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/helmfile/helmfile/pkg/helmexec"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
@ -65,9 +63,9 @@ func normalizeChart(basePath, chart string) string {
|
|||
return filepath.Join(basePath, chart)
|
||||
}
|
||||
|
||||
func getBuildDepsFlags(helm helmexec.Interface, cpr *chartPrepareResult) []string {
|
||||
func getBuildDepsFlags(cpr *chartPrepareResult) []string {
|
||||
flags := []string{}
|
||||
if helm.IsHelm3() && cpr.skipRefresh {
|
||||
if cpr.skipRefresh {
|
||||
flags = append(flags, "--skip-refresh")
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue