Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package helmfile for openSUSE:Factory checked in at 2021-03-10 08:57:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/helmfile (Old) and /work/SRC/openSUSE:Factory/.helmfile.new.2378 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "helmfile" Wed Mar 10 08:57:33 2021 rev:19 rq:878042 version:0.138.7 Changes: -------- --- /work/SRC/openSUSE:Factory/helmfile/helmfile.changes 2021-02-15 23:20:46.439796715 +0100 +++ /work/SRC/openSUSE:Factory/.helmfile.new.2378/helmfile.changes 2021-03-10 08:58:44.862981411 +0100 @@ -1,0 +2,19 @@ +Tue Mar 9 16:01:14 UTC 2021 - Manfred Hollstein <manfre...@gmx.net> + +- v0.138.7 + * 8ed8a9e (HEAD, tag: v0.138.7, origin/master, origin/HEAD, master) + allow to access oci repos without auth (#1711) + * 14a83e7 Update reference for helm-secrets to latest maintained + fork (#1676) + * bf9f36b refactor: simplify pull channel from #1706 (#1707) + * 3215eaf panic with clear message (#1709) + * 927bd30 Update README.md to show current CLI Output (#1712) + +- v0.138.6 + * 247ae91 (HEAD, tag: v0.138.6, origin/master, origin/HEAD, master) + Disable darwin/386 build to avoid release failure + +- v0.138.5 + * 97f0e59: Update README.md (#1677) + +------------------------------------------------------------------- Old: ---- helmfile-0.138.4.tar.gz New: ---- helmfile-0.138.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ helmfile.spec ++++++ --- /var/tmp/diff_new_pack.ly9wo2/_old 2021-03-10 08:58:45.630982204 +0100 +++ /var/tmp/diff_new_pack.ly9wo2/_new 2021-03-10 08:58:45.634982208 +0100 @@ -16,9 +16,9 @@ # Please submit bugfixes or comments via https://bugs.opensuse.org/ # -%define git_commit f24b61f1008702a71eb81d559192fc080c6132ad +%define git_commit 8ed8a9eab3344ac2d25783b7ce2314fbe2043c37 Name: helmfile -Version: 0.138.4 +Version: 0.138.7 Release: 0 Summary: Deploy Kubernetes Helm Charts License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.ly9wo2/_old 2021-03-10 08:58:45.658982232 +0100 +++ /var/tmp/diff_new_pack.ly9wo2/_new 2021-03-10 08:58:45.658982232 +0100 @@ -5,7 +5,7 @@ <param name="exclude">.git</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> - <param name="revision">v0.138.4</param> + <param name="revision">v0.138.7</param> <param name="changesgenerate">enable</param> </service> <service name="recompress" mode="disabled"> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.ly9wo2/_old 2021-03-10 08:58:45.678982253 +0100 +++ /var/tmp/diff_new_pack.ly9wo2/_new 2021-03-10 08:58:45.678982253 +0100 @@ -1,4 +1,4 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/roboll/helmfile.git</param> - <param name="changesrevision">f24b61f1008702a71eb81d559192fc080c6132ad</param></service></servicedata> + <param name="changesrevision">8ed8a9eab3344ac2d25783b7ce2314fbe2043c37</param></service></servicedata> ++++++ helmfile-0.138.4.tar.gz -> helmfile-0.138.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/Dockerfile.helm3 new/helmfile-0.138.7/Dockerfile.helm3 --- old/helmfile-0.138.4/Dockerfile.helm3 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/Dockerfile.helm3 2021-03-09 02:23:36.000000000 +0100 @@ -46,7 +46,7 @@ mv kustomize /usr/local/bin/kustomize RUN helm plugin install https://github.com/databus23/helm-diff --version v3.1.3 && \ - helm plugin install https://github.com/futuresimple/helm-secrets && \ + helm plugin install https://github.com/jkroepke/helm-secrets && \ helm plugin install https://github.com/hypnoglow/helm-s3.git && \ helm plugin install https://github.com/aslafy-z/helm-git.git diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/Makefile new/helmfile-0.138.7/Makefile --- old/helmfile-0.138.4/Makefile 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/Makefile 2021-03-09 02:23:36.000000000 +0100 @@ -30,7 +30,7 @@ .PHONY: integration cross: - env CGO_ENABLED=0 gox -os 'windows darwin linux' -arch '386 amd64 arm64' -osarch '!darwin/arm64' -output "dist/{{.Dir}}_{{.OS}}_{{.Arch}}" -ldflags '-X github.com/roboll/helmfile/pkg/app/version.Version=${TAG}' ${TARGETS} + env CGO_ENABLED=0 gox -os 'windows darwin linux' -arch '386 amd64 arm64' -osarch '!darwin/arm64 !darwin/386' -output "dist/{{.Dir}}_{{.OS}}_{{.Arch}}" -ldflags '-X github.com/roboll/helmfile/pkg/app/version.Version=${TAG}' ${TARGETS} .PHONY: cross static-linux: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/README.md new/helmfile-0.138.7/README.md --- old/helmfile-0.138.4/README.md 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/README.md 2021-03-09 02:23:36.000000000 +0100 @@ -202,6 +202,10 @@ # It may be helpful to deploy charts with helm api v1 CRDS # https://github.com/roboll/helmfile/pull/1373 disableValidation: false + # passes --disable-validation to helm 3 diff plugin, this requires diff plugin >= 3.1.2 + # It is useful when any release contains custom resources for CRDs that is not yet installed onto the cluster. + # https://github.com/roboll/helmfile/pull/1618 + disableValidationOnInstall: false # passes --disable-openapi-validation to helm 3 diff plugin, this requires diff plugin >= 3.1.2 # It may be helpful to deploy charts with helm api v1 CRDS # https://github.com/roboll/helmfile/pull/1373 @@ -448,33 +452,36 @@ helmfile [global options] command [command options] [arguments...] VERSION: - v0.92.1 + v0.138.6 COMMANDS: - deps update charts based on the contents of requirements.yaml - repos sync repositories from state file (helm repo add && helm repo update) - charts DEPRECATED: sync releases from state file (helm upgrade --install) - diff diff releases from state file against env (helm diff) - template template releases from state file against env (helm template) - lint lint charts from state file (helm lint) - sync sync all resources from state file (repos, releases and chart deps) - apply apply all resources from state file only when there are changes - status retrieve status of releases in state file - delete DEPRECATED: delete releases from state file (helm delete) - destroy uninstalls and then purges releases - test test releases from state file (helm test) - build output compiled helmfile state(s) as YAML - list list releases defined in state file - help, h Shows a list of commands or help for one command + deps update charts based on their requirements + repos sync repositories from state file (helm repo add && helm repo update) + charts DEPRECATED: sync releases from state file (helm upgrade --install) + diff diff releases from state file against env (helm diff) + template template releases from state file against env (helm template) + write-values write values files for releases. Similar to `helmfile template`, write values files instead of manifests. + lint lint charts from state file (helm lint) + sync sync all resources from state file (repos, releases and chart deps) + apply apply all resources from state file only when there are changes + status retrieve status of releases in state file + delete DEPRECATED: delete releases from state file (helm delete) + destroy deletes and then purges releases + test test releases from state file (helm test) + build output compiled helmfile state(s) as YAML + list list releases defined in state file + version Show the version for Helmfile. + help, h Shows a list of commands or help for one command GLOBAL OPTIONS: --helm-binary value, -b value path to helm binary (default: "helm") --file helmfile.yaml, -f helmfile.yaml load config from file or directory. defaults to helmfile.yaml or `helmfile.d`(means `helmfile.d/*.yaml`) in this preference - --environment default, -e default specify the environment name. defaults to default + --environment value, -e value specify the environment name. defaults to "default" --state-values-set value set state values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --state-values-file value specify state values in a YAML file --quiet, -q Silence output. Equivalent to log-level warn --kube-context value Set kubectl context. Uses current context by default + --debug Enable verbose output for Helm and set log-level to debug, this disables --quiet/-q effect --no-color Output without color --log-level value Set log level, default info --namespace value, -n value Set namespace. Uses the namespace set in the context by default, and is available in templates as {{ .Namespace }} @@ -486,9 +493,6 @@ --interactive, -i Request confirmation before attempting to modify clusters --help, -h show help --version, -v print the version - -Environment variables: - HELMFILE_ENVIRONMENT specify the environment name, the command line option '-e' have precedence ``` ### sync @@ -547,10 +551,10 @@ ### secrets -The `secrets` parameter in a `helmfile.yaml` causes the [helm-secrets](https://github.com/futuresimple/helm-secrets) plugin to be executed to decrypt the file. +The `secrets` parameter in a `helmfile.yaml` causes the [helm-secrets](https://github.com/jkroepke/helm-secrets) plugin to be executed to decrypt the file. To supply the secret functionality Helmfile needs the `helm secrets` plugin installed. For Helm 2.3+ -you should be able to simply execute `helm plugin install https://github.com/futuresimple/helm-secrets +you should be able to simply execute `helm plugin install https://github.com/jkroepke/helm-secrets `. ### test @@ -849,7 +853,7 @@ You can list any number of `secrets.yaml` files created using `helm secrets` or `sops`, so that Helmfile could automatically decrypt and merge the secrets into the environment values. -First you must have the [helm-secrets](https://github.com/futuresimple/helm-secrets) plugin installed along with a +First you must have the [helm-secrets](https://github.com/jkroepke/helm-secrets) plugin installed along with a `.sops.yaml` file to configure the method of encryption (this can be in the same directory as your helmfile or in the sub-directory containing your secrets files). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/USERS.md new/helmfile-0.138.7/USERS.md --- old/helmfile-0.138.4/USERS.md 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/USERS.md 2021-03-09 02:23:36.000000000 +0100 @@ -27,4 +27,5 @@ | [Jenkins OSS](https://jenkins.io) | production | [jenkins-infra/charts](https://github.com/jenkins-infra/charts) | * | July 2020 | | [SettleMint](https://settlemint.com) | production | The SettleMint platform allows enterprises to spin up k8s clusters and deploy production grade blockchain networks and additional services. Helmfile is in charge of deploying these networks and services on demand out of the self service management ui. | Belgium, Singapore, UAE, India | October 2020 | | [AutoTrader (UK)](https://www.autotrader.co.uk) | production | We've used Helmfile for 2+ years to deploy 400+ services | UK | October 2020 | +| [Trend Micro](https://www.trendmicro.com) | production | We manage 9 k8s clusters in a mono git repository with Helmfile | Taipei, Taiwan | December 2019 | <!-- TABLE_END --> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/docs/remote-secrets.md new/helmfile-0.138.7/docs/remote-secrets.md --- old/helmfile-0.138.4/docs/remote-secrets.md 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/docs/remote-secrets.md 2021-03-09 02:23:36.000000000 +0100 @@ -1,6 +1,6 @@ # Secrets -helmfile can handle secrets using [helm-secrets](https://github.com/zendesk/helm-secrets) plugin or using remote secrets storage +helmfile can handle secrets using [helm-secrets](https://github.com/jkroepke/helm-secrets) plugin or using remote secrets storage (everything that package [vals](https://github.com/variantdev/vals) can handle vault, AWS SSM etc) This section will describe the second use case. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/main.go new/helmfile-0.138.7/main.go --- old/helmfile-0.138.4/main.go 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/main.go 2021-03-09 02:23:36.000000000 +0100 @@ -353,6 +353,10 @@ Name: "skip-deps", Usage: `skip running "helm repo update" and "helm dependency build"`, }, + cli.BoolFlag{ + Name: "wait", + Usage: `Override helmDefaults.wait setting "helm upgrade --install --wait"`, + }, }, Action: action(func(run *app.App, c configImpl) error { return run.Sync(c) @@ -417,6 +421,10 @@ Name: "skip-deps", Usage: `skip running "helm repo update" and "helm dependency build"`, }, + cli.BoolFlag{ + Name: "wait", + Usage: `Override helmDefaults.wait setting "helm upgrade --install --wait"`, + }, }, Action: action(func(run *app.App, c configImpl) error { return run.Apply(c) @@ -603,6 +611,10 @@ return c.c.Bool("skip-repos") } +func (c configImpl) Wait() bool { + return c.c.Bool("wait") +} + func (c configImpl) Values() []string { return c.c.StringSlice("values") } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/pkg/app/app.go new/helmfile-0.138.7/pkg/app/app.go --- old/helmfile-0.138.4/pkg/app/app.go 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/pkg/app/app.go 2021-03-09 02:23:36.000000000 +0100 @@ -294,6 +294,7 @@ prepErr := run.withPreparedCharts("sync", state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), + Wait: c.Wait(), }, func() { ok, errs = a.sync(run, c) }) @@ -319,6 +320,7 @@ prepErr := run.withPreparedCharts("apply", state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), + Wait: c.Wait(), }, func() { matched, updated, es := a.apply(run, c) @@ -1179,6 +1181,7 @@ syncOpts := state.SyncOpts{ Set: c.Set(), SkipCleanup: c.RetainValuesFiles() || c.SkipCleanup(), + Wait: c.Wait(), } return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), &syncOpts) })) @@ -1393,7 +1396,8 @@ subst.Releases = rs opts := &state.SyncOpts{ - Set: c.Set(), + Set: c.Set(), + Wait: c.Wait(), } return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), opts) })) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/pkg/app/app_test.go new/helmfile-0.138.7/pkg/app/app_test.go --- old/helmfile-0.138.4/pkg/app/app_test.go 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/pkg/app/app_test.go 2021-03-09 02:23:36.000000000 +0100 @@ -2315,12 +2315,17 @@ interactive bool skipDiffOnInstall bool logger *zap.SugaredLogger + wait bool } func (a applyConfig) Args() string { return a.args } +func (a applyConfig) Wait() bool { + return a.wait +} + func (a applyConfig) Values() []string { return a.values } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/pkg/app/config.go new/helmfile-0.138.7/pkg/app/config.go --- old/helmfile-0.138.4/pkg/app/config.go 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/pkg/app/config.go 2021-03-09 02:23:36.000000000 +0100 @@ -39,6 +39,7 @@ Values() []string Set() []string SkipDeps() bool + Wait() bool IncludeTests() bool @@ -65,6 +66,7 @@ Values() []string Set() []string SkipDeps() bool + Wait() bool concurrencyConfig loggingConfig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/pkg/app/run.go new/helmfile-0.138.7/pkg/app/run.go --- old/helmfile-0.138.4/pkg/app/run.go 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/pkg/app/run.go 2021-03-09 02:23:36.000000000 +0100 @@ -16,7 +16,7 @@ helm helmexec.Interface ctx Context - ReleaseToChart map[string]string + ReleaseToChart map[state.PrepareChartKey]string Ask func(string) bool } @@ -68,7 +68,12 @@ for i := range r.state.Releases { rel := &r.state.Releases[i] - if chart := releaseToChart[rel.Name]; chart != "" { + key := state.PrepareChartKey{ + Name: rel.Name, + Namespace: rel.Namespace, + KubeContext: rel.KubeContext, + } + if chart := releaseToChart[key]; chart != "" { rel.Chart = chart } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.138.4/pkg/state/state.go new/helmfile-0.138.7/pkg/state/state.go --- old/helmfile-0.138.4/pkg/state/state.go 2021-02-05 01:02:21.000000000 +0100 +++ new/helmfile-0.138.7/pkg/state/state.go 2021-03-09 02:23:36.000000000 +0100 @@ -73,6 +73,11 @@ MissingFileHandler string `yaml:"missingFileHandler,omitempty"` } +type PullCommand struct { + ChartRef string + responseChan chan error +} + // HelmState structure for the helmfile type HelmState struct { basePath string @@ -380,10 +385,9 @@ var err error if repo.OCI { username, password := gatherOCIUsernamePassword(repo.Name, repo.Username, repo.Password) - if username == "" || password == "" { - return nil, fmt.Errorf("username and password are required fields for logging in to OCI registries with helm") + if username != "" && password != "" { + err = helm.RegistryLogin(repo.URL, username, password) } - err = helm.RegistryLogin(repo.URL, username, password) } else { err = helm.AddRepo(repo.Name, repo.URL, repo.CaFile, repo.CertFile, repo.KeyFile, repo.Username, repo.Password, repo.Managed) } @@ -504,6 +508,10 @@ } } + if opts.Wait { + flags = append(flags, "--wait") + } + if len(errs) > 0 { results <- syncPrepareResult{errors: errs, files: files} continue @@ -578,6 +586,7 @@ type SyncOpts struct { Set []string SkipCleanup bool + Wait bool } type SyncOpt interface{ Apply(*SyncOpts) } @@ -876,10 +885,13 @@ SkipRepos bool SkipDeps bool SkipResolve bool + Wait bool } type chartPrepareResult struct { releaseName string + releaseNamespace string + releaseContext string chartName string chartPath string err error @@ -901,6 +913,10 @@ return nil, chartName } +type PrepareChartKey struct { + Namespace, Name, KubeContext string +} + // PrepareCharts creates temporary directories of charts. // // Each resulting "chart" can be one of the followings: @@ -915,7 +931,7 @@ // Otheriwse, if a chart is not a helm chart, it will call "chartify" to turn it into a chart. // // If exists, it will also patch resources by json patches, strategic-merge patches, and injectors. -func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileCommand string, opts ChartPrepareOptions) (map[string]string, []error) { +func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileCommand string, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { var selected []ReleaseSpec if len(st.Selectors) > 0 { @@ -933,7 +949,7 @@ releases := releasesNeedCharts(selected) - temp := make(map[string]string, len(releases)) + temp := make(map[PrepareChartKey]string, len(releases)) errs := []error{} @@ -955,6 +971,11 @@ } var builds []*chartPrepareResult + pullChan := make(chan PullCommand) + defer func() { + close(pullChan) + }() + go st.pullChartWorker(pullChan, helm) st.scatterGather( concurrency, @@ -987,7 +1008,7 @@ chartFetchedByGoGetter := chartPath != chartName if !chartFetchedByGoGetter { - ociChartPath, err := st.getOCIChart(release, dir, helm) + ociChartPath, err := st.getOCIChart(pullChan, release, dir, helm) if err != nil { results <- &chartPrepareResult{err: fmt.Errorf("release %q: %w", release.Name, err)} @@ -1123,6 +1144,8 @@ results <- &chartPrepareResult{ releaseName: release.Name, chartName: chartName, + releaseNamespace: release.Namespace, + releaseContext: release.KubeContext, chartPath: chartPath, buildDeps: buildDeps, chartFetchedByGoGetter: chartFetchedByGoGetter, @@ -1138,7 +1161,11 @@ return } - temp[downloadRes.releaseName] = downloadRes.chartPath + temp[PrepareChartKey{ + Namespace: downloadRes.releaseNamespace, + KubeContext: downloadRes.releaseContext, + Name: downloadRes.releaseName, + }] = downloadRes.chartPath if downloadRes.buildDeps { builds = append(builds, downloadRes) @@ -1960,8 +1987,15 @@ if len(conditionSplit) != 2 { return nil, fmt.Errorf("Condition value must be in the form 'foo.enabled' where 'foo' can be modified as necessary") } - if values[conditionSplit[0]].(map[string]interface{})["enabled"] == true { - conditionMatch = true + if v, ok := values[conditionSplit[0]]; ok { + if v == nil { + panic(fmt.Sprintf("environment values field '%s' is nil", conditionSplit[0])) + } + if v.(map[string]interface{})["enabled"] == true { + conditionMatch = true + } + } else { + panic(fmt.Sprintf("environment values does not contain field '%s'", conditionSplit[0])) } } res := Release{ @@ -2985,7 +3019,7 @@ } } -func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helmexec.Interface) (*string, error) { +func (st *HelmState) getOCIChart(pullChan chan PullCommand, release *ReleaseSpec, tempDir string, helm helmexec.Interface) (*string, error) { repo, name := st.GetRepositoryAndNameFromChartName(release.Chart) if repo == nil { return nil, nil @@ -3002,7 +3036,7 @@ qualifiedChartName := fmt.Sprintf("%s/%s:%s", repo.URL, name, chartVersion) - err := helm.ChartPull(qualifiedChartName) + err := st.pullChart(pullChan, qualifiedChartName) if err != nil { return nil, err } @@ -3033,3 +3067,22 @@ return &chartPath, nil } + +// Pull charts one by one to prevent concurrent pull problems with Helm +func (st *HelmState) pullChartWorker(pullChan chan PullCommand, helm helmexec.Interface) { + for pullCmd := range pullChan { + err := helm.ChartPull(pullCmd.ChartRef) + pullCmd.responseChan <- err + } +} + +// Send a pull command to the pull worker +func (st *HelmState) pullChart(pullChan chan PullCommand, chartRef string) error { + response := make(chan error, 1) + cmd := PullCommand{ + responseChan: response, + ChartRef: chartRef, + } + pullChan <- cmd + return <-response +} ++++++ vendor.tar.gz ++++++