Merge branch 'main' into global-cleanup
This commit is contained in:
		
						commit
						b86b758e15
					
				|  | @ -1,8 +1,8 @@ | |||
| HELM_VERSION ?= v3.7.2 | ||||
| KUSTOMIZE_VERSION ?= v5.4.3 | ||||
| K8S_VERSION ?= v1.28.11 | ||||
| K8S_VERSION ?= v1.32.1 | ||||
| MINIKUBE_VERSION ?= v1.31.1 | ||||
| SOPS_VERSION ?= v3.9.0 | ||||
| SOPS_VERSION ?= v3.9.3 | ||||
| 
 | ||||
| # ---
 | ||||
| CHANGE_MINIKUBE_NONE_USER ?= true | ||||
|  |  | |||
|  | @ -18,9 +18,9 @@ jobs: | |||
|         with: | ||||
|           go-version-file: go.mod | ||||
|           cache: false | ||||
|       - uses: golangci/golangci-lint-action@v6 | ||||
|       - uses: golangci/golangci-lint-action@v7 | ||||
|         with: | ||||
|           version: v1.57.2  | ||||
|           version: v2.0.2 | ||||
| 
 | ||||
|   tests: | ||||
|     runs-on: ubuntu-latest | ||||
|  | @ -54,50 +54,38 @@ jobs: | |||
|           # Helm maintains the latest minor version only and therefore each Helmfile version supports 2 Helm minor versions. | ||||
|           # That's why we cover only 2 Helm minor versions in this matrix. | ||||
|           # See https://github.com/helmfile/helmfile/pull/286#issuecomment-1250161182 for more context. | ||||
|           - helm-version: v3.15.4 | ||||
|           - helm-version: v3.16.4 | ||||
|             kustomize-version: v5.2.1 | ||||
|             plugin-secrets-version: 3.15.0 | ||||
|             plugin-diff-version: 3.8.1 | ||||
|             plugin-diff-version: 3.10.0 | ||||
|             extra-helmfile-flags: '' | ||||
|             v1mode: '' | ||||
|           - helm-version: v3.15.4 | ||||
|           - helm-version: v3.16.4 | ||||
|             kustomize-version: v5.4.3 | ||||
|             # We assume that the helm-secrets plugin is supposed to | ||||
|             # work with the two most recent helm minor versions. | ||||
|             # Once it turned out to be not practically true, | ||||
|             # we will mark this combination as failable, | ||||
|             # and instruct users to upgrade helm and helm-secrets at once. | ||||
|             plugin-secrets-version: 4.6.0 | ||||
|             plugin-diff-version: 3.9.11 | ||||
|             plugin-secrets-version: 4.6.3 | ||||
|             plugin-diff-version: 3.11.0 | ||||
|             extra-helmfile-flags: '' | ||||
|             v1mode: '' | ||||
|           - helm-version: v3.16.1 | ||||
|           - helm-version: v3.17.3 | ||||
|             kustomize-version: v5.2.1 | ||||
|             plugin-secrets-version: 3.15.0 | ||||
|             plugin-diff-version: 3.8.1 | ||||
|             plugin-diff-version: 3.10.0 | ||||
|             extra-helmfile-flags: '' | ||||
|             v1mode: '' | ||||
|           - helm-version: v3.16.1 | ||||
|           - helm-version: v3.17.3 | ||||
|             kustomize-version: v5.4.3 | ||||
|             plugin-secrets-version: 4.6.0 | ||||
|             plugin-diff-version: 3.9.11 | ||||
|             plugin-secrets-version: 4.6.3 | ||||
|             plugin-diff-version: 3.11.0 | ||||
|             extra-helmfile-flags: '' | ||||
|             v1mode: '' | ||||
|           # Helmfile v1 | ||||
|           - helm-version: v3.16.1 | ||||
|             kustomize-version: v5.4.3 | ||||
|             plugin-secrets-version: 4.6.0 | ||||
|             plugin-diff-version: 3.9.11 | ||||
|             extra-helmfile-flags: '' | ||||
|             v1mode: 'true' | ||||
|           # In case you need to test some optional helmfile features, | ||||
|           # enable it via extra-helmfile-flags below. | ||||
|           - helm-version: v3.16.1 | ||||
|           - helm-version: v3.17.3 | ||||
|             kustomize-version: v5.4.3 | ||||
|             plugin-secrets-version: 4.6.0 | ||||
|             plugin-diff-version: 3.9.11 | ||||
|             plugin-secrets-version: 4.6.3 | ||||
|             plugin-diff-version: 3.11.0 | ||||
|             extra-helmfile-flags: '--enable-live-output' | ||||
|             v1mode: '' | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/setup-go@v5 | ||||
|  | @ -127,7 +115,6 @@ jobs: | |||
|           HELMFILE_HELM3: 1 | ||||
|           TERM: xterm | ||||
|           EXTRA_HELMFILE_FLAGS: ${{ matrix.extra-helmfile-flags }} | ||||
|           HELMFILE_V1MODE: ${{ matrix.v1mode }} | ||||
| 
 | ||||
|   e2e_tests: | ||||
|     needs: tests | ||||
|  |  | |||
|  | @ -16,7 +16,6 @@ permissions: | |||
| 
 | ||||
| env: | ||||
|   GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|   HELMFILE_V1MODE: ${{ startsWith(github.ref, 'refs/tags/v1') }} | ||||
|   SNAPSHOT: ${{ !startsWith(github.ref, 'refs/tags/v') && '--snapshot' || '' }} | ||||
| 
 | ||||
| jobs: | ||||
|  |  | |||
							
								
								
									
										456
									
								
								.golangci.yaml
								
								
								
								
							
							
						
						
									
										456
									
								
								.golangci.yaml
								
								
								
								
							|  | @ -1,360 +1,146 @@ | |||
| # This file contains all available configuration options | ||||
| # with their default values. | ||||
| 
 | ||||
| # options for analysis running | ||||
| version: "2" | ||||
| run: | ||||
|   # default concurrency is a available CPU number | ||||
|   # concurrency: 4 | ||||
| 
 | ||||
|   # timeout for analysis, e.g. 30s, 5m, default is 1m | ||||
|   timeout: 30m | ||||
| 
 | ||||
|   # exit code when at least one issue was found, default is 1 | ||||
|   issues-exit-code: 1 | ||||
| 
 | ||||
|   # include test files or not, default is true | ||||
|   tests: true | ||||
| 
 | ||||
|   # list of build tags, all linters use it. Default is empty list. | ||||
|   # build-tags: | ||||
|   #   - mytag | ||||
| 
 | ||||
|   # which dirs to skip: issues from them won't be reported; | ||||
|   # can use regexp here: generated.*, regexp is applied on full path; | ||||
|   # default value is empty list, but default dirs are skipped independently | ||||
|   # from this option's value (see skip-dirs-use-default). | ||||
|   # skip-dirs: | ||||
|   #   - src/external_libs | ||||
|   #   - autogenerated_by_my_lib | ||||
| 
 | ||||
|   # default is true. Enables skipping of directories: | ||||
|   #   vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ | ||||
|   skip-dirs-use-default: true | ||||
| 
 | ||||
|   # which files to skip: they will be analyzed, but issues from them | ||||
|   # won't be reported. Default value is empty list, but there is | ||||
|   # no need to include all autogenerated files, we confidently recognize | ||||
|   # autogenerated files. If it's not please let us know. | ||||
|   # skip-files: | ||||
|   #   - ".*\\.my\\.go$" | ||||
|   #   - lib/bad.go | ||||
| 
 | ||||
|   # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules": | ||||
|   # If invoked with -mod=readonly, the go command is disallowed from the implicit | ||||
|   # automatic updating of go.mod described above. Instead, it fails when any changes | ||||
|   # to go.mod are needed. This setting is most useful to check that go.mod does | ||||
|   # not need updates, such as in a continuous integration and testing system. | ||||
|   # If invoked with -mod=vendor, the go command assumes that the vendor | ||||
|   # directory holds the correct copies of dependencies and ignores | ||||
|   # the dependency descriptions in go.mod. | ||||
|   # modules-download-mode: readonly|release|vendor | ||||
| 
 | ||||
| # output configuration options | ||||
| output: | ||||
|   # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" | ||||
|   format: line-number | ||||
| 
 | ||||
|   # print lines of code with issue, default is true | ||||
|   print-issued-lines: true | ||||
| 
 | ||||
|   # print linter name in the end of issue text, default is true | ||||
|   print-linter-name: true | ||||
| 
 | ||||
| # all available settings of specific linters | ||||
| linters-settings: | ||||
|   gci: | ||||
|     sections: | ||||
|       - standard | ||||
|       - default | ||||
|       - prefix(github.com/helmfile/helmfile) | ||||
| 
 | ||||
|   errcheck: | ||||
|     # report about not checking of errors in type assetions: `a := b.(MyStruct)`; | ||||
|     # default is false: such cases aren't reported by default. | ||||
|     check-type-assertions: false | ||||
| 
 | ||||
|     # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; | ||||
|     # default is false: such cases aren't reported by default. | ||||
|     check-blank: false | ||||
| 
 | ||||
|     # [deprecated] comma-separated list of pairs of the form pkg:regex | ||||
|     # the regex is used to ignore names within pkg. (default "fmt:.*"). | ||||
|     # see https://github.com/kisielk/errcheck#the-deprecated-method for details | ||||
|     # ignore: fmt:.* | ||||
| 
 | ||||
|     # path to a file containing a list of functions to exclude from checking | ||||
|     # see https://github.com/kisielk/errcheck#excluding-functions for details | ||||
|     # exclude: /path/to/file.txt | ||||
| 
 | ||||
|   # Disable error checking, as errorcheck detects more errors and is more configurable. | ||||
|   gosec: | ||||
|     exclude: | ||||
|     - "G104" | ||||
| 
 | ||||
|   govet: | ||||
|     # report about shadowed variables | ||||
|     check-shadowing: false | ||||
| 
 | ||||
|     # settings per analyzer | ||||
|     settings: | ||||
|       printf: # analyzer name, run `go tool vet help` to see all analyzers | ||||
|         funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer | ||||
|           - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof | ||||
|           - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf | ||||
|           - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf | ||||
|           - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf | ||||
| 
 | ||||
|     # enable or disable analyzers by name | ||||
|     # enable: | ||||
|     #   - atomicalign | ||||
|     # enable-all: false | ||||
|     # disable: | ||||
|     #   - shadow | ||||
|     # disable-all: false | ||||
|   golint: | ||||
|     # minimal confidence for issues, default is 0.8 | ||||
|     min-confidence: 0.8 | ||||
|   gofmt: | ||||
|     # simplify code: gofmt with `-s` option, true by default | ||||
|     simplify: true | ||||
|   goimports: | ||||
|     # put imports beginning with prefix after 3rd-party packages; | ||||
|     # it's a comma-separated list of prefixes | ||||
|     # local-prefixes: github.com/org/project | ||||
|   gocyclo: | ||||
|     # minimal code complexity to report, 30 by default (but we recommend 10-20) | ||||
|     min-complexity: 30 | ||||
|   gocognit: | ||||
|     # minimal code complexity to report, 30 by default (but we recommend 10-20) | ||||
|     min-complexity: 100 | ||||
|   maligned: | ||||
|     # print struct with more effective memory layout or not, false by default | ||||
|     suggest-new: true | ||||
|   dupl: | ||||
|     # tokens count to trigger issue, 150 by default | ||||
|     threshold: 100 | ||||
|   goconst: | ||||
|     # minimal length of string constant, 3 by default | ||||
|     min-len: 3 | ||||
|     # minimal occurrences count to trigger, 3 by default | ||||
|     min-occurrences: 8 | ||||
|   # depguard: | ||||
|   #   list-type: blacklist | ||||
|   #   include-go-root: false | ||||
|   #   packages: | ||||
|   #     - github.com/sirupsen/logrus | ||||
|   #   packages-with-error-messages: | ||||
|   #     # specify an error message to output when a blacklisted package is used | ||||
|   #     github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" | ||||
|   misspell: | ||||
|     # Correct spellings using locale preferences for US or UK. | ||||
|     # Default is to use a neutral variety of English. | ||||
|     # Setting locale to US will correct the British spelling of 'colour' to 'color'. | ||||
|     locale: US | ||||
|     ignore-words: | ||||
|       - GitLab | ||||
|   lll: | ||||
|     # max line length, lines longer will be reported. Default is 120. | ||||
|     # '\t' is counted as 1 character by default, and can be changed with the tab-width option | ||||
|     line-length: 120 | ||||
|     # tab width in spaces. Default to 1. | ||||
|     tab-width: 1 | ||||
|   unused: | ||||
|     # treat code as a program (not a library) and report unused exported identifiers; default is false. | ||||
|     # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: | ||||
|     # if it's called for subdir of a project it can't find funcs usages. All text editor integrations | ||||
|     # with golangci-lint call it on a directory with the changed file. | ||||
|     check-exported: false | ||||
|   unparam: | ||||
|     # Inspect exported functions, default is false. Set to true if no external program/library imports your code. | ||||
|     # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: | ||||
|     # if it's called for subdir of a project it can't find external interfaces. All text editor integrations | ||||
|     # with golangci-lint call it on a directory with the changed file. | ||||
|     check-exported: false | ||||
|   nakedret: | ||||
|     # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 | ||||
|     max-func-lines: 50  | ||||
|   prealloc: | ||||
|     # XXX: we don't recommend using this linter before doing performance profiling. | ||||
|     # For most programs usage of prealloc will be a premature optimization. | ||||
| 
 | ||||
|     # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. | ||||
|     # True by default. | ||||
|     simple: true | ||||
|     range-loops: true # Report preallocation suggestions on range loops, true by default | ||||
|     for-loops: false # Report preallocation suggestions on for loops, false by default | ||||
|   gocritic: | ||||
|     # Which checks should be enabled; can't be combined with 'disabled-checks'; | ||||
|     # See https://go-critic.github.io/overview#checks-overview | ||||
|     # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` | ||||
|     # By default list of stable checks is used. | ||||
|     # enabled-checks: | ||||
|     #   - rangeValCopy | ||||
| 
 | ||||
|     # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty | ||||
|     # disabled-checks: | ||||
|     #   - regexpMust | ||||
| 
 | ||||
|     # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. | ||||
|     # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". | ||||
|     # enabled-tags: | ||||
|     #   - performance | ||||
| 
 | ||||
|     settings: # settings passed to gocritic | ||||
|       captLocal: # must be valid enabled check name | ||||
|         paramsOnly: true | ||||
|     # rangeValCopy: | ||||
|     #   sizeThreshold: 32 | ||||
|   godox: | ||||
|     # report any comments starting with keywords, this is useful for TODO or FIXME comments that | ||||
|     # might be left in the code accidentally and should be resolved before merging | ||||
|     keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting | ||||
|       - TODO | ||||
|       - BUG | ||||
|       - FIXME | ||||
|       - NOTE | ||||
|       - OPTIMIZE # marks code that should be optimized before merging | ||||
|       - HACK # marks hack-arounds that should be removed before merging | ||||
|   dogsled: | ||||
|     # checks assignments with too many blank identifiers; default is 2 | ||||
|     max-blank-identifiers: 2 | ||||
| 
 | ||||
|   whitespace: | ||||
|     multi-if: false   # Enforces newlines (or comments) after every multi-line if statement | ||||
|     multi-func: false # Enforces newlines (or comments) after every multi-line function signature | ||||
|   wsl: | ||||
|     # If true append is only allowed to be cuddled if appending value is | ||||
|     # matching variables, fields or types on line above. Default is true. | ||||
|     strict-append: true | ||||
|     # Allow calls and assignments to be cuddled as long as the lines have any | ||||
|     # matching variables, fields or types. Default is true. | ||||
|     allow-assign-and-call: true | ||||
|     # Allow multiline assignments to be cuddled. Default is true. | ||||
|     allow-multiline-assign: true | ||||
|     # Allow declarations (var) to be cuddled. | ||||
|     allow-cuddle-declarations: false | ||||
|     # Allow trailing comments in ending of blocks | ||||
|     allow-trailing-comment: false | ||||
|     # Force newlines in end of case at this limit (0 = never). | ||||
|     force-case-trailing-whitespace: 0 | ||||
|   revive: | ||||
|     ignore-generated-header: true | ||||
|     severity: warning | ||||
|   funlen: | ||||
|     # Checks the number of lines in a function. | ||||
|     # If lower than 0, disable the check. | ||||
|     # Default: 60 | ||||
|     lines: 280 | ||||
|     # Checks the number of statements in a function. | ||||
|     # If lower than 0, disable the check. | ||||
|     # Default: 40 | ||||
|     statements: 140 | ||||
| 
 | ||||
|   formats: | ||||
|     text: | ||||
|       path: stdout | ||||
|       print-linter-name: true | ||||
|       print-issued-lines: true | ||||
|       colors: false | ||||
| linters: | ||||
|   # please, do not use `enable-all`: it's deprecated and will be removed soon. | ||||
|   # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint | ||||
|   disable-all: true | ||||
|   default: none | ||||
|   enable: | ||||
|     - bodyclose | ||||
|     - usestdlibvars | ||||
|     - reassign | ||||
|     - copyloopvar | ||||
|     - errcheck | ||||
|     - funlen | ||||
|     - gocognit | ||||
|     - goconst | ||||
|     - gofmt | ||||
|     - goimports | ||||
|     - revive | ||||
|     - gosimple | ||||
|     - govet | ||||
|     - ineffassign | ||||
|     - misspell | ||||
|     - nakedret | ||||
|     - exportloopref | ||||
|     - reassign | ||||
|     - revive | ||||
|     - staticcheck | ||||
|     - typecheck | ||||
|     - unconvert | ||||
|     - unparam | ||||
|     - unused | ||||
|     - usestdlibvars | ||||
|     - whitespace | ||||
|     - gci | ||||
|   # don't enable: | ||||
|   # - depguard | ||||
|   # - deadcode | ||||
|   # - gochecknoglobals | ||||
|   # - gochecknoinits | ||||
|   # - gocyclo | ||||
|   # - lll | ||||
|   # - maligned | ||||
|   # - prealloc | ||||
|   # - varcheck | ||||
|   # - gocritic | ||||
|   # - godox | ||||
|   # - gosec | ||||
|   # - interfacer | ||||
|   # - stylecheck | ||||
|   # - dogsled | ||||
|   # - dupl | ||||
|   settings: | ||||
|     staticcheck: | ||||
|       checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022", "-ST1005", "-QF1001", "-QF1008"] | ||||
| 
 | ||||
|     dogsled: | ||||
|       max-blank-identifiers: 2 | ||||
|     dupl: | ||||
|       threshold: 100 | ||||
|     errcheck: | ||||
|       check-type-assertions: false | ||||
|       check-blank: false | ||||
|     funlen: | ||||
|       lines: 280 | ||||
|       statements: 140 | ||||
|     gocognit: | ||||
|       min-complexity: 100 | ||||
|     goconst: | ||||
|       min-len: 3 | ||||
|       min-occurrences: 8 | ||||
|     gocritic: | ||||
|       settings: | ||||
|         captLocal: | ||||
|           paramsOnly: true | ||||
|     gocyclo: | ||||
|       min-complexity: 30 | ||||
|     godox: | ||||
|       keywords: | ||||
|         - TODO | ||||
|         - BUG | ||||
|         - FIXME | ||||
|         - NOTE | ||||
|         - OPTIMIZE | ||||
|         - HACK | ||||
|     gosec: | ||||
|       excludes: | ||||
|         - G104 | ||||
|     govet: | ||||
|       disable: | ||||
|         - shadow | ||||
|       settings: | ||||
|         printf: | ||||
|           funcs: | ||||
|             - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof | ||||
|             - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf | ||||
|             - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf | ||||
|             - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf | ||||
|     lll: | ||||
|       line-length: 120 | ||||
|       tab-width: 1 | ||||
|     misspell: | ||||
|       locale: US | ||||
|       ignore-rules: | ||||
|         - GitLab | ||||
|     nakedret: | ||||
|       max-func-lines: 50 | ||||
|     prealloc: | ||||
|       simple: true | ||||
|       range-loops: true | ||||
|       for-loops: false | ||||
|     revive: | ||||
|       confidence: 0.8 | ||||
|       severity: warning | ||||
|     unparam: | ||||
|       check-exported: false | ||||
|     whitespace: | ||||
|       multi-if: false | ||||
|       multi-func: false | ||||
|     wsl: | ||||
|       strict-append: true | ||||
|       allow-assign-and-call: true | ||||
|       allow-multiline-assign: true | ||||
|       force-case-trailing-whitespace: 0 | ||||
|       allow-trailing-comment: false | ||||
|       allow-cuddle-declarations: false | ||||
|   exclusions: | ||||
|     generated: lax | ||||
|     rules: | ||||
|       - linters: | ||||
|           - dupl | ||||
|           - errcheck | ||||
|           - funlen | ||||
|           - gocyclo | ||||
|           - gosec | ||||
|         path: _test\.go | ||||
|       - linters: | ||||
|           - lll | ||||
|         source: '^//go:generate ' | ||||
|     paths: | ||||
|       - third_party$ | ||||
|       - builtin$ | ||||
|       - examples$ | ||||
| issues: | ||||
|   # List of regexps of issue texts to exclude, empty list by default. | ||||
|   # But independently from this option we use default exclude patterns, | ||||
|   # it can be disabled by `exclude-use-default: false`. To list all | ||||
|   # excluded by default patterns execute `golangci-lint run --help` | ||||
|   # exclude: | ||||
|   #   - abcdef | ||||
| 
 | ||||
|   # Excluding configuration per-path, per-linter, per-text and per-source | ||||
|   exclude-rules: | ||||
|     # Exclude some linters from running on tests files. | ||||
|     - path: _test\.go | ||||
|       linters: | ||||
|         - gocyclo | ||||
|         - errcheck | ||||
|         - dupl | ||||
|         - gosec | ||||
|         - funlen | ||||
| 
 | ||||
|     # Exclude known linters from partially hard-vendored code, | ||||
|     # which is impossible to exclude via "nolint" comments. | ||||
|     # - path: internal/hmac/ | ||||
|     #   text: "weak cryptographic primitive" | ||||
|     #   linters: | ||||
|     #     - gosec | ||||
| 
 | ||||
|     # Exclude some staticcheck messages | ||||
|     # - linters: | ||||
|     #     - staticcheck | ||||
|     #   text: "SA9003:" | ||||
| 
 | ||||
|     # Exclude lll issues for long lines with go:generate | ||||
|     - linters: | ||||
|         - lll | ||||
|       source: "^//go:generate " | ||||
| 
 | ||||
|   # Independently from option `exclude` we use default exclude patterns, | ||||
|   # it can be disabled by this option. To list all | ||||
|   # excluded by default patterns execute `golangci-lint run --help`. | ||||
|   # Default value for this option is true. | ||||
|   exclude-use-default: false | ||||
| 
 | ||||
|   # Maximum issues count per one linter. Set to 0 to disable. Default is 50. | ||||
|   max-issues-per-linter: 0 | ||||
| 
 | ||||
|   # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. | ||||
|   max-same-issues: 0 | ||||
| 
 | ||||
|   # Show only new issues: if there are unstaged changes or untracked files, | ||||
|   # only those changes are analyzed, else only changes in HEAD~ are analyzed. | ||||
|   # It's a super-useful option for integration of golangci-lint into existing | ||||
|   # large codebase. It's not practical to fix all existing issues at the moment | ||||
|   # of integration: much better don't allow issues in new code. | ||||
|   # Default is false. | ||||
|   new: false | ||||
| 
 | ||||
|   # Show only new issues created after git revision `REV` | ||||
|   # This should be passed as flag during individual CI jobs. | ||||
|   # new-from-rev: REV | ||||
| 
 | ||||
|   # Show only new issues created in git patch with set file path. | ||||
|   # new-from-patch: path/to/patch/file | ||||
| formatters: | ||||
|   enable: | ||||
|     - gci | ||||
|     - gofmt | ||||
|     - goimports | ||||
|   settings: | ||||
|     gci: | ||||
|       sections: | ||||
|         - standard | ||||
|         - default | ||||
|         - prefix(github.com/helmfile/helmfile) | ||||
|     gofmt: | ||||
|       simplify: true | ||||
|   exclusions: | ||||
|     generated: lax | ||||
|     paths: | ||||
|       - third_party$ | ||||
|       - builtin$ | ||||
|       - examples$ | ||||
|  |  | |||
|  | @ -1,8 +1,5 @@ | |||
| version: 2 | ||||
| project_name: helmfile | ||||
| env: | ||||
|   # We default to non-v1 mode (=helmfile v0.x behavior) when HELMFILE_V1MODE is not set | ||||
|   - HELMFILE_V1MODE={{ if index .Env "HELMFILE_V1MODE"  }}{{ .Env.HELMFILE_V1MODE }}{{ else }}false{{ end }} | ||||
| builds: | ||||
|   - id: helmfile | ||||
|     main: . | ||||
|  | @ -15,7 +12,6 @@ builds: | |||
|       - -X go.szostok.io/version.commit={{.FullCommit}} | ||||
|       - -X go.szostok.io/version.commitDate={{.CommitDate}} | ||||
|       - -X go.szostok.io/version.dirtyBuild=false | ||||
|       - -X github.com/helmfile/helmfile/pkg/runtime.v1Mode={{.Env.HELMFILE_V1MODE}} | ||||
|     goos: | ||||
|       - darwin | ||||
|       - linux | ||||
|  | @ -24,7 +20,14 @@ builds: | |||
|       - amd64 | ||||
|       - arm64 | ||||
|       - "386" | ||||
| 
 | ||||
| archives: | ||||
|   - id: helmfile | ||||
|     ids: | ||||
|       - helmfile | ||||
|     builds_info: | ||||
|       group: root | ||||
|       owner: root | ||||
|       mode: 0644 | ||||
| changelog: | ||||
|   use: github | ||||
|   sort: asc | ||||
|  |  | |||
							
								
								
									
										33
									
								
								Dockerfile
								
								
								
								
							
							
						
						
									
										33
									
								
								Dockerfile
								
								
								
								
							|  | @ -1,4 +1,4 @@ | |||
| FROM --platform=$BUILDPLATFORM golang:1.22-alpine AS builder | ||||
| FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS builder | ||||
| 
 | ||||
| RUN apk add --no-cache make git | ||||
| WORKDIR /workspace/helmfile | ||||
|  | @ -30,7 +30,7 @@ ENV HELM_CONFIG_HOME="${HELM_CONFIG_HOME}" | |||
| ARG HELM_DATA_HOME="${HOME}/.local/share/helm" | ||||
| ENV HELM_DATA_HOME="${HELM_DATA_HOME}" | ||||
| 
 | ||||
| ARG HELM_VERSION="v3.16.1" | ||||
| ARG HELM_VERSION="v3.17.3" | ||||
| ENV HELM_VERSION="${HELM_VERSION}" | ||||
| ARG HELM_LOCATION="https://get.helm.sh" | ||||
| ARG HELM_FILENAME="helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz" | ||||
|  | @ -38,8 +38,8 @@ RUN set -x && \ | |||
|     curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" && \ | ||||
|     echo Verifying ${HELM_FILENAME}... && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         "linux/amd64")  HELM_SHA256="e57e826410269d72be3113333dbfaac0d8dfdd1b0cc4e9cb08bdf97722731ca9"  ;; \ | ||||
|         "linux/arm64")  HELM_SHA256="780b5b86f0db5546769b3e9f0204713bbdd2f6696dfdaac122fbe7f2f31541d2"  ;; \ | ||||
|     "linux/amd64")  HELM_SHA256="ee88b3c851ae6466a3de507f7be73fe94d54cbf2987cbaa3d1a3832ea331f2cd"  ;; \ | ||||
|     "linux/arm64")  HELM_SHA256="7944e3defd386c76fd92d9e6fec5c2d65a323f6fadc19bfb5e704e3eee10348e"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${HELM_SHA256}  ${HELM_FILENAME}" | sha256sum -c && \ | ||||
|     echo Extracting ${HELM_FILENAME}... && \ | ||||
|  | @ -50,13 +50,12 @@ RUN set -x && \ | |||
| # using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/ | ||||
| # for now but in a future version of alpine (in the testing version at the time of writing) | ||||
| # we should be able to install using apk add. | ||||
| ENV KUBECTL_VERSION="v1.28.9" | ||||
| ENV KUBECTL_VERSION="v1.32.1" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl" && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256 | ||||
|         "linux/amd64")  KUBECTL_SHA256="b4693d0b22f509250694b10c7727c42b427d570af04f2065fe23a55d6c0051f1"  ;; \ | ||||
|         "linux/arm64")  KUBECTL_SHA256="e0341d3973213f8099e7fcbbf6d1d506967bc2b7a4faac3fb3b4340f226e9b2f"  ;; \ | ||||
|     "linux/amd64")  KUBECTL_SHA256="e16c80f1a9f94db31063477eb9e61a2e24c1a4eee09ba776b029048f5369db0c"  ;; \ | ||||
|     "linux/arm64")  KUBECTL_SHA256="98206fd83a4fd17f013f8c61c33d0ae8ec3a7c53ec59ef3d6a0a9400862dc5b2"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${KUBECTL_SHA256}  kubectl" | sha256sum -c && \ | ||||
|     chmod +x kubectl && \ | ||||
|  | @ -68,16 +67,16 @@ ARG KUSTOMIZE_FILENAME="kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH} | |||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/${KUSTOMIZE_FILENAME}" && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt | ||||
|         "linux/amd64")  KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7"  ;; \ | ||||
|         "linux/arm64")  KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c"  ;; \ | ||||
|     # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt | ||||
|     "linux/amd64")  KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7"  ;; \ | ||||
|     "linux/arm64")  KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${KUSTOMIZE_SHA256}  ${KUSTOMIZE_FILENAME}" | sha256sum -c && \ | ||||
|     tar xvf "${KUSTOMIZE_FILENAME}" -C /usr/local/bin && \ | ||||
|     rm "${KUSTOMIZE_FILENAME}" && \ | ||||
|     [ "$(kustomize version)" = "${KUSTOMIZE_VERSION}" ] | ||||
| 
 | ||||
| ENV SOPS_VERSION="v3.9.0" | ||||
| ENV SOPS_VERSION="v3.9.3" | ||||
| ARG SOPS_FILENAME="sops-${SOPS_VERSION}.${TARGETOS}.${TARGETARCH}" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/getsops/sops/releases/download/${SOPS_VERSION}/${SOPS_FILENAME}" && \ | ||||
|  | @ -85,7 +84,7 @@ RUN set -x && \ | |||
|     mv "${SOPS_FILENAME}" /usr/local/bin/sops && \ | ||||
|     sops --version --disable-version-check | grep -E "^sops ${SOPS_VERSION#v}" | ||||
| 
 | ||||
| ENV AGE_VERSION="v1.1.1" | ||||
| ENV AGE_VERSION="v1.2.0" | ||||
| ARG AGE_FILENAME="age-${AGE_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/FiloSottile/age/releases/download/${AGE_VERSION}/${AGE_FILENAME}" && \ | ||||
|  | @ -94,10 +93,10 @@ RUN set -x && \ | |||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||
|     [ "$(age-keygen --version)" = "${AGE_VERSION}" ] | ||||
| 
 | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.9.11 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.0 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.2 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.16.0 && \ | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.11.0 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.3 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ | ||||
|     rm -rf ${HELM_CACHE_HOME}/plugins | ||||
| 
 | ||||
| # Allow users other than root to use helm plugins located in root home | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| FROM --platform=$BUILDPLATFORM golang:1.22-alpine AS builder | ||||
| FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS builder | ||||
| 
 | ||||
| RUN apk add --no-cache make git | ||||
| WORKDIR /workspace/helmfile | ||||
|  | @ -18,9 +18,9 @@ LABEL org.opencontainers.image.source=https://github.com/helmfile/helmfile | |||
| 
 | ||||
| RUN apt update -qq && \ | ||||
|     apt install --no-install-recommends -y \ | ||||
|       ca-certificates \ | ||||
|       gnupg \ | ||||
|       git bash curl jq wget openssh-client && \ | ||||
|     ca-certificates \ | ||||
|     gnupg \ | ||||
|     git bash curl jq wget openssh-client && \ | ||||
|     rm -rf /var/lib/apt/lists/* | ||||
| 
 | ||||
| ARG TARGETARCH TARGETOS TARGETPLATFORM | ||||
|  | @ -35,7 +35,7 @@ ENV HELM_CONFIG_HOME="${HELM_CONFIG_HOME}" | |||
| ARG HELM_DATA_HOME="${HOME}/.local/share/helm" | ||||
| ENV HELM_DATA_HOME="${HELM_DATA_HOME}" | ||||
| 
 | ||||
| ARG HELM_VERSION="v3.16.1" | ||||
| ARG HELM_VERSION="v3.17.3" | ||||
| ENV HELM_VERSION="${HELM_VERSION}" | ||||
| ARG HELM_LOCATION="https://get.helm.sh" | ||||
| ARG HELM_FILENAME="helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz" | ||||
|  | @ -43,8 +43,8 @@ RUN set -x && \ | |||
|     curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" && \ | ||||
|     echo Verifying ${HELM_FILENAME}... && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         "linux/amd64")  HELM_SHA256="e57e826410269d72be3113333dbfaac0d8dfdd1b0cc4e9cb08bdf97722731ca9"  ;; \ | ||||
|         "linux/arm64")  HELM_SHA256="780b5b86f0db5546769b3e9f0204713bbdd2f6696dfdaac122fbe7f2f31541d2"  ;; \ | ||||
|     "linux/amd64")  HELM_SHA256="ee88b3c851ae6466a3de507f7be73fe94d54cbf2987cbaa3d1a3832ea331f2cd"  ;; \ | ||||
|     "linux/arm64")  HELM_SHA256="7944e3defd386c76fd92d9e6fec5c2d65a323f6fadc19bfb5e704e3eee10348e"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${HELM_SHA256}  ${HELM_FILENAME}" | sha256sum -c && \ | ||||
|     echo Extracting ${HELM_FILENAME}... && \ | ||||
|  | @ -55,13 +55,13 @@ RUN set -x && \ | |||
| # using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/ | ||||
| # for now but in a future version of alpine (in the testing version at the time of writing) | ||||
| # we should be able to install using apk add. | ||||
| ENV KUBECTL_VERSION="v1.28.9" | ||||
| ENV KUBECTL_VERSION="v1.32.1" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl" && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256 | ||||
|         "linux/amd64")  KUBECTL_SHA256="b4693d0b22f509250694b10c7727c42b427d570af04f2065fe23a55d6c0051f1"  ;; \ | ||||
|         "linux/arm64")  KUBECTL_SHA256="e0341d3973213f8099e7fcbbf6d1d506967bc2b7a4faac3fb3b4340f226e9b2f"  ;; \ | ||||
|     # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256 | ||||
|     "linux/amd64")  KUBECTL_SHA256="e16c80f1a9f94db31063477eb9e61a2e24c1a4eee09ba776b029048f5369db0c"  ;; \ | ||||
|     "linux/arm64")  KUBECTL_SHA256="98206fd83a4fd17f013f8c61c33d0ae8ec3a7c53ec59ef3d6a0a9400862dc5b2"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${KUBECTL_SHA256}  kubectl" | sha256sum -c && \ | ||||
|     chmod +x kubectl && \ | ||||
|  | @ -73,16 +73,16 @@ ARG KUSTOMIZE_FILENAME="kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH} | |||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/${KUSTOMIZE_FILENAME}" && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt | ||||
|         "linux/amd64")  KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7"  ;; \ | ||||
|         "linux/arm64")  KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c"  ;; \ | ||||
|     # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt | ||||
|     "linux/amd64")  KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7"  ;; \ | ||||
|     "linux/arm64")  KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${KUSTOMIZE_SHA256}  ${KUSTOMIZE_FILENAME}" | sha256sum -c && \ | ||||
|     tar xvf "${KUSTOMIZE_FILENAME}" -C /usr/local/bin && \ | ||||
|     rm "${KUSTOMIZE_FILENAME}" && \ | ||||
|     [ "$(kustomize version)" = "${KUSTOMIZE_VERSION}" ] | ||||
| 
 | ||||
| ENV SOPS_VERSION="v3.9.0" | ||||
| ENV SOPS_VERSION="v3.9.3" | ||||
| ARG SOPS_FILENAME="sops-${SOPS_VERSION}.${TARGETOS}.${TARGETARCH}" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/getsops/sops/releases/download/${SOPS_VERSION}/${SOPS_FILENAME}" && \ | ||||
|  | @ -90,7 +90,7 @@ RUN set -x && \ | |||
|     mv "${SOPS_FILENAME}" /usr/local/bin/sops && \ | ||||
|     sops --version --disable-version-check | grep -E "^sops ${SOPS_VERSION#v}" | ||||
| 
 | ||||
| ENV AGE_VERSION="v1.1.1" | ||||
| ENV AGE_VERSION="v1.2.0" | ||||
| ARG AGE_FILENAME="age-${AGE_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/FiloSottile/age/releases/download/${AGE_VERSION}/${AGE_FILENAME}" && \ | ||||
|  | @ -99,10 +99,10 @@ RUN set -x && \ | |||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||
|     [ "$(age-keygen --version)" = "${AGE_VERSION}" ] | ||||
| 
 | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.9.11 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.0 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.2 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.16.0 && \ | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.11.0 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.3 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ | ||||
|     rm -rf ${HELM_CACHE_HOME}/plugins | ||||
| 
 | ||||
| # Allow users other than root to use helm plugins located in root home | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| FROM --platform=$BUILDPLATFORM golang:1.22-alpine AS builder | ||||
| FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS builder | ||||
| 
 | ||||
| RUN apk add --no-cache make git | ||||
| WORKDIR /workspace/helmfile | ||||
|  | @ -12,15 +12,15 @@ RUN make static-${TARGETOS}-${TARGETARCH} | |||
| 
 | ||||
| # ----------------------------------------------------------------------------- | ||||
| 
 | ||||
| FROM ubuntu:24.04 | ||||
| FROM ubuntu:24.10 | ||||
| 
 | ||||
| LABEL org.opencontainers.image.source=https://github.com/helmfile/helmfile | ||||
| 
 | ||||
| RUN apt update -qq && \ | ||||
|     apt install --no-install-recommends -y \ | ||||
|       ca-certificates \ | ||||
|       gnupg \ | ||||
|       git bash curl jq wget openssh-client && \ | ||||
|     ca-certificates \ | ||||
|     gnupg \ | ||||
|     git bash curl jq wget openssh-client && \ | ||||
|     rm -rf /var/lib/apt/lists/* | ||||
| 
 | ||||
| ARG TARGETARCH TARGETOS TARGETPLATFORM | ||||
|  | @ -35,7 +35,7 @@ ENV HELM_CONFIG_HOME="${HELM_CONFIG_HOME}" | |||
| ARG HELM_DATA_HOME="${HOME}/.local/share/helm" | ||||
| ENV HELM_DATA_HOME="${HELM_DATA_HOME}" | ||||
| 
 | ||||
| ARG HELM_VERSION="v3.16.1" | ||||
| ARG HELM_VERSION="v3.17.3" | ||||
| ENV HELM_VERSION="${HELM_VERSION}" | ||||
| ARG HELM_LOCATION="https://get.helm.sh" | ||||
| ARG HELM_FILENAME="helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz" | ||||
|  | @ -43,8 +43,8 @@ RUN set -x && \ | |||
|     curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" && \ | ||||
|     echo Verifying ${HELM_FILENAME}... && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         "linux/amd64")  HELM_SHA256="e57e826410269d72be3113333dbfaac0d8dfdd1b0cc4e9cb08bdf97722731ca9"  ;; \ | ||||
|         "linux/arm64")  HELM_SHA256="780b5b86f0db5546769b3e9f0204713bbdd2f6696dfdaac122fbe7f2f31541d2"  ;; \ | ||||
|     "linux/amd64")  HELM_SHA256="ee88b3c851ae6466a3de507f7be73fe94d54cbf2987cbaa3d1a3832ea331f2cd"  ;; \ | ||||
|     "linux/arm64")  HELM_SHA256="7944e3defd386c76fd92d9e6fec5c2d65a323f6fadc19bfb5e704e3eee10348e"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${HELM_SHA256}  ${HELM_FILENAME}" | sha256sum -c && \ | ||||
|     echo Extracting ${HELM_FILENAME}... && \ | ||||
|  | @ -55,13 +55,13 @@ RUN set -x && \ | |||
| # using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/ | ||||
| # for now but in a future version of alpine (in the testing version at the time of writing) | ||||
| # we should be able to install using apk add. | ||||
| ENV KUBECTL_VERSION="v1.28.9" | ||||
| ENV KUBECTL_VERSION="v1.32.1" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl" && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256 | ||||
|         "linux/amd64")  KUBECTL_SHA256="b4693d0b22f509250694b10c7727c42b427d570af04f2065fe23a55d6c0051f1"  ;; \ | ||||
|         "linux/arm64")  KUBECTL_SHA256="e0341d3973213f8099e7fcbbf6d1d506967bc2b7a4faac3fb3b4340f226e9b2f"  ;; \ | ||||
|     # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256 | ||||
|     "linux/amd64")  KUBECTL_SHA256="e16c80f1a9f94db31063477eb9e61a2e24c1a4eee09ba776b029048f5369db0c"  ;; \ | ||||
|     "linux/arm64")  KUBECTL_SHA256="98206fd83a4fd17f013f8c61c33d0ae8ec3a7c53ec59ef3d6a0a9400862dc5b2"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${KUBECTL_SHA256}  kubectl" | sha256sum -c && \ | ||||
|     chmod +x kubectl && \ | ||||
|  | @ -73,16 +73,16 @@ ARG KUSTOMIZE_FILENAME="kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH} | |||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/${KUSTOMIZE_FILENAME}" && \ | ||||
|     case ${TARGETPLATFORM} in \ | ||||
|         # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt | ||||
|         "linux/amd64")  KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7"  ;; \ | ||||
|         "linux/arm64")  KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c"  ;; \ | ||||
|     # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt | ||||
|     "linux/amd64")  KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7"  ;; \ | ||||
|     "linux/arm64")  KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c"  ;; \ | ||||
|     esac && \ | ||||
|     echo "${KUSTOMIZE_SHA256}  ${KUSTOMIZE_FILENAME}" | sha256sum -c && \ | ||||
|     tar xvf "${KUSTOMIZE_FILENAME}" -C /usr/local/bin && \ | ||||
|     rm "${KUSTOMIZE_FILENAME}" && \ | ||||
|     [ "$(kustomize version)" = "${KUSTOMIZE_VERSION}" ] | ||||
| 
 | ||||
| ENV SOPS_VERSION="v3.9.0" | ||||
| ENV SOPS_VERSION="v3.9.3" | ||||
| ARG SOPS_FILENAME="sops-${SOPS_VERSION}.${TARGETOS}.${TARGETARCH}" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/getsops/sops/releases/download/${SOPS_VERSION}/${SOPS_FILENAME}" && \ | ||||
|  | @ -90,7 +90,7 @@ RUN set -x && \ | |||
|     mv "${SOPS_FILENAME}" /usr/local/bin/sops && \ | ||||
|     sops --version --disable-version-check | grep -E "^sops ${SOPS_VERSION#v}" | ||||
| 
 | ||||
| ENV AGE_VERSION="v1.1.1" | ||||
| ENV AGE_VERSION="v1.2.0" | ||||
| ARG AGE_FILENAME="age-${AGE_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz" | ||||
| RUN set -x && \ | ||||
|     curl --retry 5 --retry-connrefused -LO "https://github.com/FiloSottile/age/releases/download/${AGE_VERSION}/${AGE_FILENAME}" && \ | ||||
|  | @ -99,10 +99,10 @@ RUN set -x && \ | |||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||
|     [ "$(age-keygen --version)" = "${AGE_VERSION}" ] | ||||
| 
 | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.9.11 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.0 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.2 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.16.0 && \ | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.11.0 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.3 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ | ||||
|     rm -rf ${HELM_CACHE_HOME}/plugins | ||||
| 
 | ||||
| # Allow users other than root to use helm plugins located in root home | ||||
|  |  | |||
							
								
								
									
										4
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										4
									
								
								Makefile
								
								
								
								
							|  | @ -25,10 +25,6 @@ build: | |||
| 	go build -ldflags="$(GO_BUILD_VERSION_LDFLAGS)" ${TARGETS} | ||||
| .PHONY: build | ||||
| 
 | ||||
| build-v1: | ||||
| 	go build -ldflags="$(GO_BUILD_VERSION_LDFLAGS) -X github.com/helmfile/helmfile/pkg/runtime.v1Mode=true" ${TARGETS} | ||||
| .PHONY: build-v1 | ||||
| 
 | ||||
| generate: | ||||
| 	go generate ${PKGS} | ||||
| .PHONY: generate | ||||
|  |  | |||
|  | @ -12,10 +12,11 @@ | |||
| # Helmfile | ||||
| 
 | ||||
| [](https://github.com/helmfile/helmfile/actions/workflows/ci.yaml?query=branch%3Amain) | ||||
| [](https://github.com/helmfile/helmfile/pkgs/container/helmfile) | ||||
| [](https://github.com/helmfile/helmfile/pkgs/container/helmfile) | ||||
| [](https://goreportcard.com/report/github.com/helmfile/helmfile) | ||||
| [](https://slack.sweetops.com) | ||||
| [](https://helmfile.readthedocs.io/en/latest/) | ||||
| [](https://gurubase.io/g/helmfile) | ||||
| 
 | ||||
| 声明式Helm Chart管理工具 | ||||
| <br /> | ||||
|  |  | |||
|  | @ -12,10 +12,11 @@ | |||
| # Helmfile | ||||
| 
 | ||||
| [](https://github.com/helmfile/helmfile/actions/workflows/ci.yaml?query=branch%3Amain) | ||||
| [](https://github.com/helmfile/helmfile/pkgs/container/helmfile) | ||||
| [](https://github.com/helmfile/helmfile/pkgs/container/helmfile) | ||||
| [](https://goreportcard.com/report/github.com/helmfile/helmfile) | ||||
| [](https://slack.sweetops.com) | ||||
| [](https://helmfile.readthedocs.io/en/latest/) | ||||
| [](https://gurubase.io/g/helmfile) | ||||
| 
 | ||||
| Deploy Kubernetes Helm Charts | ||||
| <br /> | ||||
|  | @ -104,6 +105,10 @@ Iterate on the `helmfile.yaml` by referencing: | |||
| * [CLI reference](https://helmfile.readthedocs.io/en/latest/#cli-reference) | ||||
| * [Helmfile Best Practices Guide](https://helmfile.readthedocs.io/en/latest/writing-helmfile/) | ||||
| 
 | ||||
| ## More complex examples | ||||
| 
 | ||||
| See: [multi-env-helmfile](https://github.com/helmfile/multi-env-helmfile) | ||||
| 
 | ||||
| ## Docs | ||||
| 
 | ||||
| Please read [complete documentation](https://helmfile.readthedocs.io/) | ||||
|  |  | |||
							
								
								
									
										11
									
								
								cmd/apply.go
								
								
								
								
							
							
						
						
									
										11
									
								
								cmd/apply.go
								
								
								
								
							|  | @ -5,7 +5,6 @@ import ( | |||
| 
 | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/helmfile/helmfile/pkg/runtime" | ||||
| ) | ||||
| 
 | ||||
| // NewApplyCmd returns apply subcmd
 | ||||
|  | @ -44,12 +43,6 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command { | |||
| 	f.StringVar(&applyOptions.DiffArgs, "diff-args", "", `pass args to helm helm-diff`) | ||||
| 	f.StringVar(&applyOptions.SyncArgs, "sync-args", "", `pass args to helm upgrade`) | ||||
| 	f.StringVar(&globalCfg.GlobalOptions.Args, "args", "", "pass args to helm exec") | ||||
| 	if !runtime.V1Mode { | ||||
| 		// TODO: Remove this function once Helmfile v0.x
 | ||||
| 		f.BoolVar(&applyOptions.RetainValuesFiles, "retain-values-files", false, "DEPRECATED: Use skip-cleanup instead") | ||||
| 		_ = f.MarkDeprecated("retain-values-files", "Use skip-cleanup instead") | ||||
| 	} | ||||
| 
 | ||||
| 	f.BoolVar(&applyOptions.SkipCleanup, "skip-cleanup", false, "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security") | ||||
| 	f.BoolVar(&applyOptions.SkipCRDs, "skip-crds", false, "if set, no CRDs will be installed on sync. By default, CRDs are installed if not already present") | ||||
| 	f.BoolVar(&applyOptions.SkipNeeds, "skip-needs", true, `do not automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when --selector/-l flag is not provided. Defaults to true when --include-needs or --include-transitive-needs is not provided`) | ||||
|  | @ -61,6 +54,9 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command { | |||
| 	f.BoolVar(&applyOptions.SuppressSecrets, "suppress-secrets", false, "suppress secrets in the diff output. highly recommended to specify on CI/CD use-cases") | ||||
| 	f.BoolVar(&applyOptions.ShowSecrets, "show-secrets", false, "do not redact secret values in the diff output. should be used for debug purpose only") | ||||
| 	f.BoolVar(&applyOptions.NoHooks, "no-hooks", false, "do not diff changes made by hooks.") | ||||
| 	f.BoolVar(&applyOptions.HideNotes, "hide-notes", false, "add --hide-notes flag to helm") | ||||
| 	f.BoolVar(&applyOptions.TakeOwnership, "take-ownership", false, "add --take-ownership flag to helm") | ||||
| 	f.BoolVar(&applyOptions.SyncReleaseLabels, "sync-release-labels", false, "sync release labels to the target release") | ||||
| 	f.BoolVar(&applyOptions.SuppressDiff, "suppress-diff", false, "suppress diff in the output. Usable in new installs") | ||||
| 	f.BoolVar(&applyOptions.Wait, "wait", false, `Override helmDefaults.wait setting "helm upgrade --install --wait"`) | ||||
| 	f.BoolVar(&applyOptions.WaitForJobs, "wait-for-jobs", false, `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`) | ||||
|  | @ -68,6 +64,7 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command { | |||
| 	f.BoolVar(&applyOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reset-values"`) | ||||
| 	f.StringVar(&applyOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | ||||
| 	f.StringArrayVar(&applyOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`) | ||||
| 	f.BoolVar(&applyOptions.SkipSchemaValidation, "skip-schema-validation", false, `pass --skip-schema-validation to "helm template" or "helm upgrade --install"`) | ||||
| 	f.StringVar(&applyOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background") | ||||
| 	f.StringArrayVar(&applyOptions.SuppressOutputLineRegex, "suppress-output-line-regex", nil, "a list of regex patterns to suppress output lines from the diff output") | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,41 +0,0 @@ | |||
| // TODO: Remove this function once Helmfile v0.x
 | ||||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/spf13/cobra" | ||||
| 
 | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| ) | ||||
| 
 | ||||
| // NewChartsCmd returns charts subcmd
 | ||||
| func NewChartsCmd(globalCfg *config.GlobalImpl) *cobra.Command { | ||||
| 	chartsOptions := config.NewChartsOptions() | ||||
| 
 | ||||
| 	cmd := &cobra.Command{ | ||||
| 		Use:   "charts", | ||||
| 		Short: "DEPRECATED: sync releases from state file (helm upgrade --install)", | ||||
| 		RunE: func(cmd *cobra.Command, args []string) error { | ||||
| 			chartsImpl := config.NewChartsImpl(globalCfg, chartsOptions) | ||||
| 			err := config.NewCLIConfigImpl(chartsImpl.GlobalImpl) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 
 | ||||
| 			if err := chartsImpl.ValidateConfig(); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 
 | ||||
| 			a := app.New(chartsImpl) | ||||
| 			return toCLIError(chartsImpl.GlobalImpl, a.DeprecatedSyncCharts(chartsImpl)) | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	f := cmd.Flags() | ||||
| 	f.StringVar(&globalCfg.GlobalOptions.Args, "args", "", "pass args to helm exec") | ||||
| 	f.StringArrayVar(&chartsOptions.Set, "set", nil, "additional values to be merged into the helm command --set flag") | ||||
| 	f.StringArrayVar(&chartsOptions.Values, "values", nil, "additional value files to be merged into the helm command --values flag") | ||||
| 	f.IntVar(&chartsOptions.Concurrency, "concurrency", 0, "maximum number of concurrent helm processes to run, 0 is unlimited") | ||||
| 
 | ||||
| 	return cmd | ||||
| } | ||||
|  | @ -1,44 +0,0 @@ | |||
| // TODO: Remove this function once Helmfile v0.x
 | ||||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/spf13/cobra" | ||||
| 
 | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| ) | ||||
| 
 | ||||
| // NewDeleteCmd returns delete subcmd
 | ||||
| func NewDeleteCmd(globalCfg *config.GlobalImpl) *cobra.Command { | ||||
| 	deleteOptions := config.NewDeleteOptions() | ||||
| 
 | ||||
| 	cmd := &cobra.Command{ | ||||
| 		Use:   "delete", | ||||
| 		Short: "DEPRECATED: delete releases from state file (helm delete)", | ||||
| 		RunE: func(cmd *cobra.Command, args []string) error { | ||||
| 			deleteImpl := config.NewDeleteImpl(globalCfg, deleteOptions) | ||||
| 			err := config.NewCLIConfigImpl(deleteImpl.GlobalImpl) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 
 | ||||
| 			if err := deleteImpl.ValidateConfig(); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 
 | ||||
| 			a := app.New(deleteImpl) | ||||
| 			return toCLIError(deleteImpl.GlobalImpl, a.Delete(deleteImpl)) | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	f := cmd.Flags() | ||||
| 	f.StringVar(&globalCfg.GlobalOptions.Args, "args", "", "pass args to helm exec") | ||||
| 	f.StringVar(&deleteOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background") | ||||
| 	f.IntVar(&deleteOptions.Concurrency, "concurrency", 0, "maximum number of concurrent helm processes to run, 0 is unlimited") | ||||
| 	f.BoolVar(&deleteOptions.Purge, "purge", false, "purge releases i.e. free release names and histories") | ||||
| 	f.BoolVar(&deleteOptions.SkipCharts, "skip-charts", false, "don't prepare charts when deleting releases") | ||||
| 	f.BoolVar(&deleteOptions.DeleteWait, "deleteWait", false, `override helmDefaults.wait setting "helm uninstall --wait"`) | ||||
| 	f.IntVar(&deleteOptions.DeleteTimeout, "deleteTimeout", 300, `time in seconds to wait for helm uninstall, default: 300`) | ||||
| 
 | ||||
| 	return cmd | ||||
| } | ||||
|  | @ -109,14 +109,6 @@ func NewRootCmd(globalConfig *config.GlobalOptions) (*cobra.Command, error) { | |||
| 		), | ||||
| 	) | ||||
| 
 | ||||
| 	// TODO: Remove this function once Helmfile v0.x
 | ||||
| 	if !runtime.V1Mode { | ||||
| 		cmd.AddCommand( | ||||
| 			NewChartsCmd(globalImpl), | ||||
| 			NewDeleteCmd(globalImpl), | ||||
| 		) | ||||
| 	} | ||||
| 
 | ||||
| 	return cmd, nil | ||||
| } | ||||
| 
 | ||||
|  | @ -129,6 +121,7 @@ func setGlobalOptionsForRootCmd(fs *pflag.FlagSet, globalOptions *config.GlobalO | |||
| 	fs.StringArrayVar(&globalOptions.StateValuesSetString, "state-values-set-string", nil, "set state STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2). Used to override .Values within the helmfile template (not values template).") | ||||
| 	fs.StringArrayVar(&globalOptions.StateValuesFile, "state-values-file", nil, "specify state values in a YAML file. Used to override .Values within the helmfile template (not values template).") | ||||
| 	fs.BoolVar(&globalOptions.SkipDeps, "skip-deps", false, `skip running "helm repo update" and "helm dependency build"`) | ||||
| 	fs.BoolVar(&globalOptions.SkipRefresh, "skip-refresh", false, `skip running "helm repo update"`) | ||||
| 	fs.BoolVar(&globalOptions.StripArgsValuesOnExitError, "strip-args-values-on-exit-error", true, `Strip the potential secret values of the helm command args contained in a helmfile error message`) | ||||
| 	fs.BoolVar(&globalOptions.DisableForceUpdate, "disable-force-update", false, `do not force helm repos to update when executing "helm repo add"`) | ||||
| 	fs.BoolVarP(&globalOptions.Quiet, "quiet", "q", false, "Silence output. Equivalent to log-level warn") | ||||
|  |  | |||
|  | @ -41,12 +41,16 @@ func NewSyncCmd(globalCfg *config.GlobalImpl) *cobra.Command { | |||
| 	f.BoolVar(&syncOptions.SkipCRDs, "skip-crds", false, "if set, no CRDs will be installed on sync. By default, CRDs are installed if not already present") | ||||
| 	f.BoolVar(&syncOptions.IncludeNeeds, "include-needs", false, `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when --selector/-l flag is not provided`) | ||||
| 	f.BoolVar(&syncOptions.IncludeTransitiveNeeds, "include-transitive-needs", false, `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`) | ||||
| 	f.BoolVar(&syncOptions.HideNotes, "hide-notes", false, "add --hide-notes flag to helm") | ||||
| 	f.BoolVar(&syncOptions.TakeOwnership, "take-ownership", false, `add --take-ownership flag to helm`) | ||||
| 	f.BoolVar(&syncOptions.SyncReleaseLabels, "sync-release-labels", false, "sync release labels to the target release") | ||||
| 	f.BoolVar(&syncOptions.Wait, "wait", false, `Override helmDefaults.wait setting "helm upgrade --install --wait"`) | ||||
| 	f.BoolVar(&syncOptions.WaitForJobs, "wait-for-jobs", false, `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`) | ||||
| 	f.BoolVar(&syncOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reuse-values"`) | ||||
| 	f.BoolVar(&syncOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reset-values"`) | ||||
| 	f.StringVar(&syncOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | ||||
| 	f.StringArrayVar(&syncOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`) | ||||
| 	f.BoolVar(&syncOptions.SkipSchemaValidation, "skip-schema-validation", false, `pass --skip-schema-validation to "helm template" or "helm upgrade --install"`) | ||||
| 	f.StringVar(&syncOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background") | ||||
| 
 | ||||
| 	return cmd | ||||
|  |  | |||
|  | @ -44,8 +44,10 @@ func NewTemplateCmd(globalCfg *config.GlobalImpl) *cobra.Command { | |||
| 	f.BoolVar(&templateOptions.IncludeNeeds, "include-needs", false, `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when --selector/-l flag is not provided`) | ||||
| 	f.BoolVar(&templateOptions.IncludeTransitiveNeeds, "include-transitive-needs", false, `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`) | ||||
| 	f.BoolVar(&templateOptions.SkipCleanup, "skip-cleanup", false, "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security") | ||||
| 	f.BoolVar(&templateOptions.NoHooks, "no-hooks", false, "do not template files made by hooks.") | ||||
| 	f.StringVar(&templateOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | ||||
| 	f.StringArrayVar(&templateOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`) | ||||
| 	f.BoolVar(&templateOptions.SkipSchemaValidation, "skip-schema-validation", false, `pass skip-schema-validation to "helm template" or "helm upgrade --install"`) | ||||
| 	f.StringVar(&templateOptions.KubeVersion, "kube-version", "", `pass --kube-version to "helm template". Overrides kubeVersion in helmfile.yaml`) | ||||
| 	f.StringArrayVar(&templateOptions.ShowOnly, "show-only", nil, `pass --show-only to "helm template"`) | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ | |||
| # Helmfile | ||||
| 
 | ||||
| [](https://github.com/helmfile/helmfile/actions/workflows/ci.yaml?query=branch%3Amain) | ||||
| [](https://github.com/helmfile/helmfile/pkgs/container/helmfile) | ||||
| [](https://github.com/helmfile/helmfile/pkgs/container/helmfile) | ||||
| [](https://goreportcard.com/report/github.com/helmfile/helmfile) | ||||
| [](https://slack.sweetops.com) | ||||
| [](https://helmfile.readthedocs.io/en/latest/) | ||||
|  | @ -193,8 +193,12 @@ helmDefaults: | |||
|   # verify the chart before upgrading (only works with packaged charts not directories) (default false) | ||||
|   verify: true | ||||
|   keyring: path/to/keyring.gpg | ||||
|   #  --skip-schema-validation flag to helm 'install', 'upgrade' and 'lint', starts with helm 3.16.0 (default false) | ||||
|   skipSchemaValidation: false | ||||
|   # wait for k8s resources via --wait. (default false) | ||||
|   wait: true | ||||
|   # if set and --wait enabled, will retry any failed check on resource state subject to the specified number of retries (default 0) | ||||
|   waitRetries: 3 | ||||
|   # if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout (default false, Implemented in Helm3.5) | ||||
|   waitForJobs: true | ||||
|   # time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks, and waits on pod/pvc/svc/deployment readiness) (default 300) | ||||
|  | @ -236,6 +240,9 @@ helmDefaults: | |||
|   # suppressOutputLineRegex is a list of regex patterns to suppress output lines from helm diff (default []), available in helmfile v0.162.0 | ||||
|   suppressOutputLineRegex: | ||||
|     - "version" | ||||
|   # syncReleaseLabels is a list of labels to be added to the release when syncing. | ||||
|   syncReleaseLabels: false | ||||
| 
 | ||||
| 
 | ||||
| # these labels will be applied to all releases in a Helmfile. Useful in templating if you have a helmfile per environment or customer and don't want to copy the same label to each release | ||||
| commonLabels: | ||||
|  | @ -282,6 +289,16 @@ releases: | |||
|           domain: {{ requiredEnv "PLATFORM_ID" }}.my-domain.com | ||||
|           scheme: {{ env "SCHEME" | default "https" }} | ||||
|     # Use `values` whenever possible! | ||||
|     # `setString` translates to helm's `--set-string key=val` | ||||
|     setString: | ||||
|     # set a single array value in an array, translates to --set-string bar[0]={1,2} | ||||
|     - name: bar[0] | ||||
|       values: | ||||
|       - 1 | ||||
|       - 2 | ||||
|     # set a templated value | ||||
|     - name: namespace | ||||
|       value: {{ .Namespace }} | ||||
|     # `set` translates to helm's `--set key=val`, that is known to suffer from type issues like https://github.com/roboll/helmfile/issues/608 | ||||
|     set: | ||||
|     # single value loaded from a local file, translates to --set-file foo.config=path/to/file | ||||
|  | @ -298,14 +315,18 @@ releases: | |||
|     # will attempt to decrypt it using helm-secrets plugin | ||||
|     secrets: | ||||
|       - vault_secret.yaml | ||||
|     # Override helmDefaults options for verify, wait, waitForJobs, timeout, recreatePods and force. | ||||
|     # Override helmDefaults options for verify, wait, waitForJobs, timeout, recreatePods, force and reuseValues. | ||||
|     verify: true | ||||
|     keyring: path/to/keyring.gpg | ||||
|     #  --skip-schema-validation flag to helm 'install', 'upgrade' and 'lint', starts with helm 3.16.0 (default false) | ||||
|     skipSchemaValidation: false | ||||
|     wait: true | ||||
|     waitRetries: 3 | ||||
|     waitForJobs: true | ||||
|     timeout: 60 | ||||
|     recreatePods: true | ||||
|     force: false | ||||
|     reuseValues: false | ||||
|     # set `false` to uninstall this release on sync.  (default true) | ||||
|     installed: true | ||||
|     # restores previous state in case of failed release (default false) | ||||
|  | @ -352,6 +373,8 @@ releases: | |||
|     # suppressOutputLineRegex is a list of regex patterns to suppress output lines from helm diff (default []), available in helmfile v0.162.0 | ||||
|     suppressOutputLineRegex: | ||||
|       - "version" | ||||
|     # syncReleaseLabels is a list of labels to be added to the release when syncing. | ||||
|     syncReleaseLabels: false | ||||
| 
 | ||||
| 
 | ||||
|   # Local chart example | ||||
|  | @ -547,10 +570,10 @@ Helmfile uses some OS environment variables to override default behaviour: | |||
| * `HELMFILE_ENVIRONMENT` - specify [Helmfile environment](https://helmfile.readthedocs.io/en/latest/#environment), it has lower priority than CLI argument `--environment` | ||||
| * `HELMFILE_TEMPDIR` - specify directory to store temporary files | ||||
| * `HELMFILE_UPGRADE_NOTICE_DISABLED` - expecting any non-empty value to skip the check for the latest version of Helmfile in [helmfile version](https://helmfile.readthedocs.io/en/latest/#version) | ||||
| * `HELMFILE_V1MODE` - Helmfile v0.x behaves like v1.x with `true`, Helmfile v1.x behaves like v0.x with `false` as value | ||||
| * `HELMFILE_GOCCY_GOYAML` - use *goccy/go-yaml* instead of *gopkg.in/yaml.v2*.  It's `false` by default in Helmfile v0.x and `true` by default for Helmfile v1.x. | ||||
| * `HELMFILE_CACHE_HOME` - specify directory to store cached files for remote operations | ||||
| * `HELMFILE_FILE_PATH` - specify the path to the helmfile.yaml file | ||||
| * `HELMFILE_INTERACTIVE` - enable interactive mode, expecting `true` lower case. The same as `--interactive` CLI flag | ||||
| 
 | ||||
| ## CLI Reference | ||||
| 
 | ||||
|  | @ -674,7 +697,7 @@ The `helmfile destroy` sub-command uninstalls and purges all the releases define | |||
| `helmfile --interactive destroy` instructs Helmfile to request your confirmation before actually deleting releases. | ||||
| 
 | ||||
| `destroy` basically runs `helm uninstall --purge` on all the targeted releases. If you don't want purging, use `helmfile delete` instead. | ||||
| If `--skip-charts` flag is not set, destory would prepare all releases, by fetching charts and templating them. | ||||
| If `--skip-charts` flag is not set, destroy would prepare all releases, by fetching charts and templating them. | ||||
| 
 | ||||
| ### delete (DEPRECATED) | ||||
| 
 | ||||
|  | @ -683,7 +706,7 @@ The `helmfile delete` sub-command deletes all the releases defined in the manife | |||
| `helmfile --interactive delete` instructs Helmfile to request your confirmation before actually deleting releases. | ||||
| 
 | ||||
| Note that `delete` doesn't purge releases. So `helmfile delete && helmfile sync` results in sync failed due to that releases names are not deleted but preserved for future references. If you really want to remove releases for reuse, add `--purge` flag to run it like `helmfile delete --purge`. | ||||
| If `--skip-charts` flag is not set, destory would prepare all releases, by fetching charts and templating them. | ||||
| If `--skip-charts` flag is not set, destroy would prepare all releases, by fetching charts and templating them. | ||||
| 
 | ||||
| ### secrets | ||||
| 
 | ||||
|  | @ -747,7 +770,7 @@ For additional context, take a look at [paths examples](paths.md). | |||
| 
 | ||||
| A selector can be used to only target a subset of releases when running Helmfile. This is useful for large helmfiles with releases that are logically grouped together. | ||||
| 
 | ||||
| Labels are simple key value pairs that are an optional field of the release spec. When selecting by label, the search can be inverted. `tier!=backend` would match all releases that do NOT have the `tier: backend` label. `tier=fronted` would only match releases with the `tier: frontend` label. | ||||
| Labels are simple key value pairs that are an optional field of the release spec. When selecting by label, the search can be inverted. `tier!=backend` would match all releases that do NOT have the `tier: backend` label. `tier=frontend` would only match releases with the `tier: frontend` label. | ||||
| 
 | ||||
| Multiple labels can be specified using `,` as a separator. A release must match all selectors in order to be selected for the final helm command. | ||||
| 
 | ||||
|  | @ -1346,7 +1369,7 @@ helmfiles: | |||
|   - name=prometheus | ||||
|   - tier=frontend | ||||
| - path: apps/b-helmfile.yaml # no selector, so all releases are used | ||||
| selectors: [] | ||||
|   selectors: [] | ||||
| - path: apps/c-helmfile.yaml # parent selector to be used or cli selector for the initial helmfile | ||||
|   selectorsInherited: true | ||||
| ``` | ||||
|  | @ -1657,6 +1680,9 @@ Use it when you're running `helmfile` manually on your local machine or a kind o | |||
| 
 | ||||
| For your local use-case, aliasing it like `alias hi='helmfile --interactive'` would be convenient. | ||||
| 
 | ||||
| Another way to use it is to set the environment variable `HELMFILE_INTERACTIVE=true` to enable the interactive mode by default. | ||||
| Anything other than `true` will disable the interactive mode. The precedence has the `--interactive` flag. | ||||
| 
 | ||||
| ## Running Helmfile without an Internet connection | ||||
| 
 | ||||
| Once you download all required charts into your machine, you can run `helmfile sync --skip-deps` to deploy your apps. | ||||
|  |  | |||
|  | @ -28,6 +28,7 @@ We also provide the alternative way in the latest v0.x release before v1.0. That | |||
| 4. [Remove `HELMFILE_SKIP_INSECURE_TEMPLATE_FUNCTIONS` in favor of `HELMFILE_DISABLE_INSECURE_FEATURES`](#remove-helmfile_skip_insecure_template_functions-in-favor-of-helmfile_disable_insecure_features) | ||||
| 5. [The long deprecated `charts.yaml` has been finally removed](#the-long-deprecated-chartsyaml-has-been-finally-removed) | ||||
| 6. [List experimental features](#list-experimental-features) | ||||
| 7. [Remove charts and delete sub-commands](#remove-charts-and-delete-subcommands) | ||||
| 
 | ||||
| ### Forbid the use of `environments` and `releases` within a single helmfile.yaml.gotmpl part | ||||
| 
 | ||||
|  | @ -110,6 +111,9 @@ Why now? | |||
| In Helmfile v0.x, all features considered experimental as we follow semver. However, we "ended up" preserving backward-compatibility within v0 and between v0 and v1 "by chance". This doesn't mean anything | ||||
| introduced in v0 is stable. For example, we might have some features implemented in a very later stage of v0 that are not stable yet. We should mark them as experimental, or we can't fix them in a backward-incompatible way in v1.x. That's why we need to list experimental features now. | ||||
| 
 | ||||
| ### remove-charts-and-delete-subcommands | ||||
| Now we remove `helmfile charts` and `helmfile delete` subcommands. you can use `helmfile destroy` and `helmfile sync` instead. | ||||
| 
 | ||||
| ## After 1.0 | ||||
| 
 | ||||
| We won't add any backward-incompatible changes while in 1.x, as long as it's inevitable to fix unseen important bug(s). | ||||
|  |  | |||
|  | @ -17,8 +17,8 @@ To fetch single key from remote secret storage you can use `fetchSecretValue` te | |||
| 
 | ||||
| repositories: | ||||
|   - name: stable | ||||
|     url: https://kubernetes-charts.storage.googleapis.com | ||||
| 
 | ||||
|     url: https://charts.helm.sh/stable | ||||
| --- | ||||
| environments: | ||||
|   default: | ||||
|     values: | ||||
|  |  | |||
|  | @ -1,10 +1,10 @@ | |||
| Babel==2.9.1 | ||||
| Babel==2.17.0 | ||||
| click==8.1.2 | ||||
| ghp-import==2.0.2 | ||||
| gitdb==4.0.9 | ||||
| GitPython==3.1.41 | ||||
| importlib-metadata==4.11.3 | ||||
| Jinja2==3.1.4 | ||||
| Jinja2==3.1.6 | ||||
| Markdown==3.6 | ||||
| MarkupSafe==2.1.1 | ||||
| mergedeep==1.3.4 | ||||
|  |  | |||
							
								
								
									
										285
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										285
									
								
								go.mod
								
								
								
								
							|  | @ -1,45 +1,43 @@ | |||
| module github.com/helmfile/helmfile | ||||
| 
 | ||||
| go 1.22.6 | ||||
| go 1.24.2 | ||||
| 
 | ||||
| require ( | ||||
| 	dario.cat/mergo v1.0.1 | ||||
| 	github.com/Masterminds/semver/v3 v3.3.0 | ||||
| 	github.com/Masterminds/semver/v3 v3.3.1 | ||||
| 	github.com/Masterminds/sprig/v3 v3.3.0 | ||||
| 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc | ||||
| 	github.com/go-test/deep v1.1.1 | ||||
| 	github.com/goccy/go-yaml v1.12.0 | ||||
| 	github.com/goccy/go-yaml v1.17.1 | ||||
| 	github.com/golang/mock v1.6.0 | ||||
| 	github.com/google/go-cmp v0.6.0 | ||||
| 	github.com/google/go-cmp v0.7.0 | ||||
| 	github.com/gosuri/uitable v0.0.4 | ||||
| 	github.com/hashicorp/go-getter v1.7.6 | ||||
| 	github.com/hashicorp/hcl/v2 v2.22.0 | ||||
| 	github.com/helmfile/chartify v0.20.2 | ||||
| 	github.com/helmfile/vals v0.37.5 | ||||
| 	github.com/spf13/cobra v1.8.1 | ||||
| 	github.com/spf13/pflag v1.0.5 | ||||
| 	github.com/stretchr/testify v1.9.0 | ||||
| 	github.com/hashicorp/go-getter v1.7.8 | ||||
| 	github.com/hashicorp/hcl/v2 v2.23.0 | ||||
| 	github.com/helmfile/chartify v0.22.0 | ||||
| 	github.com/helmfile/vals v0.40.1 | ||||
| 	github.com/spf13/cobra v1.9.1 | ||||
| 	github.com/spf13/pflag v1.0.6 | ||||
| 	github.com/stretchr/testify v1.10.0 | ||||
| 	github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939 | ||||
| 	github.com/tj/assert v0.0.3 | ||||
| 	github.com/variantdev/dag v1.1.0 | ||||
| 	github.com/zclconf/go-cty v1.15.0 | ||||
| 	github.com/zclconf/go-cty-yaml v1.0.3 | ||||
| 	github.com/zclconf/go-cty v1.16.2 | ||||
| 	github.com/zclconf/go-cty-yaml v1.1.0 | ||||
| 	go.szostok.io/version v1.2.0 | ||||
| 	go.uber.org/zap v1.27.0 | ||||
| 	golang.org/x/sync v0.8.0 | ||||
| 	golang.org/x/term v0.24.0 | ||||
| 	golang.org/x/sync v0.13.0 | ||||
| 	golang.org/x/term v0.31.0 | ||||
| 	gopkg.in/yaml.v2 v2.4.0 | ||||
| 	helm.sh/helm/v3 v3.16.1 | ||||
| 	k8s.io/apimachinery v0.31.1 | ||||
| 	helm.sh/helm/v3 v3.17.3 | ||||
| 	k8s.io/apimachinery v0.33.0 | ||||
| ) | ||||
| 
 | ||||
| replace gopkg.in/yaml.v3 => github.com/colega/go-yaml-yaml v0.0.0-20220720070545-aaba007ebc22 | ||||
| 
 | ||||
| require ( | ||||
| 	cloud.google.com/go v0.115.1 // indirect | ||||
| 	cloud.google.com/go/iam v1.2.0 // indirect | ||||
| 	cloud.google.com/go/storage v1.43.0 // indirect | ||||
| 	filippo.io/age v1.2.0 // indirect | ||||
| 	cloud.google.com/go v0.116.0 // indirect | ||||
| 	cloud.google.com/go/iam v1.2.2 // indirect | ||||
| 	cloud.google.com/go/storage v1.50.0 // indirect | ||||
| 	filippo.io/age v1.2.1 // indirect | ||||
| 	github.com/Azure/go-autorest v14.2.0+incompatible // indirect | ||||
| 	github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect | ||||
| 	github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 // indirect | ||||
|  | @ -47,37 +45,37 @@ require ( | |||
| 	github.com/Azure/go-autorest/logger v0.2.1 // indirect | ||||
| 	github.com/Azure/go-autorest/tracing v0.6.0 // indirect | ||||
| 	github.com/Masterminds/goutils v1.1.1 // indirect | ||||
| 	github.com/a8m/envsubst v1.4.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go v1.55.5 | ||||
| 	github.com/a8m/envsubst v1.4.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go v1.55.7 | ||||
| 	github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect | ||||
| 	github.com/blang/semver v3.5.1+incompatible // indirect | ||||
| 	github.com/dimchansky/utfbom v1.1.1 // indirect | ||||
| 	github.com/fatih/color v1.17.0 // indirect | ||||
| 	github.com/fujiwara/tfstate-lookup v1.4.1 // indirect | ||||
| 	github.com/golang-jwt/jwt/v4 v4.5.0 // indirect | ||||
| 	github.com/fatih/color v1.18.0 | ||||
| 	github.com/fujiwara/tfstate-lookup v1.5.0 // indirect | ||||
| 	github.com/golang-jwt/jwt/v4 v4.5.2 // indirect | ||||
| 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||||
| 	github.com/golang/protobuf v1.5.4 // indirect | ||||
| 	github.com/google/go-querystring v1.1.0 // indirect | ||||
| 	github.com/google/uuid v1.6.0 // indirect | ||||
| 	github.com/googleapis/gax-go/v2 v2.13.0 // indirect | ||||
| 	github.com/googleapis/gax-go/v2 v2.14.1 // indirect | ||||
| 	github.com/goware/prefixer v0.0.0-20160118172347-395022866408 // indirect | ||||
| 	github.com/hashicorp/errwrap v1.1.0 // indirect | ||||
| 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | ||||
| 	github.com/hashicorp/go-multierror v1.1.1 // indirect | ||||
| 	github.com/hashicorp/go-rootcerts v1.0.2 // indirect | ||||
| 	github.com/hashicorp/go-safetemp v1.0.0 // indirect | ||||
| 	github.com/hashicorp/go-slug v0.15.0 // indirect | ||||
| 	github.com/hashicorp/go-sockaddr v1.0.6 // indirect | ||||
| 	github.com/hashicorp/go-slug v0.16.3 // indirect | ||||
| 	github.com/hashicorp/go-sockaddr v1.0.7 // indirect | ||||
| 	github.com/hashicorp/go-tfe v1.56.0 // indirect | ||||
| 	github.com/hashicorp/golang-lru v1.0.2 // indirect | ||||
| 	github.com/hashicorp/hcl v1.0.0 // indirect | ||||
| 	github.com/hashicorp/jsonapi v1.3.1 // indirect | ||||
| 	github.com/hashicorp/vault/api v1.14.0 // indirect | ||||
| 	github.com/hashicorp/vault/api v1.16.0 // indirect | ||||
| 	github.com/huandu/xstrings v1.5.0 // indirect | ||||
| 	github.com/inconshreveable/mousetrap v1.1.0 // indirect | ||||
| 	github.com/itchyny/gojq v0.12.16 // indirect | ||||
| 	github.com/jmespath/go-jmespath v0.4.0 // indirect | ||||
| 	github.com/klauspost/compress v1.16.0 // indirect | ||||
| 	github.com/klauspost/compress v1.16.7 // indirect | ||||
| 	github.com/lib/pq v1.10.9 // indirect | ||||
| 	github.com/mattn/go-colorable v0.1.13 // indirect | ||||
| 	github.com/mattn/go-runewidth v0.0.15 // indirect | ||||
|  | @ -87,7 +85,7 @@ require ( | |||
| 	github.com/mitchellh/go-wordwrap v1.0.1 // indirect | ||||
| 	github.com/mitchellh/mapstructure v1.5.0 // indirect | ||||
| 	github.com/mitchellh/reflectwalk v1.0.2 // indirect | ||||
| 	github.com/otiai10/copy v1.14.0 // indirect | ||||
| 	github.com/otiai10/copy v1.14.1 // indirect | ||||
| 	github.com/pkg/errors v0.9.1 | ||||
| 	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect | ||||
| 	github.com/ryanuber/go-glob v1.0.0 // indirect | ||||
|  | @ -97,101 +95,116 @@ require ( | |||
| 	github.com/ulikunitz/xz v0.5.10 // indirect | ||||
| 	go.opencensus.io v0.24.0 // indirect | ||||
| 	go.uber.org/atomic v1.9.0 // indirect | ||||
| 	golang.org/x/net v0.28.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.23.0 // indirect | ||||
| 	golang.org/x/sys v0.25.0 // indirect | ||||
| 	golang.org/x/text v0.17.0 // indirect | ||||
| 	golang.org/x/time v0.6.0 // indirect | ||||
| 	golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect | ||||
| 	google.golang.org/api v0.196.0 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect | ||||
| 	google.golang.org/grpc v1.66.0 // indirect | ||||
| 	google.golang.org/protobuf v1.34.2 // indirect | ||||
| 	golang.org/x/net v0.38.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.28.0 // indirect | ||||
| 	golang.org/x/sys v0.32.0 // indirect | ||||
| 	golang.org/x/text v0.23.0 // indirect | ||||
| 	golang.org/x/time v0.9.0 // indirect | ||||
| 	google.golang.org/api v0.215.0 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect | ||||
| 	google.golang.org/grpc v1.68.0 // indirect | ||||
| 	google.golang.org/protobuf v1.36.5 // indirect | ||||
| 	gopkg.in/ini.v1 v1.67.0 // indirect | ||||
| 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect | ||||
| 	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect | ||||
| 	sigs.k8s.io/yaml v1.4.0 // indirect | ||||
| ) | ||||
| 
 | ||||
| require ( | ||||
| 	cloud.google.com/go/auth v0.9.3 // indirect | ||||
| 	cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect | ||||
| 	cloud.google.com/go/compute/metadata v0.5.0 // indirect | ||||
| 	cloud.google.com/go/kms v1.19.0 // indirect | ||||
| 	cloud.google.com/go/longrunning v0.6.0 // indirect | ||||
| 	cloud.google.com/go/secretmanager v1.14.0 // indirect | ||||
| 	al.essio.dev/pkg/shellescape v1.5.1 // indirect | ||||
| 	cel.dev/expr v0.18.0 // indirect | ||||
| 	cloud.google.com/go/auth v0.13.0 // indirect | ||||
| 	cloud.google.com/go/auth/oauth2adapt v0.2.6 // indirect | ||||
| 	cloud.google.com/go/compute/metadata v0.6.0 // indirect | ||||
| 	cloud.google.com/go/kms v1.20.5 // indirect | ||||
| 	cloud.google.com/go/longrunning v0.6.2 // indirect | ||||
| 	cloud.google.com/go/monitoring v1.21.2 // indirect | ||||
| 	cloud.google.com/go/secretmanager v1.14.3 // indirect | ||||
| 	github.com/1Password/connect-sdk-go v1.5.3 // indirect | ||||
| 	github.com/1password/onepassword-sdk-go v0.1.1 // indirect | ||||
| 	github.com/1password/onepassword-sdk-go v0.2.1 // indirect | ||||
| 	github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect | ||||
| 	github.com/AlecAivazis/survey/v2 v2.3.6 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.1.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.1 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 // indirect | ||||
| 	github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect | ||||
| 	github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect | ||||
| 	github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect | ||||
| 	github.com/DopplerHQ/cli v0.5.11-0.20230908185655-7aef4713e1a4 // indirect | ||||
| 	github.com/Microsoft/hcsshim v0.11.4 // indirect | ||||
| 	github.com/ProtonMail/go-crypto v1.1.0-alpha.3-proton // indirect | ||||
| 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect | ||||
| 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect | ||||
| 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect | ||||
| 	github.com/MakeNowJust/heredoc v1.0.0 // indirect | ||||
| 	github.com/Masterminds/squirrel v1.5.4 // indirect | ||||
| 	github.com/ProtonMail/go-crypto v1.1.3 // indirect | ||||
| 	github.com/agext/levenshtein v1.2.3 // indirect | ||||
| 	github.com/alessio/shellescape v1.4.1 // indirect | ||||
| 	github.com/antchfx/jsonquery v1.3.5 // indirect | ||||
| 	github.com/antchfx/xpath v1.3.1 // indirect | ||||
| 	github.com/antchfx/jsonquery v1.3.6 // indirect | ||||
| 	github.com/antchfx/xpath v1.3.3 // indirect | ||||
| 	github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect | ||||
| 	github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect | ||||
| 	github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect | ||||
| 	github.com/atotto/clipboard v0.1.4 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2 v1.30.0 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/config v1.27.21 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.17.21 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.8 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.12 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.12 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.12 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.14 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.14 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.12 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/kms v1.34.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/s3 v1.56.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sso v1.21.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.25.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sts v1.29.1 // indirect | ||||
| 	github.com/aws/smithy-go v1.20.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2 v1.32.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/config v1.28.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.17.47 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.42 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/kms v1.37.7 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/s3 v1.70.0 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 // indirect | ||||
| 	github.com/aws/smithy-go v1.22.1 // indirect | ||||
| 	github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect | ||||
| 	github.com/beorn7/perks v1.0.1 // indirect | ||||
| 	github.com/blang/semver/v4 v4.0.0 // indirect | ||||
| 	github.com/cenkalti/backoff/v3 v3.2.2 // indirect | ||||
| 	github.com/cenkalti/backoff/v4 v4.3.0 // indirect | ||||
| 	github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect | ||||
| 	github.com/cespare/xxhash/v2 v2.3.0 // indirect | ||||
| 	github.com/cloudflare/circl v1.3.9 // indirect | ||||
| 	github.com/containerd/containerd v1.7.12 // indirect | ||||
| 	github.com/chai2010/gettext-go v1.0.2 // indirect | ||||
| 	github.com/cloudflare/circl v1.4.0 // indirect | ||||
| 	github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect | ||||
| 	github.com/containerd/containerd v1.7.27 // indirect | ||||
| 	github.com/containerd/errdefs v0.3.0 // indirect | ||||
| 	github.com/containerd/log v0.1.0 // indirect | ||||
| 	github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect | ||||
| 	github.com/cyberark/conjur-api-go v0.12.4 // indirect | ||||
| 	github.com/danieljoos/wincred v1.1.2 // indirect | ||||
| 	github.com/distribution/reference v0.5.0 // indirect | ||||
| 	github.com/docker/cli v27.0.1+incompatible // indirect | ||||
| 	github.com/containerd/platforms v0.2.1 // indirect | ||||
| 	github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect | ||||
| 	github.com/cyberark/conjur-api-go v0.12.14 // indirect | ||||
| 	github.com/danieljoos/wincred v1.2.2 // indirect | ||||
| 	github.com/distribution/reference v0.6.0 // indirect | ||||
| 	github.com/docker/cli v27.3.1+incompatible // indirect | ||||
| 	github.com/docker/distribution v2.8.3+incompatible // indirect | ||||
| 	github.com/docker/docker v27.1.1+incompatible // indirect | ||||
| 	github.com/docker/docker v27.3.1+incompatible // indirect | ||||
| 	github.com/docker/docker-credential-helpers v0.7.0 // indirect | ||||
| 	github.com/docker/go-connections v0.5.0 // indirect | ||||
| 	github.com/docker/go-metrics v0.0.1 // indirect | ||||
| 	github.com/dustin/go-humanize v1.0.1 // indirect | ||||
| 	github.com/dylibso/observe-sdk/go v0.0.0-20240819160327-2d926c5d788a // indirect | ||||
| 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect | ||||
| 	github.com/envoyproxy/go-control-plane v0.13.1 // indirect | ||||
| 	github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect | ||||
| 	github.com/evanphx/json-patch v5.9.0+incompatible // indirect | ||||
| 	github.com/extism/go-sdk v1.3.1 // indirect | ||||
| 	github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect | ||||
| 	github.com/extism/go-sdk v1.7.0 // indirect | ||||
| 	github.com/felixge/httpsnoop v1.0.4 // indirect | ||||
| 	github.com/fxamacker/cbor/v2 v2.7.0 // indirect | ||||
| 	github.com/getsops/gopgagent v0.0.0-20240527072608-0c14999532fe // indirect | ||||
| 	github.com/getsops/sops/v3 v3.9.0 // indirect | ||||
| 	github.com/getsops/sops/v3 v3.9.2 // indirect | ||||
| 	github.com/go-errors/errors v1.4.2 // indirect | ||||
| 	github.com/go-jose/go-jose/v4 v4.0.2 // indirect | ||||
| 	github.com/go-gorp/gorp/v3 v3.1.0 // indirect | ||||
| 	github.com/go-jose/go-jose/v4 v4.0.5 // indirect | ||||
| 	github.com/go-logr/logr v1.4.2 // indirect | ||||
| 	github.com/go-logr/stdr v1.2.2 // indirect | ||||
| 	github.com/go-openapi/analysis v0.23.0 // indirect | ||||
|  | @ -202,96 +215,112 @@ require ( | |||
| 	github.com/go-openapi/runtime v0.28.0 // indirect | ||||
| 	github.com/go-openapi/spec v0.21.0 // indirect | ||||
| 	github.com/go-openapi/strfmt v0.23.0 // indirect | ||||
| 	github.com/go-openapi/swag v0.23.0 // indirect | ||||
| 	github.com/go-openapi/swag v0.23.1 // indirect | ||||
| 	github.com/go-openapi/validate v0.24.0 // indirect | ||||
| 	github.com/gobwas/glob v0.2.3 // indirect | ||||
| 	github.com/godbus/dbus/v5 v5.1.0 // indirect | ||||
| 	github.com/gogo/protobuf v1.3.2 // indirect | ||||
| 	github.com/golang-jwt/jwt/v5 v5.2.1 // indirect | ||||
| 	github.com/golang-jwt/jwt/v5 v5.2.2 // indirect | ||||
| 	github.com/google/btree v1.0.1 // indirect | ||||
| 	github.com/google/gnostic-models v0.6.8 // indirect | ||||
| 	github.com/google/gnostic-models v0.6.9 // indirect | ||||
| 	github.com/google/go-jsonnet v0.20.0 // indirect | ||||
| 	github.com/google/gofuzz v1.2.0 // indirect | ||||
| 	github.com/google/s2a-go v0.1.8 // indirect | ||||
| 	github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect | ||||
| 	github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect | ||||
| 	github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect | ||||
| 	github.com/gorilla/mux v1.8.0 // indirect | ||||
| 	github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect | ||||
| 	github.com/gorilla/websocket v1.5.0 // indirect | ||||
| 	github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect | ||||
| 	github.com/hashicorp/go-retryablehttp v0.7.7 // indirect | ||||
| 	github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 // indirect | ||||
| 	github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect | ||||
| 	github.com/hashicorp/go-version v1.6.0 // indirect | ||||
| 	github.com/hashicorp/hcp-sdk-go v0.111.0 // indirect | ||||
| 	github.com/hashicorp/hcp-sdk-go v0.139.0 // indirect | ||||
| 	github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f // indirect | ||||
| 	github.com/imdario/mergo v0.3.16 // indirect | ||||
| 	github.com/ianlancetaylor/demangle v0.0.0-20240805132620-81f5be970eca // indirect | ||||
| 	github.com/itchyny/timefmt-go v0.1.6 // indirect | ||||
| 	github.com/jmoiron/sqlx v1.4.0 // indirect | ||||
| 	github.com/josharian/intern v1.0.0 // indirect | ||||
| 	github.com/json-iterator/go v1.1.12 // indirect | ||||
| 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect | ||||
| 	github.com/kylelemons/godebug v1.1.0 // indirect | ||||
| 	github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect | ||||
| 	github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect | ||||
| 	github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect | ||||
| 	github.com/lucasb-eyer/go-colorful v1.2.0 // indirect | ||||
| 	github.com/mailru/easyjson v0.7.7 // indirect | ||||
| 	github.com/mailru/easyjson v0.9.0 // indirect | ||||
| 	github.com/mattn/go-isatty v0.0.20 // indirect | ||||
| 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect | ||||
| 	github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect | ||||
| 	github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect | ||||
| 	github.com/moby/locker v1.0.1 // indirect | ||||
| 	github.com/moby/spdystream v0.5.0 // indirect | ||||
| 	github.com/moby/term v0.5.0 // indirect | ||||
| 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||
| 	github.com/modern-go/reflect2 v1.0.2 // indirect | ||||
| 	github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect | ||||
| 	github.com/muesli/termenv v0.15.1 // indirect | ||||
| 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect | ||||
| 	github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect | ||||
| 	github.com/oklog/ulid v1.3.1 // indirect | ||||
| 	github.com/opencontainers/go-digest v1.0.0 // indirect | ||||
| 	github.com/opencontainers/image-spec v1.1.0 // indirect | ||||
| 	github.com/opentracing/opentracing-go v1.2.0 // indirect | ||||
| 	github.com/otiai10/mint v1.6.3 // indirect | ||||
| 	github.com/peterbourgon/diskv v2.0.1+incompatible // indirect | ||||
| 	github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect | ||||
| 	github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect | ||||
| 	github.com/prometheus/client_golang v1.19.1 // indirect | ||||
| 	github.com/prometheus/client_model v0.6.1 // indirect | ||||
| 	github.com/prometheus/common v0.55.0 // indirect | ||||
| 	github.com/prometheus/procfs v0.15.1 // indirect | ||||
| 	github.com/rivo/uniseg v0.4.7 // indirect | ||||
| 	github.com/rubenv/sql-migrate v1.7.1 // indirect | ||||
| 	github.com/russross/blackfriday/v2 v2.1.0 // indirect | ||||
| 	github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect | ||||
| 	github.com/tetratelabs/wazero v1.7.3 // indirect | ||||
| 	github.com/tidwall/gjson v1.17.3 // indirect | ||||
| 	github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 // indirect | ||||
| 	github.com/tetratelabs/wazero v1.8.2 // indirect | ||||
| 	github.com/tidwall/gjson v1.18.0 // indirect | ||||
| 	github.com/tidwall/match v1.1.1 // indirect | ||||
| 	github.com/tidwall/pretty v1.2.0 // indirect | ||||
| 	github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect | ||||
| 	github.com/uber/jaeger-lib v2.4.1+incompatible // indirect | ||||
| 	github.com/urfave/cli v1.22.15 // indirect | ||||
| 	github.com/urfave/cli v1.22.16 // indirect | ||||
| 	github.com/x448/float16 v0.8.4 // indirect | ||||
| 	github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect | ||||
| 	github.com/xlab/treeprint v1.2.0 // indirect | ||||
| 	github.com/zalando/go-keyring v0.2.3-0.20230503081219-17db2e5354bd // indirect | ||||
| 	github.com/zalando/go-keyring v0.2.6 // indirect | ||||
| 	go.mongodb.org/mongo-driver v1.14.0 // indirect | ||||
| 	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect | ||||
| 	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect | ||||
| 	go.opentelemetry.io/otel v1.29.0 // indirect | ||||
| 	go.opentelemetry.io/otel/metric v1.29.0 // indirect | ||||
| 	go.opentelemetry.io/otel/trace v1.29.0 // indirect | ||||
| 	go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect | ||||
| 	go.opentelemetry.io/contrib/detectors/gcp v1.29.0 // indirect | ||||
| 	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect | ||||
| 	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect | ||||
| 	go.opentelemetry.io/otel v1.30.0 // indirect | ||||
| 	go.opentelemetry.io/otel/metric v1.30.0 // indirect | ||||
| 	go.opentelemetry.io/otel/sdk v1.29.0 // indirect | ||||
| 	go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect | ||||
| 	go.opentelemetry.io/otel/trace v1.30.0 // indirect | ||||
| 	go.opentelemetry.io/proto/otlp v1.3.1 // indirect | ||||
| 	go.uber.org/multierr v1.11.0 // indirect | ||||
| 	golang.org/x/crypto v0.26.0 // indirect | ||||
| 	golang.org/x/mod v0.18.0 // indirect | ||||
| 	golang.org/x/tools v0.22.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect | ||||
| 	golang.org/x/crypto v0.36.0 // indirect | ||||
| 	golang.org/x/mod v0.21.0 // indirect | ||||
| 	golang.org/x/tools v0.26.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 // indirect | ||||
| 	google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect | ||||
| 	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect | ||||
| 	gopkg.in/gookit/color.v1 v1.1.6 // indirect | ||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||
| 	k8s.io/api v0.31.0 // indirect | ||||
| 	k8s.io/cli-runtime v0.31.0 // indirect | ||||
| 	k8s.io/client-go v0.31.0 // indirect | ||||
| 	k8s.io/api v0.32.3 // indirect | ||||
| 	k8s.io/apiextensions-apiserver v0.32.2 // indirect | ||||
| 	k8s.io/cli-runtime v0.32.2 // indirect | ||||
| 	k8s.io/client-go v0.32.3 // indirect | ||||
| 	k8s.io/component-base v0.32.2 // indirect | ||||
| 	k8s.io/klog/v2 v2.130.1 // indirect | ||||
| 	k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect | ||||
| 	k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect | ||||
| 	k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect | ||||
| 	k8s.io/kubectl v0.32.2 // indirect | ||||
| 	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect | ||||
| 	oras.land/oras-go v1.2.5 // indirect | ||||
| 	sigs.k8s.io/kustomize/api v0.17.3 // indirect | ||||
| 	sigs.k8s.io/kustomize/kyaml v0.17.2 // indirect | ||||
| 	sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect | ||||
| 	sigs.k8s.io/kustomize/api v0.18.0 // indirect | ||||
| 	sigs.k8s.io/kustomize/kyaml v0.18.1 // indirect | ||||
| 	sigs.k8s.io/randfill v1.0.0 // indirect | ||||
| 	sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect | ||||
| ) | ||||
|  |  | |||
							
								
								
									
										186
									
								
								pkg/app/app.go
								
								
								
								
							
							
						
						
									
										186
									
								
								pkg/app/app.go
								
								
								
								
							|  | @ -20,7 +20,6 @@ import ( | |||
| 	"github.com/helmfile/helmfile/pkg/helmexec" | ||||
| 	"github.com/helmfile/helmfile/pkg/plugins" | ||||
| 	"github.com/helmfile/helmfile/pkg/remote" | ||||
| 	"github.com/helmfile/helmfile/pkg/runtime" | ||||
| 	"github.com/helmfile/helmfile/pkg/state" | ||||
| ) | ||||
| 
 | ||||
|  | @ -139,26 +138,6 @@ func (a *App) Repos(c ReposConfigProvider) error { | |||
| 	}, c.IncludeTransitiveNeeds(), SetFilter(true)) | ||||
| } | ||||
| 
 | ||||
| // TODO: Remove this function once Helmfile v0.x
 | ||||
| func (a *App) DeprecatedSyncCharts(c DeprecatedChartsConfigProvider) error { | ||||
| 	return a.ForEachState(func(run *Run) (_ bool, errs []error) { | ||||
| 		err := run.withPreparedCharts("charts", state.ChartPrepareOptions{ | ||||
| 			SkipRepos:   true, | ||||
| 			SkipDeps:    true, | ||||
| 			Concurrency: 2, | ||||
| 		}, func() []error { | ||||
| 			errs = run.DeprecatedSyncCharts(c) | ||||
| 			return errs | ||||
| 		}) | ||||
| 
 | ||||
| 		if err != nil { | ||||
| 			errs = append(errs, err) | ||||
| 		} | ||||
| 
 | ||||
| 		return | ||||
| 	}, c.IncludeTransitiveNeeds(), SetFilter(true)) | ||||
| } | ||||
| 
 | ||||
| func (a *App) Diff(c DiffConfigProvider) error { | ||||
| 	var allDiffDetectedErrs []error | ||||
| 
 | ||||
|  | @ -176,7 +155,8 @@ func (a *App) Diff(c DiffConfigProvider) error { | |||
| 		includeCRDs := !c.SkipCRDs() | ||||
| 
 | ||||
| 		prepErr := run.withPreparedCharts("diff", state.ChartPrepareOptions{ | ||||
| 			SkipRepos:              c.SkipDeps(), | ||||
| 			SkipRepos:              c.SkipRefresh() || c.SkipDeps(), | ||||
| 			SkipRefresh:            c.SkipRefresh(), | ||||
| 			SkipDeps:               c.SkipDeps(), | ||||
| 			IncludeCRDs:            &includeCRDs, | ||||
| 			Validate:               c.Validate(), | ||||
|  | @ -241,8 +221,13 @@ 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) | ||||
| 
 | ||||
| 		// Reset helm extra args to not pollute BuildDeps() and AddRepo() on subsequent helmfiles
 | ||||
| 		// https://github.com/helmfile/helmfile/issues/1749
 | ||||
| 		run.helm.SetExtraArgs() | ||||
| 
 | ||||
| 		prepErr := run.withPreparedCharts("template", state.ChartPrepareOptions{ | ||||
| 			SkipRepos:              c.SkipDeps(), | ||||
| 			SkipRepos:              c.SkipRefresh() || c.SkipDeps(), | ||||
| 			SkipRefresh:            c.SkipRefresh(), | ||||
| 			SkipDeps:               c.SkipDeps(), | ||||
| 			IncludeCRDs:            &includeCRDs, | ||||
| 			SkipCleanup:            c.SkipCleanup(), | ||||
|  | @ -250,6 +235,7 @@ func (a *App) Template(c TemplateConfigProvider) error { | |||
| 			Concurrency:            c.Concurrency(), | ||||
| 			IncludeTransitiveNeeds: c.IncludeNeeds(), | ||||
| 			Set:                    c.Set(), | ||||
| 			Values:                 c.Values(), | ||||
| 			KubeVersion:            c.KubeVersion(), | ||||
| 		}, func() []error { | ||||
| 			ok, errs = a.template(run, c) | ||||
|  | @ -267,7 +253,8 @@ func (a *App) Template(c TemplateConfigProvider) error { | |||
| func (a *App) WriteValues(c WriteValuesConfigProvider) error { | ||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||
| 		prepErr := run.withPreparedCharts("write-values", state.ChartPrepareOptions{ | ||||
| 			SkipRepos:   c.SkipDeps(), | ||||
| 			SkipRepos:   c.SkipRefresh() || c.SkipDeps(), | ||||
| 			SkipRefresh: c.SkipRefresh(), | ||||
| 			SkipDeps:    c.SkipDeps(), | ||||
| 			SkipCleanup: c.SkipCleanup(), | ||||
| 			Concurrency: c.Concurrency(), | ||||
|  | @ -319,7 +306,8 @@ func (a *App) Lint(c LintConfigProvider) error { | |||
| 		// `helm lint` on helm v2 and v3 does not support remote charts, that we need to set `forceDownload=true` here
 | ||||
| 		prepErr := run.withPreparedCharts("lint", state.ChartPrepareOptions{ | ||||
| 			ForceDownload:          true, | ||||
| 			SkipRepos:              c.SkipDeps(), | ||||
| 			SkipRepos:              c.SkipRefresh() || c.SkipDeps(), | ||||
| 			SkipRefresh:            c.SkipRefresh(), | ||||
| 			SkipDeps:               c.SkipDeps(), | ||||
| 			SkipCleanup:            c.SkipCleanup(), | ||||
| 			Concurrency:            c.Concurrency(), | ||||
|  | @ -355,7 +343,8 @@ func (a *App) Fetch(c FetchConfigProvider) error { | |||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||
| 		prepErr := run.withPreparedCharts("pull", state.ChartPrepareOptions{ | ||||
| 			ForceDownload:     true, | ||||
| 			SkipRepos:         c.SkipDeps(), | ||||
| 			SkipRefresh:       c.SkipRefresh(), | ||||
| 			SkipRepos:         c.SkipRefresh() || c.SkipDeps(), | ||||
| 			SkipDeps:          c.SkipDeps(), | ||||
| 			OutputDir:         c.OutputDir(), | ||||
| 			OutputDirTemplate: c.OutputDirTemplate(), | ||||
|  | @ -377,9 +366,11 @@ func (a *App) Sync(c SyncConfigProvider) error { | |||
| 		includeCRDs := !c.SkipCRDs() | ||||
| 
 | ||||
| 		prepErr := run.withPreparedCharts("sync", state.ChartPrepareOptions{ | ||||
| 			SkipRepos:              c.SkipDeps(), | ||||
| 			SkipRepos:              c.SkipRefresh() || c.SkipDeps(), | ||||
| 			SkipRefresh:            c.SkipRefresh(), | ||||
| 			SkipDeps:               c.SkipDeps(), | ||||
| 			Wait:                   c.Wait(), | ||||
| 			WaitRetries:            c.WaitRetries(), | ||||
| 			WaitForJobs:            c.WaitForJobs(), | ||||
| 			IncludeCRDs:            &includeCRDs, | ||||
| 			IncludeTransitiveNeeds: c.IncludeNeeds(), | ||||
|  | @ -405,18 +396,20 @@ func (a *App) Apply(c ApplyConfigProvider) error { | |||
| 
 | ||||
| 	var opts []LoadOption | ||||
| 
 | ||||
| 	opts = append(opts, SetRetainValuesFiles(c.RetainValuesFiles() || c.SkipCleanup())) | ||||
| 	opts = append(opts, SetRetainValuesFiles(c.SkipCleanup())) | ||||
| 
 | ||||
| 	err := a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||
| 		includeCRDs := !c.SkipCRDs() | ||||
| 
 | ||||
| 		prepErr := run.withPreparedCharts("apply", state.ChartPrepareOptions{ | ||||
| 			SkipRepos:              c.SkipDeps(), | ||||
| 			SkipRepos:              c.SkipRefresh() || c.SkipDeps(), | ||||
| 			SkipRefresh:            c.SkipRefresh(), | ||||
| 			SkipDeps:               c.SkipDeps(), | ||||
| 			Wait:                   c.Wait(), | ||||
| 			WaitRetries:            c.WaitRetries(), | ||||
| 			WaitForJobs:            c.WaitForJobs(), | ||||
| 			IncludeCRDs:            &includeCRDs, | ||||
| 			SkipCleanup:            c.RetainValuesFiles() || c.SkipCleanup(), | ||||
| 			SkipCleanup:            c.SkipCleanup(), | ||||
| 			Validate:               c.Validate(), | ||||
| 			Concurrency:            c.Concurrency(), | ||||
| 			IncludeTransitiveNeeds: c.IncludeNeeds(), | ||||
|  | @ -470,36 +463,12 @@ func (a *App) Status(c StatusesConfigProvider) error { | |||
| 	}, false, SetFilter(true)) | ||||
| } | ||||
| 
 | ||||
| // TODO: Remove this function once Helmfile v0.x
 | ||||
| func (a *App) Delete(c DeleteConfigProvider) error { | ||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||
| 		if !c.SkipCharts() { | ||||
| 			err := run.withPreparedCharts("delete", state.ChartPrepareOptions{ | ||||
| 				SkipRepos:     c.SkipDeps(), | ||||
| 				SkipDeps:      c.SkipDeps(), | ||||
| 				Concurrency:   c.Concurrency(), | ||||
| 				DeleteWait:    c.DeleteWait(), | ||||
| 				DeleteTimeout: c.DeleteTimeout(), | ||||
| 			}, func() []error { | ||||
| 				ok, errs = a.delete(run, c.Purge(), c) | ||||
| 				return errs | ||||
| 			}) | ||||
| 
 | ||||
| 			if err != nil { | ||||
| 				errs = append(errs, err) | ||||
| 			} | ||||
| 		} else { | ||||
| 			ok, errs = a.delete(run, c.Purge(), c) | ||||
| 		} | ||||
| 		return | ||||
| 	}, false, SetReverse(true)) | ||||
| } | ||||
| 
 | ||||
| func (a *App) Destroy(c DestroyConfigProvider) error { | ||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||
| 		if !c.SkipCharts() { | ||||
| 			err := run.withPreparedCharts("destroy", state.ChartPrepareOptions{ | ||||
| 				SkipRepos:     c.SkipDeps(), | ||||
| 				SkipRepos:     c.SkipRefresh() || c.SkipDeps(), | ||||
| 				SkipRefresh:   c.SkipRefresh(), | ||||
| 				SkipDeps:      c.SkipDeps(), | ||||
| 				Concurrency:   c.Concurrency(), | ||||
| 				DeleteWait:    c.DeleteWait(), | ||||
|  | @ -527,7 +496,8 @@ func (a *App) Test(c TestConfigProvider) error { | |||
| 		} | ||||
| 
 | ||||
| 		err := run.withPreparedCharts("test", state.ChartPrepareOptions{ | ||||
| 			SkipRepos:   c.SkipDeps(), | ||||
| 			SkipRepos:   c.SkipRefresh() || c.SkipDeps(), | ||||
| 			SkipRefresh: c.SkipRefresh(), | ||||
| 			SkipDeps:    c.SkipDeps(), | ||||
| 			Concurrency: c.Concurrency(), | ||||
| 		}, func() []error { | ||||
|  | @ -1021,14 +991,14 @@ func printBatches(batches [][]state.Release) string { | |||
| 
 | ||||
| 	w.Init(buf, 0, 1, 1, ' ', 0) | ||||
| 
 | ||||
| 	fmt.Fprintln(w, "GROUP\tRELEASES") | ||||
| 	_, _ = fmt.Fprintln(w, "GROUP\tRELEASES") | ||||
| 
 | ||||
| 	for i, batch := range batches { | ||||
| 		ids := []string{} | ||||
| 		for _, r := range batch { | ||||
| 			ids = append(ids, state.ReleaseToID(&r.ReleaseSpec)) | ||||
| 		} | ||||
| 		fmt.Fprintf(w, "%d\t%s\n", i+1, strings.Join(ids, ", ")) | ||||
| 		_, _ = fmt.Fprintf(w, "%d\t%s\n", i+1, strings.Join(ids, ", ")) | ||||
| 	} | ||||
| 
 | ||||
| 	_ = w.Flush() | ||||
|  | @ -1043,13 +1013,13 @@ func printDAG(batches [][]state.Release) string { | |||
| 
 | ||||
| 	w.Init(buf, 0, 1, 1, ' ', 0) | ||||
| 
 | ||||
| 	fmt.Fprintln(w, "GROUP\tRELEASE\tDEPENDENCIES") | ||||
| 	_, _ = fmt.Fprintln(w, "GROUP\tRELEASE\tDEPENDENCIES") | ||||
| 
 | ||||
| 	for i, batch := range batches { | ||||
| 		for _, r := range batch { | ||||
| 			id := state.ReleaseToID(&r.ReleaseSpec) | ||||
| 			needs := r.ReleaseSpec.Needs | ||||
| 			fmt.Fprintf(w, "%d\t%s\t%s\n", i+1, id, strings.Join(needs, ", ")) | ||||
| 			needs := r.Needs | ||||
| 			_, _ = fmt.Fprintf(w, "%d\t%s\t%s\n", i+1, id, strings.Join(needs, ", ")) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1149,13 +1119,17 @@ func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converg | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// pre-overrides HelmState
 | ||||
| 	// pre-handles HelmState
 | ||||
| 	fHelmStatsWithOverrides := func(st *state.HelmState) (bool, []error) { | ||||
| 		var err error | ||||
| 		// override release settings
 | ||||
| 		st.Releases, err = st.GetReleasesWithOverrides() | ||||
| 		if err != nil { | ||||
| 			return false, []error{err} | ||||
| 		} | ||||
| 
 | ||||
| 		// override release labels
 | ||||
| 		st.Releases = st.GetReleasesWithLabels() | ||||
| 		return f(st) | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1258,16 +1232,6 @@ func (a *App) findDesiredStateFiles(specifiedPath string, opts LoadOpts) ([]stri | |||
| 
 | ||||
| 		case a.fs.FileExistsAt(DefaultGotmplHelmfile): | ||||
| 			defaultFile = DefaultGotmplHelmfile | ||||
| 
 | ||||
| 		// TODO: Remove this block when we remove v0 code
 | ||||
| 		case !runtime.V1Mode && a.fs.FileExistsAt(DeprecatedHelmfile): | ||||
| 			a.Logger.Warnf( | ||||
| 				"warn: %s is being loaded: %s is deprecated in favor of %s. See https://github.com/roboll/helmfile/issues/25 for more information", | ||||
| 				DeprecatedHelmfile, | ||||
| 				DeprecatedHelmfile, | ||||
| 				DefaultHelmfile, | ||||
| 			) | ||||
| 			defaultFile = DeprecatedHelmfile | ||||
| 		} | ||||
| 
 | ||||
| 		switch { | ||||
|  | @ -1322,7 +1286,6 @@ func (a *App) getSelectedReleases(r *Run, includeTransitiveNeeds bool) ([]state. | |||
| 	selectedIds := map[string]state.ReleaseSpec{} | ||||
| 	selectedCounts := map[string]int{} | ||||
| 	for _, r := range selected { | ||||
| 		r := r | ||||
| 		id := state.ReleaseToID(&r) | ||||
| 		selectedIds[id] = r | ||||
| 		selectedCounts[id]++ | ||||
|  | @ -1336,7 +1299,6 @@ func (a *App) getSelectedReleases(r *Run, includeTransitiveNeeds bool) ([]state. | |||
| 
 | ||||
| 	groupsByID := map[string][]*state.ReleaseSpec{} | ||||
| 	for _, r := range allReleases { | ||||
| 		r := r | ||||
| 		groupsByID[state.ReleaseToID(&r)] = append(groupsByID[state.ReleaseToID(&r)], &r) | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1432,13 +1394,14 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) { | |||
| 		Context:                 c.Context(), | ||||
| 		Output:                  c.DiffOutput(), | ||||
| 		Set:                     c.Set(), | ||||
| 		SkipCleanup:             c.RetainValuesFiles() || c.SkipCleanup(), | ||||
| 		SkipCleanup:             c.SkipCleanup(), | ||||
| 		SkipDiffOnInstall:       c.SkipDiffOnInstall(), | ||||
| 		ReuseValues:             c.ReuseValues(), | ||||
| 		ResetValues:             c.ResetValues(), | ||||
| 		DiffArgs:                c.DiffArgs(), | ||||
| 		PostRenderer:            c.PostRenderer(), | ||||
| 		PostRendererArgs:        c.PostRendererArgs(), | ||||
| 		SkipSchemaValidation:    c.SkipSchemaValidation(), | ||||
| 		SuppressOutputLineRegex: c.SuppressOutputLineRegex(), | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1542,17 +1505,21 @@ Do you really want to apply? | |||
| 				subst.Releases = rs | ||||
| 
 | ||||
| 				syncOpts := &state.SyncOpts{ | ||||
| 					Set:              c.Set(), | ||||
| 					SkipCleanup:      c.RetainValuesFiles() || c.SkipCleanup(), | ||||
| 					SkipCRDs:         c.SkipCRDs(), | ||||
| 					Wait:             c.Wait(), | ||||
| 					WaitForJobs:      c.WaitForJobs(), | ||||
| 					ReuseValues:      c.ReuseValues(), | ||||
| 					ResetValues:      c.ResetValues(), | ||||
| 					PostRenderer:     c.PostRenderer(), | ||||
| 					PostRendererArgs: c.PostRendererArgs(), | ||||
| 					SyncArgs:         c.SyncArgs(), | ||||
| 					HideNotes:        c.HideNotes(), | ||||
| 					Set:                  c.Set(), | ||||
| 					SkipCleanup:          c.SkipCleanup(), | ||||
| 					SkipCRDs:             c.SkipCRDs(), | ||||
| 					Wait:                 c.Wait(), | ||||
| 					WaitRetries:          c.WaitRetries(), | ||||
| 					WaitForJobs:          c.WaitForJobs(), | ||||
| 					ReuseValues:          c.ReuseValues(), | ||||
| 					ResetValues:          c.ResetValues(), | ||||
| 					PostRenderer:         c.PostRenderer(), | ||||
| 					PostRendererArgs:     c.PostRendererArgs(), | ||||
| 					SkipSchemaValidation: c.SkipSchemaValidation(), | ||||
| 					SyncArgs:             c.SyncArgs(), | ||||
| 					HideNotes:            c.HideNotes(), | ||||
| 					TakeOwnership:        c.TakeOwnership(), | ||||
| 					SyncReleaseLabels:    c.SyncReleaseLabels(), | ||||
| 				} | ||||
| 				return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), syncOpts) | ||||
| 			})) | ||||
|  | @ -1678,6 +1645,7 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error) | |||
| 			ResetValues:             c.ResetValues(), | ||||
| 			PostRenderer:            c.PostRenderer(), | ||||
| 			PostRendererArgs:        c.PostRendererArgs(), | ||||
| 			SkipSchemaValidation:    c.SkipSchemaValidation(), | ||||
| 			SuppressOutputLineRegex: c.SuppressOutputLineRegex(), | ||||
| 		} | ||||
| 
 | ||||
|  | @ -1937,16 +1905,20 @@ Do you really want to sync? | |||
| 				subst.Releases = rs | ||||
| 
 | ||||
| 				opts := &state.SyncOpts{ | ||||
| 					Set:              c.Set(), | ||||
| 					SkipCRDs:         c.SkipCRDs(), | ||||
| 					Wait:             c.Wait(), | ||||
| 					WaitForJobs:      c.WaitForJobs(), | ||||
| 					ReuseValues:      c.ReuseValues(), | ||||
| 					ResetValues:      c.ResetValues(), | ||||
| 					PostRenderer:     c.PostRenderer(), | ||||
| 					PostRendererArgs: c.PostRendererArgs(), | ||||
| 					SyncArgs:         c.SyncArgs(), | ||||
| 					HideNotes:        c.HideNotes(), | ||||
| 					Set:                  c.Set(), | ||||
| 					SkipCRDs:             c.SkipCRDs(), | ||||
| 					Wait:                 c.Wait(), | ||||
| 					WaitRetries:          c.WaitRetries(), | ||||
| 					WaitForJobs:          c.WaitForJobs(), | ||||
| 					ReuseValues:          c.ReuseValues(), | ||||
| 					ResetValues:          c.ResetValues(), | ||||
| 					PostRenderer:         c.PostRenderer(), | ||||
| 					PostRendererArgs:     c.PostRendererArgs(), | ||||
| 					SyncArgs:             c.SyncArgs(), | ||||
| 					HideNotes:            c.HideNotes(), | ||||
| 					TakeOwnership:        c.TakeOwnership(), | ||||
| 					SkipSchemaValidation: c.SkipSchemaValidation(), | ||||
| 					SyncReleaseLabels:    c.SyncReleaseLabels(), | ||||
| 				} | ||||
| 				return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), opts) | ||||
| 			})) | ||||
|  | @ -1974,15 +1946,17 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) { | |||
| 		} | ||||
| 
 | ||||
| 		opts := &state.TemplateOpts{ | ||||
| 			Set:               c.Set(), | ||||
| 			IncludeCRDs:       c.IncludeCRDs(), | ||||
| 			OutputDirTemplate: c.OutputDirTemplate(), | ||||
| 			SkipCleanup:       c.SkipCleanup(), | ||||
| 			SkipTests:         c.SkipTests(), | ||||
| 			PostRenderer:      c.PostRenderer(), | ||||
| 			PostRendererArgs:  c.PostRendererArgs(), | ||||
| 			KubeVersion:       c.KubeVersion(), | ||||
| 			ShowOnly:          c.ShowOnly(), | ||||
| 			Set:                  c.Set(), | ||||
| 			IncludeCRDs:          c.IncludeCRDs(), | ||||
| 			NoHooks:              c.NoHooks(), | ||||
| 			OutputDirTemplate:    c.OutputDirTemplate(), | ||||
| 			SkipCleanup:          c.SkipCleanup(), | ||||
| 			SkipTests:            c.SkipTests(), | ||||
| 			PostRenderer:         c.PostRenderer(), | ||||
| 			PostRendererArgs:     c.PostRendererArgs(), | ||||
| 			KubeVersion:          c.KubeVersion(), | ||||
| 			ShowOnly:             c.ShowOnly(), | ||||
| 			SkipSchemaValidation: c.SkipSchemaValidation(), | ||||
| 		} | ||||
| 		return st.TemplateReleases(helm, c.OutputDir(), c.Values(), args, c.Concurrency(), c.Validate(), opts) | ||||
| 	}) | ||||
|  |  | |||
|  | @ -161,7 +161,7 @@ releases: | |||
| 				{Name: "foo"}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			error: "", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -192,7 +192,7 @@ releases: | |||
| 				{Name: "foo"}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			error: "", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -223,7 +223,7 @@ releases: | |||
| 				{Name: "foo"}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			error: "", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -252,7 +252,7 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"app=test"}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: nil, | ||||
| 			}, | ||||
| 			error: "", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -299,8 +299,8 @@ releases: | |||
| 				{Name: "bar"}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			error: "", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -346,7 +346,7 @@ releases: | |||
| 				{Name: "foo"}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			error: "", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -396,7 +396,7 @@ bar 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	default | |||
| 				{Name: "foo"}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			error: "", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -444,7 +444,7 @@ foo 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	default | |||
| 				{Name: "foo"}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			error: "", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  |  | |||
|  | @ -146,7 +146,7 @@ func TestApply_3(t *testing.T) { | |||
| 				skipNeeds: true, | ||||
| 			}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -177,8 +177,8 @@ releases: | |||
| 				{Name: "my-release", Flags: []string{"--namespace", "default"}}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -199,7 +199,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 				skipNeeds: true, | ||||
| 			}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -234,8 +234,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:       nil, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:       nil, | ||||
| 			}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
|  | @ -250,7 +250,7 @@ releases: | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -278,9 +278,9 @@ releases: | |||
| 			selectors: []string{"app=test"}, | ||||
| 			upgraded:  []exectest.Release{}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--namespace kube-system --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--namespace kube-system --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:                      helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -306,7 +306,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -334,9 +334,9 @@ releases: | |||
| 			selectors: []string{"app=test"}, | ||||
| 			upgraded:  []exectest.Release{}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--namespace kube-system --detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--namespace kube-system --reset-values --detailed-exitcode"}: nil, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:                      helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -359,7 +359,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -399,8 +399,8 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
|  | @ -415,7 +415,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -453,8 +453,8 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
|  | @ -464,7 +464,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 	t.Run("bad --selector", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -494,72 +494,6 @@ releases: | |||
| 			error:     "err: no releases found that matches specified selector(app=test_non_existent) and environment(default), in any helmfile", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
| 			log: `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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| 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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 0 release(s) matching app=test_non_existent found in helmfile.yaml | ||||
| 
 | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 		}) | ||||
| 	}) | ||||
| } | ||||
|  |  | |||
|  | @ -146,7 +146,7 @@ func TestApply_2(t *testing.T) { | |||
| 				skipNeeds: true, | ||||
| 			}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -177,8 +177,8 @@ releases: | |||
| 				{Name: "my-release", Flags: []string{"--kube-context", "default", "--namespace", "default"}}, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -199,7 +199,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 				skipNeeds: true, | ||||
| 			}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -234,8 +234,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:       nil, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:       nil, | ||||
| 			}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
|  | @ -250,7 +250,7 @@ releases: | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -278,9 +278,9 @@ releases: | |||
| 			selectors: []string{"app=test"}, | ||||
| 			upgraded:  []exectest.Release{}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace kube-system --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace kube-system --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:                      helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -306,7 +306,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -334,9 +334,9 @@ releases: | |||
| 			selectors: []string{"app=test"}, | ||||
| 			upgraded:  []exectest.Release{}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace kube-system --detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace kube-system --reset-values --detailed-exitcode"}: nil, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:                      helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -359,7 +359,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -399,8 +399,8 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
|  | @ -415,7 +415,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -453,8 +453,8 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
|  | @ -470,7 +470,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -494,9 +494,9 @@ releases: | |||
| 			selectors: []string{"name=serviceA"}, | ||||
| 			upgraded:  []exectest.Release{}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "serviceA", Chart: "my/chart", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "serviceB", Chart: "my/chart", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "serviceC", Chart: "my/chart", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "serviceA", Chart: "my/chart", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "serviceB", Chart: "my/chart", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "serviceC", Chart: "my/chart", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^serviceA$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -517,7 +517,7 @@ serviceC 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	chart-3.1.0	3.1.0      	def | |||
| 	t.Run("bad --selector", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -547,72 +547,6 @@ releases: | |||
| 			error:     "err: no releases found that matches specified selector(app=test_non_existent) and environment(default), in any helmfile", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
| 			log: `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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| 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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 0 release(s) matching app=test_non_existent found in helmfile.yaml | ||||
| 
 | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 		}) | ||||
| 	}) | ||||
| 
 | ||||
|  | @ -641,7 +575,7 @@ releases: | |||
| 			selectors: []string{"index=1"}, | ||||
| 			upgraded:  []exectest.Release{}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("default", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -707,7 +641,7 @@ releases: | |||
| 			selectors: []string{"name=foo"}, | ||||
| 			upgraded:  []exectest.Release{}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("default", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  |  | |||
|  | @ -280,8 +280,8 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"app=test"}, | ||||
| 			diffed: []exectest.Release{ | ||||
| 				{Name: "external-secrets", Flags: []string{"--kube-context", "default", "--namespace", "default", "--no-hooks", "--reset-values"}}, | ||||
| 				{Name: "my-release", Flags: []string{"--kube-context", "default", "--namespace", "default", "--no-hooks", "--reset-values"}}, | ||||
| 				{Name: "external-secrets", Flags: []string{"--kube-context", "default", "--namespace", "default", "--reset-values", "--no-hooks"}}, | ||||
| 				{Name: "my-release", Flags: []string{"--kube-context", "default", "--namespace", "default", "--reset-values", "--no-hooks"}}, | ||||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
|  |  | |||
|  | @ -159,17 +159,17 @@ releases: | |||
| 	t.Run("default environment includes all releases", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			environment: "default", | ||||
| 			expected: `NAME                       	NAMESPACE  	ENABLED	INSTALLED	LABELS  	CHART           	VERSION | ||||
| logging                    	kube-system	true   	true     	        	incubator/raw   	        | ||||
| kubernetes-external-secrets	kube-system	true   	true     	        	incubator/raw   	        | ||||
| external-secrets           	default    	true   	true     	app:test	incubator/raw   	        | ||||
| my-release                 	default    	true   	true     	app:test	incubator/raw   	        | ||||
| disabled                   	kube-system	true   	false    	        	incubator/raw   	        | ||||
| test2                      	           	true   	true     	        	incubator/raw   	        | ||||
| test3                      	           	true   	true     	        	incubator/raw   	        | ||||
| cache                      	my-app     	true   	true     	app:test	bitnami/redis   	17.0.7  | ||||
| database                   	my-app     	true   	true     	        	bitnami/postgres	11.6.22 | ||||
| global                     	kube-system	true   	true     	        	incubator/raw   	        | ||||
| 			expected: `NAME                       	NAMESPACE  	ENABLED	INSTALLED	LABELS                                                          	CHART           	VERSION | ||||
| logging                    	kube-system	true   	true     	chart:raw,name:logging,namespace:kube-system                    	incubator/raw   	        | ||||
| kubernetes-external-secrets	kube-system	true   	true     	chart:raw,name:kubernetes-external-secrets,namespace:kube-system	incubator/raw   	        | ||||
| external-secrets           	default    	true   	true     	app:test,chart:raw,name:external-secrets,namespace:default      	incubator/raw   	        | ||||
| my-release                 	default    	true   	true     	app:test,chart:raw,name:my-release,namespace:default            	incubator/raw   	        | ||||
| disabled                   	kube-system	true   	false    	chart:raw,name:disabled,namespace:kube-system                   	incubator/raw   	        | ||||
| test2                      	           	true   	true     	chart:raw,name:test2,namespace:                                 	incubator/raw   	        | ||||
| test3                      	           	true   	true     	chart:raw,name:test3,namespace:                                 	incubator/raw   	        | ||||
| cache                      	my-app     	true   	true     	app:test,chart:redis,name:cache,namespace:my-app                	bitnami/redis   	17.0.7  | ||||
| database                   	my-app     	true   	true     	chart:postgres,name:database,namespace:my-app                   	bitnami/postgres	11.6.22 | ||||
| global                     	kube-system	true   	true     	chart:raw,name:global,namespace:kube-system                     	incubator/raw   	        | ||||
| `, | ||||
| 		}, cfg) | ||||
| 	}) | ||||
|  | @ -195,9 +195,9 @@ my-release      	default  	true   	true     	app:test,chart:raw,name:my-release, | |||
| 	t.Run("filters releases for environment used in one file only", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			environment: "test", | ||||
| 			expected: `NAME    	NAMESPACE	ENABLED	INSTALLED	LABELS  	CHART           	VERSION | ||||
| cache   	my-app   	true   	true     	app:test	bitnami/redis   	17.0.7  | ||||
| database	my-app   	true   	true     	        	bitnami/postgres	11.6.22 | ||||
| 			expected: `NAME    	NAMESPACE	ENABLED	INSTALLED	LABELS                                          	CHART           	VERSION | ||||
| cache   	my-app   	true   	true     	app:test,chart:redis,name:cache,namespace:my-app	bitnami/redis   	17.0.7  | ||||
| database	my-app   	true   	true     	chart:postgres,name:database,namespace:my-app   	bitnami/postgres	11.6.22 | ||||
| `, | ||||
| 		}, cfg) | ||||
| 	}) | ||||
|  | @ -206,16 +206,16 @@ database	my-app   	true   	true     	        	bitnami/postgres	11.6.22 | |||
| 		check(t, testcase{ | ||||
| 			environment: "shared", | ||||
| 			// 'global' release has no environments, so is still excluded
 | ||||
| 			expected: `NAME                       	NAMESPACE  	ENABLED	INSTALLED	LABELS  	CHART           	VERSION | ||||
| logging                    	kube-system	true   	true     	        	incubator/raw   	        | ||||
| kubernetes-external-secrets	kube-system	true   	true     	        	incubator/raw   	        | ||||
| external-secrets           	default    	true   	true     	app:test	incubator/raw   	        | ||||
| my-release                 	default    	true   	true     	app:test	incubator/raw   	        | ||||
| disabled                   	kube-system	true   	false    	        	incubator/raw   	        | ||||
| test2                      	           	true   	true     	        	incubator/raw   	        | ||||
| test3                      	           	true   	true     	        	incubator/raw   	        | ||||
| cache                      	my-app     	true   	true     	app:test	bitnami/redis   	17.0.7  | ||||
| database                   	my-app     	true   	true     	        	bitnami/postgres	11.6.22 | ||||
| 			expected: `NAME                       	NAMESPACE  	ENABLED	INSTALLED	LABELS                                                          	CHART           	VERSION | ||||
| logging                    	kube-system	true   	true     	chart:raw,name:logging,namespace:kube-system                    	incubator/raw   	        | ||||
| kubernetes-external-secrets	kube-system	true   	true     	chart:raw,name:kubernetes-external-secrets,namespace:kube-system	incubator/raw   	        | ||||
| external-secrets           	default    	true   	true     	app:test,chart:raw,name:external-secrets,namespace:default      	incubator/raw   	        | ||||
| my-release                 	default    	true   	true     	app:test,chart:raw,name:my-release,namespace:default            	incubator/raw   	        | ||||
| disabled                   	kube-system	true   	false    	chart:raw,name:disabled,namespace:kube-system                   	incubator/raw   	        | ||||
| test2                      	           	true   	true     	chart:raw,name:test2,namespace:                                 	incubator/raw   	        | ||||
| test3                      	           	true   	true     	chart:raw,name:test3,namespace:                                 	incubator/raw   	        | ||||
| cache                      	my-app     	true   	true     	app:test,chart:redis,name:cache,namespace:my-app                	bitnami/redis   	17.0.7  | ||||
| database                   	my-app     	true   	true     	chart:postgres,name:database,namespace:my-app                   	bitnami/postgres	11.6.22 | ||||
| `, | ||||
| 		}, cfg) | ||||
| 	}) | ||||
|  | @ -240,6 +240,7 @@ environments: | |||
|     values: | ||||
|      - myrelease2: | ||||
|          enabled: false | ||||
| --- | ||||
| releases: | ||||
| - name: myrelease1 | ||||
|   chart: mychart1 | ||||
|  | @ -284,7 +285,7 @@ releases: | |||
| 	}) | ||||
| 	assert.NoError(t, err) | ||||
| 
 | ||||
| 	expected := `[{"name":"myrelease1","namespace":"testNamespace","enabled":true,"installed":false,"labels":"id:myrelease1","chart":"mychart1","version":""},{"name":"myrelease2","namespace":"testNamespace","enabled":false,"installed":true,"labels":"","chart":"mychart1","version":""},{"name":"myrelease3","namespace":"testNamespace","enabled":true,"installed":true,"labels":"","chart":"mychart1","version":""},{"name":"myrelease4","namespace":"testNamespace","enabled":true,"installed":true,"labels":"id:myrelease1","chart":"mychart1","version":""}] | ||||
| 	expected := `[{"name":"myrelease1","namespace":"testNamespace","enabled":true,"installed":false,"labels":"chart:mychart1,id:myrelease1,name:myrelease1,namespace:testNamespace","chart":"mychart1","version":""},{"name":"myrelease2","namespace":"testNamespace","enabled":false,"installed":true,"labels":"chart:mychart1,name:myrelease2,namespace:testNamespace","chart":"mychart1","version":""},{"name":"myrelease3","namespace":"testNamespace","enabled":true,"installed":true,"labels":"chart:mychart1,name:myrelease3,namespace:testNamespace","chart":"mychart1","version":""},{"name":"myrelease4","namespace":"testNamespace","enabled":true,"installed":true,"labels":"chart:mychart1,id:myrelease1,name:myrelease4,namespace:testNamespace","chart":"mychart1","version":""}] | ||||
| ` | ||||
| 	assert.Equal(t, expected, out) | ||||
| } | ||||
|  |  | |||
|  | @ -142,7 +142,7 @@ func TestSync(t *testing.T) { | |||
| 				skipNeeds: true, | ||||
| 			}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -191,7 +191,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 				skipNeeds: true, | ||||
| 			}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -249,7 +249,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -300,7 +300,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -348,7 +348,7 @@ serviceA 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	chart-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -401,7 +401,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 			}, | ||||
| 			error: ``, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -447,7 +447,7 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 	t.Run("bad --selector", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ func TestTemplate(t *testing.T) { | |||
| 		skipNeeds              bool | ||||
| 		includeNeeds           bool | ||||
| 		includeTransitiveNeeds bool | ||||
| 		noHooks                bool | ||||
| 		showOnly               []string | ||||
| 	} | ||||
| 
 | ||||
|  | @ -133,6 +134,7 @@ releases: | |||
| 				includeNeeds:           tc.fields.includeNeeds, | ||||
| 				includeTransitiveNeeds: tc.fields.includeTransitiveNeeds, | ||||
| 				showOnly:               tc.fields.showOnly, | ||||
| 				noHooks:                tc.fields.noHooks, | ||||
| 			}) | ||||
| 
 | ||||
| 			var gotErr string | ||||
|  | @ -236,7 +238,7 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"name=test2"}, | ||||
| 			templated: []exectest.Release{ | ||||
| 				{Name: "test2", Flags: []string{}}, | ||||
| 				{Name: "test2"}, | ||||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
|  | @ -249,8 +251,8 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"name=test3"}, | ||||
| 			templated: []exectest.Release{ | ||||
| 				{Name: "test2", Flags: []string{}}, | ||||
| 				{Name: "test3", Flags: []string{}}, | ||||
| 				{Name: "test2"}, | ||||
| 				{Name: "test3"}, | ||||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
|  | @ -264,8 +266,8 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"name=test3"}, | ||||
| 			templated: []exectest.Release{ | ||||
| 				{Name: "test2", Flags: []string{}}, | ||||
| 				{Name: "test3", Flags: []string{}}, | ||||
| 				{Name: "test2"}, | ||||
| 				{Name: "test3"}, | ||||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
|  | @ -279,7 +281,7 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"name=test2"}, | ||||
| 			templated: []exectest.Release{ | ||||
| 				{Name: "test2", Flags: []string{}}, | ||||
| 				{Name: "test2"}, | ||||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
|  | @ -293,8 +295,22 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"name=test3"}, | ||||
| 			templated: []exectest.Release{ | ||||
| 				{Name: "test2", Flags: []string{}}, | ||||
| 				{Name: "test3", Flags: []string{}}, | ||||
| 				{Name: "test2"}, | ||||
| 				{Name: "test3"}, | ||||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
| 
 | ||||
| 	t.Run("no-hooks", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			fields: fields{ | ||||
| 				skipNeeds: true, | ||||
| 				noHooks:   true, | ||||
| 			}, | ||||
| 			selectors: []string{"app=test"}, | ||||
| 			templated: []exectest.Release{ | ||||
| 				{Name: "external-secrets", Flags: []string{"--namespace", "default", "--no-hooks"}}, | ||||
| 				{Name: "my-release", Flags: []string{"--namespace", "default", "--no-hooks"}}, | ||||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
|  | @ -398,19 +414,19 @@ releases: | |||
| 	t.Run("fail due to unknown field with goccy/go-yaml", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			goccyGoYaml: true, | ||||
| 			error: `in ./helmfile.yaml: failed to read helmfile.yaml: reading document at index 1: [4:3] unknown field "foobar" | ||||
|        2 | releases: | ||||
|        3 | - name: app1 | ||||
|     >  4 |   foobar: FOOBAR | ||||
|              ^ | ||||
|        5 |   chart: incubator/raw`, | ||||
| 			error: `in ./helmfile.yaml: failed to read helmfile.yaml: reading document at index 1. Started seeing this since Helmfile v1? Add the .gotmpl file extension: [4:3] unknown field "foobar" | ||||
|    2 | releases: | ||||
|    3 | - name: app1 | ||||
| >  4 |   foobar: FOOBAR | ||||
|          ^ | ||||
|    5 |   chart: incubator/raw`, | ||||
| 		}) | ||||
| 	}) | ||||
| 
 | ||||
| 	t.Run("fail due to unknown field with gopkg.in/yaml.v2", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			goccyGoYaml: false, | ||||
| 			error: `in ./helmfile.yaml: failed to read helmfile.yaml: reading document at index 1: yaml: unmarshal errors: | ||||
| 			error: `in ./helmfile.yaml: failed to read helmfile.yaml: reading document at index 1. Started seeing this since Helmfile v1? Add the .gotmpl file extension: yaml: unmarshal errors: | ||||
|   line 4: field foobar not found in type state.ReleaseSpec`, | ||||
| 		}) | ||||
| 	}) | ||||
|  |  | |||
|  | @ -135,6 +135,7 @@ environments: | |||
|   default: | ||||
|     values: | ||||
|     - env.*.yaml | ||||
| --- | ||||
| releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|  | @ -170,7 +171,7 @@ BAZ: 4 | |||
| 		t.Errorf("unexpected error: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	expectedOrder := []string{"helmfile.yaml", "/path/to/env.1.yaml", "/path/to/env.2.yaml", "/path/to/env.1.yaml", "/path/to/env.2.yaml"} | ||||
| 	expectedOrder := []string{"helmfile.yaml", "/path/to/env.1.yaml", "/path/to/env.2.yaml"} | ||||
| 	actualOrder := fs.SuccessfulReads() | ||||
| 	if !reflect.DeepEqual(actualOrder, expectedOrder) { | ||||
| 		t.Errorf("unexpected order of processed state files: expected=%v, actual=%v", expectedOrder, actualOrder) | ||||
|  | @ -184,6 +185,7 @@ environments: | |||
|   default: | ||||
|     values: | ||||
|     - env.*.yaml | ||||
| --- | ||||
| releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|  | @ -230,6 +232,7 @@ bases: | |||
| - base.yaml | ||||
| environments: | ||||
|   test: | ||||
| --- | ||||
| releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|  | @ -281,6 +284,7 @@ environments: | |||
|     missingFileHandler: %s | ||||
|     values: | ||||
|     - %s | ||||
| --- | ||||
| releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|  | @ -393,7 +397,7 @@ helmfiles: | |||
| 		"/path/to/helmfile.d/a1.yaml": ` | ||||
| environments: | ||||
|   prod: | ||||
| 
 | ||||
| --- | ||||
| releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|  | @ -799,41 +803,44 @@ func runFilterSubHelmFilesTests(testcases []struct { | |||
| 
 | ||||
| func TestVisitDesiredStatesWithReleasesFiltered_EmbeddedNestedStateAdditionalEnvValues(t *testing.T) { | ||||
| 	files := map[string]string{ | ||||
| 		"/path/to/helmfile.yaml": ` | ||||
| 		"/path/to/helmfile.yaml.gotmpl": ` | ||||
| helmfiles: | ||||
| - path: helmfile.d/a*.yaml | ||||
| - path: helmfile.d/a*.yaml.gotmpl | ||||
|   values: | ||||
|   - env.values.yaml | ||||
| - helmfile.d/b*.yaml | ||||
| - path: helmfile.d/c*.yaml | ||||
| - helmfile.d/b*.yaml.gotmpl | ||||
| - path: helmfile.d/c*.yaml.gotmpl | ||||
|   values: | ||||
|   - env.values.yaml | ||||
| `, | ||||
| 		"/path/to/helmfile.d/a1.yaml": ` | ||||
| 		"/path/to/helmfile.d/a1.yaml.gotmpl": ` | ||||
| environments: | ||||
|   default: | ||||
|     values: | ||||
|     - ns: INLINE_NS | ||||
| --- | ||||
| releases: | ||||
| - name: foo | ||||
|   chart: stable/zipkin | ||||
|   namespace: {{ .Environment.Values.ns }} | ||||
| `, | ||||
| 		"/path/to/helmfile.d/b.yaml": ` | ||||
| 		"/path/to/helmfile.d/b.yaml.gotmpl": ` | ||||
| environments: | ||||
|   default: | ||||
|     values: | ||||
|     - ns: INLINE_NS | ||||
| --- | ||||
| releases: | ||||
| - name: bar | ||||
|   chart: stable/grafana | ||||
|   namespace: {{ .Environment.Values.ns }} | ||||
| `, | ||||
| 		"/path/to/helmfile.d/c.yaml": ` | ||||
| 		"/path/to/helmfile.d/c.yaml.gotmpl": ` | ||||
| environments: | ||||
|   default: | ||||
|     values: | ||||
|     - ns: INLINE_NS | ||||
| --- | ||||
| releases: | ||||
| - name: baz | ||||
|   chart: stable/envoy | ||||
|  | @ -851,7 +858,7 @@ ns: INLINE_NS | |||
| 		Namespace:           "", | ||||
| 		Selectors:           []string{}, | ||||
| 		Env:                 "default", | ||||
| 		FileOrDir:           "/path/to/helmfile.yaml", | ||||
| 		FileOrDir:           "/path/to/helmfile.yaml.gotmpl", | ||||
| 	}, files) | ||||
| 
 | ||||
| 	expectNoCallsToHelm(app) | ||||
|  | @ -977,7 +984,7 @@ releases: | |||
| 
 | ||||
| func TestVisitDesiredStatesWithReleasesFiltered_EnvironmentValueOverrides(t *testing.T) { | ||||
| 	files := map[string]string{ | ||||
| 		"/path/to/helmfile.yaml": ` | ||||
| 		"/path/to/helmfile.yaml.gotmpl": ` | ||||
| environments: | ||||
|   default: | ||||
|     values: | ||||
|  | @ -1021,7 +1028,7 @@ bar: "bar1" | |||
| 			Env:                 "default", | ||||
| 			ValuesFiles:         []string{"overrides.yaml"}, | ||||
| 			Set:                 map[string]any{"bar": "bar2", "baz": "baz1"}, | ||||
| 			FileOrDir:           "helmfile.yaml", | ||||
| 			FileOrDir:           "helmfile.yaml.gotmpl", | ||||
| 		}, files) | ||||
| 
 | ||||
| 		expectNoCallsToHelm(app) | ||||
|  | @ -1075,7 +1082,7 @@ func TestVisitDesiredStatesWithReleasesFiltered_StateValueOverrides(t *testing.T | |||
| 		testcase := testcases[i] | ||||
| 		t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) { | ||||
| 			files := map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": fmt.Sprintf(` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": fmt.Sprintf(` | ||||
| # The top-level "values" are "base" values has inherited to state values with the lowest priority. | ||||
| # The lowest priority results in environment-specific values to override values defined in the base. | ||||
| values: | ||||
|  | @ -1142,7 +1149,7 @@ x: | |||
| 				Env:                 testcase.env, | ||||
| 				ValuesFiles:         []string{"overrides.yaml"}, | ||||
| 				Set:                 map[string]any{"x": map[string]any{"hoge": "hoge_set", "fuga": "fuga_set"}}, | ||||
| 				FileOrDir:           "helmfile.yaml", | ||||
| 				FileOrDir:           "helmfile.yaml.gotmpl", | ||||
| 			}, files) | ||||
| 
 | ||||
| 			expectNoCallsToHelm(app) | ||||
|  | @ -1442,7 +1449,7 @@ func TestLoadDesiredStateFromYaml_DuplicateReleaseName(t *testing.T) { | |||
| } | ||||
| 
 | ||||
| func TestLoadDesiredStateFromYaml_Bases(t *testing.T) { | ||||
| 	yamlFile := "/path/to/yaml/file" | ||||
| 	yamlFile := "/path/to/yaml/file.gotmpl" | ||||
| 	yamlContent := `bases: | ||||
| - ../base.yaml | ||||
| - ../base.gotmpl | ||||
|  | @ -1513,7 +1520,7 @@ helmDefaults: | |||
| } | ||||
| 
 | ||||
| func TestLoadDesiredStateFromYaml_MultiPartTemplate(t *testing.T) { | ||||
| 	yamlFile := "/path/to/yaml/file" | ||||
| 	yamlFile := "/path/to/yaml/file.gotmpl" | ||||
| 	yamlContent := `bases: | ||||
| - ../base.yaml | ||||
| --- | ||||
|  | @ -1719,7 +1726,7 @@ foo: FOO | |||
| } | ||||
| 
 | ||||
| func TestLoadDesiredStateFromYaml_MultiPartTemplate_WithNonDefaultEnv(t *testing.T) { | ||||
| 	yamlFile := "/path/to/yaml/file" | ||||
| 	yamlFile := "/path/to/yaml/file.gotmpl" | ||||
| 	yamlContent := `bases: | ||||
| - ../base.yaml | ||||
| --- | ||||
|  | @ -1810,7 +1817,7 @@ helmDefaults: | |||
| } | ||||
| 
 | ||||
| func TestLoadDesiredStateFromYaml_MultiPartTemplate_WithReverse(t *testing.T) { | ||||
| 	yamlFile := "/path/to/yaml/file" | ||||
| 	yamlFile := "/path/to/yaml/file.gotmpl" | ||||
| 	yamlContent := ` | ||||
| {{ readFile "templates.yaml" }} | ||||
| 
 | ||||
|  | @ -1868,7 +1875,7 @@ releases: | |||
| 
 | ||||
| // See https://github.com/roboll/helmfile/issues/615
 | ||||
| func TestLoadDesiredStateFromYaml_MultiPartTemplate_NoMergeArrayInEnvVal(t *testing.T) { | ||||
| 	statePath := "/path/to/helmfile.yaml" | ||||
| 	statePath := "/path/to/helmfile.yaml.gotmpl" | ||||
| 	stateContent := ` | ||||
| environments: | ||||
|   default: | ||||
|  | @ -1933,7 +1940,7 @@ func TestLoadDesiredStateFromYaml_MultiPartTemplate_MergeMapsVariousKeys(t *test | |||
| 	} | ||||
| 	for i := range testcases { | ||||
| 		tc := testcases[i] | ||||
| 		statePath := "/path/to/helmfile.yaml" | ||||
| 		statePath := "/path/to/helmfile.yaml.gotmpl" | ||||
| 		stateContent := ` | ||||
| environments: | ||||
|   default: | ||||
|  | @ -2050,7 +2057,7 @@ releases: | |||
| 	} | ||||
| 	for i := range testcases { | ||||
| 		tc := testcases[i] | ||||
| 		statePath := "/path/to/helmfile.yaml" | ||||
| 		statePath := "/path/to/helmfile.yaml.gotmpl" | ||||
| 		stateContent := fmt.Sprintf(tc.state, tc.expr) | ||||
| 		testFs := testhelper.NewTestFs(map[string]string{ | ||||
| 			statePath:         stateContent, | ||||
|  | @ -2085,14 +2092,17 @@ services: | |||
| } | ||||
| 
 | ||||
| type configImpl struct { | ||||
| 	selectors   []string | ||||
| 	set         []string | ||||
| 	output      string | ||||
| 	includeCRDs bool | ||||
| 	skipCleanup bool | ||||
| 	skipCRDs    bool | ||||
| 	skipDeps    bool | ||||
| 	skipTests   bool | ||||
| 	selectors            []string | ||||
| 	set                  []string | ||||
| 	output               string | ||||
| 	noHooks              bool | ||||
| 	includeCRDs          bool | ||||
| 	skipCleanup          bool | ||||
| 	skipCRDs             bool | ||||
| 	skipDeps             bool | ||||
| 	skipTests            bool | ||||
| 	skipSchemaValidation bool | ||||
| 	skipRefresh          bool | ||||
| 
 | ||||
| 	skipNeeds              bool | ||||
| 	includeNeeds           bool | ||||
|  | @ -2133,6 +2143,10 @@ func (c configImpl) SkipDeps() bool { | |||
| 	return c.skipDeps | ||||
| } | ||||
| 
 | ||||
| func (c configImpl) SkipRefresh() bool { | ||||
| 	return c.skipRefresh | ||||
| } | ||||
| 
 | ||||
| func (c configImpl) SkipNeeds() bool { | ||||
| 	return c.skipNeeds | ||||
| } | ||||
|  | @ -2161,6 +2175,10 @@ func (c configImpl) IncludeCRDs() bool { | |||
| 	return c.includeCRDs | ||||
| } | ||||
| 
 | ||||
| func (c configImpl) NoHooks() bool { | ||||
| 	return c.noHooks | ||||
| } | ||||
| 
 | ||||
| func (c configImpl) Concurrency() int { | ||||
| 	return 1 | ||||
| } | ||||
|  | @ -2189,6 +2207,10 @@ func (c configImpl) KubeVersion() string { | |||
| 	return c.kubeVersion | ||||
| } | ||||
| 
 | ||||
| func (c configImpl) SkipSchemaValidation() bool { | ||||
| 	return c.skipSchemaValidation | ||||
| } | ||||
| 
 | ||||
| func (c configImpl) ShowOnly() []string { | ||||
| 	return nil | ||||
| } | ||||
|  | @ -2198,14 +2220,12 @@ type applyConfig struct { | |||
| 	cascade string | ||||
| 	values  []string | ||||
| 
 | ||||
| 	// TODO: Remove this function once Helmfile v0.x
 | ||||
| 	retainValuesFiles bool | ||||
| 
 | ||||
| 	set                     []string | ||||
| 	validate                bool | ||||
| 	skipCleanup             bool | ||||
| 	skipCRDs                bool | ||||
| 	skipDeps                bool | ||||
| 	skipRefresh             bool | ||||
| 	skipNeeds               bool | ||||
| 	includeNeeds            bool | ||||
| 	includeTransitiveNeeds  bool | ||||
|  | @ -2228,14 +2248,18 @@ type applyConfig struct { | |||
| 	diffArgs                string | ||||
| 	logger                  *zap.SugaredLogger | ||||
| 	wait                    bool | ||||
| 	waitRetries             int | ||||
| 	waitForJobs             bool | ||||
| 	reuseValues             bool | ||||
| 	postRenderer            string | ||||
| 	postRendererArgs        []string | ||||
| 	skipSchemaValidation    bool | ||||
| 	kubeVersion             string | ||||
| 	suppressOutputLineRegex []string | ||||
| 	showOnly                []string | ||||
| 	hideNotes               bool | ||||
| 	takeOwnership           bool | ||||
| 	syncReleaseLabels       bool | ||||
| 
 | ||||
| 	// template-only options
 | ||||
| 	includeCRDs, skipTests       bool | ||||
|  | @ -2254,6 +2278,10 @@ func (a applyConfig) Wait() bool { | |||
| 	return a.wait | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) WaitRetries() int { | ||||
| 	return a.waitRetries | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) WaitForJobs() bool { | ||||
| 	return a.waitForJobs | ||||
| } | ||||
|  | @ -2282,6 +2310,10 @@ func (a applyConfig) SkipDeps() bool { | |||
| 	return a.skipDeps | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) SkipRefresh() bool { | ||||
| 	return a.skipRefresh | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) SkipNeeds() bool { | ||||
| 	return a.skipNeeds | ||||
| } | ||||
|  | @ -2354,11 +2386,6 @@ func (a applyConfig) Logger() *zap.SugaredLogger { | |||
| 	return a.logger | ||||
| } | ||||
| 
 | ||||
| // TODO: Remove this function once Helmfile v0.x
 | ||||
| func (a applyConfig) RetainValuesFiles() bool { | ||||
| 	return a.retainValuesFiles | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) SkipDiffOnInstall() bool { | ||||
| 	return a.skipDiffOnInstall | ||||
| } | ||||
|  | @ -2372,7 +2399,6 @@ func (a applyConfig) DiffArgs() string { | |||
| } | ||||
| 
 | ||||
| // helmfile-template-only flags
 | ||||
| 
 | ||||
| func (a applyConfig) IncludeCRDs() bool { | ||||
| 	return a.includeCRDs | ||||
| } | ||||
|  | @ -2412,6 +2438,10 @@ func (a applyConfig) KubeVersion() string { | |||
| 	return a.kubeVersion | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) SkipSchemaValidation() bool { | ||||
| 	return a.skipSchemaValidation | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) ShowOnly() []string { | ||||
| 	return a.showOnly | ||||
| } | ||||
|  | @ -2420,6 +2450,14 @@ func (a applyConfig) HideNotes() bool { | |||
| 	return a.hideNotes | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) TakeOwnership() bool { | ||||
| 	return a.takeOwnership | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) SyncReleaseLabels() bool { | ||||
| 	return a.syncReleaseLabels | ||||
| } | ||||
| 
 | ||||
| type depsConfig struct { | ||||
| 	skipRepos              bool | ||||
| 	includeTransitiveNeeds bool | ||||
|  | @ -2754,8 +2792,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}:          nil, | ||||
| 				{Name: "foo_notFound", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}:          nil, | ||||
| 				{Name: "foo_notFound", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil, | ||||
| 			}, | ||||
| 			lists:    map[exectest.ListKey]string{}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
|  | @ -2827,16 +2865,16 @@ releases: | |||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				// noop on frontend-v2
 | ||||
| 				{Name: "frontend-v2", Chart: "charts/frontend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "frontend-v2", Chart: "charts/frontend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil, | ||||
| 				// install frontend-v3
 | ||||
| 				{Name: "frontend-v3", Chart: "charts/frontend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "frontend-v3", Chart: "charts/frontend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				// upgrades
 | ||||
| 				{Name: "logging", Chart: "charts/fluent-bit", Flags: "--kube-context default --detailed-exitcode --reset-values"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "front-proxy", Chart: "stable/envoy", Flags: "--kube-context default --detailed-exitcode --reset-values"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "servicemesh", Chart: "charts/istio", Flags: "--kube-context default --detailed-exitcode --reset-values"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "database", Chart: "charts/mysql", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "backend-v2", Chart: "charts/backend", Flags: "--kube-context default --detailed-exitcode --reset-values"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "logging", Chart: "charts/fluent-bit", Flags: "--kube-context default --reset-values --detailed-exitcode"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "front-proxy", Chart: "stable/envoy", Flags: "--kube-context default --reset-values --detailed-exitcode"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "servicemesh", Chart: "charts/istio", Flags: "--kube-context default --reset-values --detailed-exitcode"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "database", Chart: "charts/mysql", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "backend-v2", Chart: "charts/backend", Flags: "--kube-context default --reset-values --detailed-exitcode"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				// delete frontend-v1 and backend-v1
 | ||||
|  | @ -2902,7 +2940,7 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: ``, | ||||
|  | @ -2933,9 +2971,9 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{}, | ||||
| 			upgraded: []exectest.Release{ | ||||
|  | @ -2969,9 +3007,9 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--disable-validation --kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation --kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--disable-validation --kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation --kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: ``, | ||||
|  | @ -3014,8 +3052,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation --kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation --kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: ``, | ||||
|  | @ -3052,8 +3090,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "bar", Flags: []string{}}, | ||||
|  | @ -3075,8 +3113,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "foo", Flags: []string{}}, | ||||
|  | @ -3099,8 +3137,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "bar", Flags: []string{}}, | ||||
|  | @ -3123,8 +3161,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "foo", Flags: []string{}}, | ||||
|  | @ -3148,8 +3186,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns2"}}, | ||||
|  | @ -3173,14 +3211,43 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "foo", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}}, | ||||
| 				{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns2"}}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "upgrade when ns1/foo needs ns1/bar and ns2/bar is disabled", | ||||
| 			loc:  location(), | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| releases: | ||||
| - name: bar | ||||
|   chart: stable/mychart2 | ||||
|   namespace: ns1 | ||||
| - name: bar | ||||
|   chart: stable/mychart2 | ||||
|   namespace: ns2 | ||||
|   installed: false | ||||
| - name: foo | ||||
|   chart: stable/mychart1 | ||||
|   namespace: ns1 | ||||
|   needs: | ||||
|   - ns1/bar | ||||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}}, | ||||
| 				{Name: "foo", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		//
 | ||||
| 		// deletes: deleting all releases in the correct order
 | ||||
| 		//
 | ||||
|  | @ -3201,8 +3268,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -3234,8 +3301,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -3269,8 +3336,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -3303,8 +3370,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -3337,8 +3404,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -3371,8 +3438,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -3400,7 +3467,7 @@ bar 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	mychart2-3.1.0	3.1.0      	defau | |||
| 				skipNeeds: true, | ||||
| 			}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -3427,8 +3494,8 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"app=test"}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "external-secrets", Flags: []string{"--kube-context", "default", "--namespace", "default"}}, | ||||
|  | @ -3453,9 +3520,9 @@ my-release 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	def | |||
| 				skipNeeds:    false, | ||||
| 				includeNeeds: true, | ||||
| 			}, | ||||
| 			error: `in ./helmfile.yaml: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			error: `in ./helmfile.yaml.gotmpl: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -3482,8 +3549,8 @@ releases: | |||
| 			}, | ||||
| 			selectors: []string{"app=test"}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -3494,7 +3561,7 @@ releases: | |||
| 			name: "upgrades with bad selector", | ||||
| 			loc:  location(), | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -3546,8 +3613,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                 helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                 helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists:       map[exectest.ListKey]string{}, | ||||
| 			upgraded:    []exectest.Release{}, | ||||
|  | @ -3571,8 +3638,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                 helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                 helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists:       map[exectest.ListKey]string{}, | ||||
| 			upgraded:    []exectest.Release{}, | ||||
|  | @ -3600,8 +3667,8 @@ releases: | |||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                 helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                 helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists:       map[exectest.ListKey]string{}, | ||||
| 			upgraded:    []exectest.Release{}, | ||||
|  | @ -3745,41 +3812,6 @@ releases: | |||
| `, | ||||
| 				"/path/to/charts/example/Chart.yaml": `foo: FOO`, | ||||
| 			}, | ||||
| 			log: `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: repositories: | ||||
|  2: - name: bitnami | ||||
|  3:   url: https://charts.bitnami.com/bitnami/
 | ||||
|  4: releases: | ||||
|  5: - name: example | ||||
|  6:   chart: /path/to/charts/example | ||||
|  7:  | ||||
| 
 | ||||
| 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: repositories: | ||||
|  2: - name: bitnami | ||||
|  3:   url: https://charts.bitnami.com/bitnami/
 | ||||
|  4: releases: | ||||
|  5: - name: example | ||||
|  6:   chart: /path/to/charts/example | ||||
|  7:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| There are no repositories defined in your helmfile.yaml. | ||||
| This means helmfile cannot update your dependencies or create a lock file. | ||||
| See https://github.com/roboll/helmfile/issues/878 for more information.
 | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 			charts: []string{"/path/to/charts/example"}, | ||||
| 		}, | ||||
| 	} | ||||
|  | @ -3827,8 +3859,9 @@ changing working directory back to "/path/to" | |||
| 
 | ||||
| 			if tc.log != "" { | ||||
| 				actual := bs.String() | ||||
| 
 | ||||
| 				assert.Equal(t, tc.log, actual) | ||||
| 			} else { | ||||
| 				assertLogEqualsToSnapshot(t, bs.String()) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
|  | @ -3933,6 +3966,7 @@ environments: | |||
|     values: | ||||
|      - myrelease2: | ||||
|          enabled: false | ||||
| --- | ||||
| releases: | ||||
| - name: myrelease1 | ||||
|   chart: mychart1 | ||||
|  | @ -3977,15 +4011,82 @@ releases: | |||
| 	}) | ||||
| 	assert.NoError(t, err) | ||||
| 
 | ||||
| 	expected := `NAME      	NAMESPACE    	ENABLED	INSTALLED	LABELS                    	CHART   	VERSION | ||||
| myrelease1	testNamespace	true   	false    	common:label,id:myrelease1	mychart1	        | ||||
| myrelease2	testNamespace	false  	true     	common:label              	mychart1	        | ||||
| myrelease3	testNamespace	true   	true     	                          	mychart1	        | ||||
| myrelease4	testNamespace	true   	true     	id:myrelease1             	mychart1	        | ||||
| 	expected := `NAME      	NAMESPACE    	ENABLED	INSTALLED	LABELS                                                                           	CHART   	VERSION | ||||
| myrelease1	testNamespace	true   	false    	chart:mychart1,common:label,id:myrelease1,name:myrelease1,namespace:testNamespace	mychart1	        | ||||
| myrelease2	testNamespace	false  	true     	chart:mychart1,common:label,name:myrelease2,namespace:testNamespace              	mychart1	        | ||||
| myrelease3	testNamespace	true   	true     	chart:mychart1,name:myrelease3,namespace:testNamespace                           	mychart1	        | ||||
| myrelease4	testNamespace	true   	true     	chart:mychart1,id:myrelease1,name:myrelease4,namespace:testNamespace             	mychart1	        | ||||
| ` | ||||
| 
 | ||||
| 	assert.Equal(t, expected, out) | ||||
| } | ||||
| func testSetStringValuesTemplate(t *testing.T, goccyGoYaml bool) { | ||||
| 	t.Helper() | ||||
| 
 | ||||
| 	v := runtime.GoccyGoYaml | ||||
| 	runtime.GoccyGoYaml = goccyGoYaml | ||||
| 	t.Cleanup(func() { | ||||
| 		runtime.GoccyGoYaml = v | ||||
| 	}) | ||||
| 
 | ||||
| 	files := map[string]string{ | ||||
| 		"/path/to/helmfile.yaml.gotmpl": ` | ||||
| releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|   values: | ||||
|   - val2: "val2" | ||||
|   valuesTemplate: | ||||
|   - val1: '{{"{{ .Release.Name }}"}}' | ||||
|   setString: | ||||
|   - name: "name" | ||||
|     value: "val" | ||||
| `, | ||||
| 	} | ||||
| 	expectedValues := []any{ | ||||
| 		map[string]any{"val1": "zipkin"}, | ||||
| 		map[string]any{"val2": "val2"}} | ||||
| 	expectedSetValues := []state.SetValue{ | ||||
| 		{Name: "name", Value: "val"}} | ||||
| 
 | ||||
| 	app := appWithFs(&App{ | ||||
| 		OverrideHelmBinary:  DefaultHelmBinary, | ||||
| 		OverrideKubeContext: "default", | ||||
| 		Logger:              newAppTestLogger(), | ||||
| 		Env:                 "default", | ||||
| 		FileOrDir:           "helmfile.yaml.gotmpl", | ||||
| 	}, files) | ||||
| 
 | ||||
| 	expectNoCallsToHelm(app) | ||||
| 
 | ||||
| 	var specs []state.ReleaseSpec | ||||
| 	collectReleases := func(run *Run) (bool, []error) { | ||||
| 		specs = append(specs, run.state.Releases...) | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	err := app.ForEachState( | ||||
| 		collectReleases, | ||||
| 		false, | ||||
| 		SetFilter(true), | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("unexpected error: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if len(specs) != 1 { | ||||
| 		t.Fatalf("expected 1 release; got %d releases", len(specs)) | ||||
| 	} | ||||
| 	actualValues := specs[0].Values | ||||
| 	actualSetStringValues := specs[0].SetStringValues | ||||
| 
 | ||||
| 	if !reflect.DeepEqual(expectedValues, actualValues) { | ||||
| 		t.Errorf("expected values: %v; got values: %v", expectedValues, actualValues) | ||||
| 	} | ||||
| 	if !reflect.DeepEqual(expectedSetValues, actualSetStringValues) { | ||||
| 		t.Errorf("expected set-string: %v; got set: %v", expectedValues, actualValues) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func testSetValuesTemplate(t *testing.T, goccyGoYaml bool) { | ||||
| 	t.Helper() | ||||
|  | @ -3997,7 +4098,7 @@ func testSetValuesTemplate(t *testing.T, goccyGoYaml bool) { | |||
| 	}) | ||||
| 
 | ||||
| 	files := map[string]string{ | ||||
| 		"/path/to/helmfile.yaml": ` | ||||
| 		"/path/to/helmfile.yaml.gotmpl": ` | ||||
| releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|  | @ -4025,7 +4126,7 @@ releases: | |||
| 		OverrideKubeContext: "default", | ||||
| 		Logger:              newAppTestLogger(), | ||||
| 		Env:                 "default", | ||||
| 		FileOrDir:           "helmfile.yaml", | ||||
| 		FileOrDir:           "helmfile.yaml.gotmpl", | ||||
| 	}, files) | ||||
| 
 | ||||
| 	expectNoCallsToHelm(app) | ||||
|  | @ -4069,6 +4170,16 @@ func TestSetValuesTemplate(t *testing.T) { | |||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func TestSetStringValuesTemplate(t *testing.T) { | ||||
| 	t.Run("with goccy/go-yaml", func(t *testing.T) { | ||||
| 		testSetStringValuesTemplate(t, true) | ||||
| 	}) | ||||
| 
 | ||||
| 	t.Run("with gopkg.in/yaml.v2", func(t *testing.T) { | ||||
| 		testSetStringValuesTemplate(t, false) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func location() string { | ||||
| 	_, fn, line, _ := goruntime.Caller(1) | ||||
| 	return fmt.Sprintf("%s:%d", filepath.Base(fn), line) | ||||
|  |  | |||
|  | @ -24,9 +24,10 @@ func AskForConfirmation(s string) bool { | |||
| 
 | ||||
| 		response = strings.ToLower(strings.TrimSpace(response)) | ||||
| 
 | ||||
| 		if response == "y" || response == "yes" { | ||||
| 		switch response { | ||||
| 		case "y", "yes": | ||||
| 			return true | ||||
| 		} else if response == "n" || response == "no" { | ||||
| 		case "n", "no": | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ type ConfigProvider interface { | |||
| 	StripArgsValuesOnExitError() bool | ||||
| 	DisableForceUpdate() bool | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 
 | ||||
| 	FileOrDir() string | ||||
| 	KubeContext() string | ||||
|  | @ -24,15 +25,6 @@ type ConfigProvider interface { | |||
| 	loggingConfig | ||||
| } | ||||
| 
 | ||||
| // TODO: Remove this function once Helmfile v0.x
 | ||||
| type DeprecatedChartsConfigProvider interface { | ||||
| 	Values() []string | ||||
| 
 | ||||
| 	concurrencyConfig | ||||
| 	loggingConfig | ||||
| 	IncludeTransitiveNeeds() bool | ||||
| } | ||||
| 
 | ||||
| type DepsConfigProvider interface { | ||||
| 	Args() string | ||||
| 	SkipRepos() bool | ||||
|  | @ -50,15 +42,19 @@ type ApplyConfigProvider interface { | |||
| 	Args() string | ||||
| 	PostRenderer() string | ||||
| 	PostRendererArgs() []string | ||||
| 	SkipSchemaValidation() bool | ||||
| 	Cascade() string | ||||
| 	HideNotes() bool | ||||
| 	TakeOwnership() bool | ||||
| 	SuppressOutputLineRegex() []string | ||||
| 
 | ||||
| 	Values() []string | ||||
| 	Set() []string | ||||
| 	SkipCRDs() bool | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 	Wait() bool | ||||
| 	WaitRetries() int | ||||
| 	WaitForJobs() bool | ||||
| 
 | ||||
| 	IncludeTests() bool | ||||
|  | @ -77,9 +73,6 @@ type ApplyConfigProvider interface { | |||
| 	Context() int | ||||
| 	DiffOutput() string | ||||
| 
 | ||||
| 	// TODO: Remove this function once Helmfile v0.x
 | ||||
| 	RetainValuesFiles() bool | ||||
| 
 | ||||
| 	Validate() bool | ||||
| 	SkipCleanup() bool | ||||
| 	SkipDiffOnInstall() bool | ||||
|  | @ -87,6 +80,8 @@ type ApplyConfigProvider interface { | |||
| 	DiffArgs() string | ||||
| 	SyncArgs() string | ||||
| 
 | ||||
| 	SyncReleaseLabels() bool | ||||
| 
 | ||||
| 	DAGConfig | ||||
| 
 | ||||
| 	concurrencyConfig | ||||
|  | @ -98,15 +93,19 @@ type ApplyConfigProvider interface { | |||
| type SyncConfigProvider interface { | ||||
| 	Args() string | ||||
| 	PostRenderer() string | ||||
| 	SkipSchemaValidation() bool | ||||
| 	PostRendererArgs() []string | ||||
| 	HideNotes() bool | ||||
| 	TakeOwnership() bool | ||||
| 	Cascade() string | ||||
| 
 | ||||
| 	Values() []string | ||||
| 	Set() []string | ||||
| 	SkipCRDs() bool | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 	Wait() bool | ||||
| 	WaitRetries() int | ||||
| 	WaitForJobs() bool | ||||
| 	SyncArgs() string | ||||
| 
 | ||||
|  | @ -115,6 +114,9 @@ type SyncConfigProvider interface { | |||
| 	SkipNeeds() bool | ||||
| 	IncludeNeeds() bool | ||||
| 	IncludeTransitiveNeeds() bool | ||||
| 
 | ||||
| 	SyncReleaseLabels() bool | ||||
| 
 | ||||
| 	DAGConfig | ||||
| 
 | ||||
| 	concurrencyConfig | ||||
|  | @ -127,6 +129,7 @@ type DiffConfigProvider interface { | |||
| 	Args() string | ||||
| 	PostRenderer() string | ||||
| 	PostRendererArgs() []string | ||||
| 	SkipSchemaValidation() bool | ||||
| 	SuppressOutputLineRegex() []string | ||||
| 
 | ||||
| 	Values() []string | ||||
|  | @ -134,6 +137,7 @@ type DiffConfigProvider interface { | |||
| 	Validate() bool | ||||
| 	SkipCRDs() bool | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 
 | ||||
| 	IncludeTests() bool | ||||
| 
 | ||||
|  | @ -158,27 +162,12 @@ type DiffConfigProvider interface { | |||
| 	valuesControlMode | ||||
| } | ||||
| 
 | ||||
| // TODO: Remove this function once Helmfile v0.x
 | ||||
| type DeleteConfigProvider interface { | ||||
| 	Args() string | ||||
| 	Cascade() string | ||||
| 
 | ||||
| 	Purge() bool | ||||
| 	SkipDeps() bool | ||||
| 	SkipCharts() bool | ||||
| 	DeleteWait() bool | ||||
| 	DeleteTimeout() int | ||||
| 
 | ||||
| 	interactive | ||||
| 	loggingConfig | ||||
| 	concurrencyConfig | ||||
| } | ||||
| 
 | ||||
| type DestroyConfigProvider interface { | ||||
| 	Args() string | ||||
| 	Cascade() string | ||||
| 
 | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 	SkipCharts() bool | ||||
| 	DeleteWait() bool | ||||
| 	DeleteTimeout() int | ||||
|  | @ -192,6 +181,7 @@ type TestConfigProvider interface { | |||
| 	Args() string | ||||
| 
 | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 	Timeout() int | ||||
| 	Cleanup() bool | ||||
| 	Logs() bool | ||||
|  | @ -205,6 +195,7 @@ type LintConfigProvider interface { | |||
| 	Values() []string | ||||
| 	Set() []string | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 	SkipCleanup() bool | ||||
| 
 | ||||
| 	DAGConfig | ||||
|  | @ -214,6 +205,7 @@ type LintConfigProvider interface { | |||
| 
 | ||||
| type FetchConfigProvider interface { | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 	OutputDir() string | ||||
| 	OutputDirTemplate() string | ||||
| 
 | ||||
|  | @ -224,16 +216,19 @@ type TemplateConfigProvider interface { | |||
| 	Args() string | ||||
| 	PostRenderer() string | ||||
| 	PostRendererArgs() []string | ||||
| 	SkipSchemaValidation() bool | ||||
| 
 | ||||
| 	Values() []string | ||||
| 	Set() []string | ||||
| 	OutputDirTemplate() string | ||||
| 	Validate() bool | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 	SkipCleanup() bool | ||||
| 	SkipTests() bool | ||||
| 	OutputDir() string | ||||
| 	IncludeCRDs() bool | ||||
| 	NoHooks() bool | ||||
| 	KubeVersion() string | ||||
| 	ShowOnly() []string | ||||
| 
 | ||||
|  | @ -253,6 +248,7 @@ type WriteValuesConfigProvider interface { | |||
| 	Set() []string | ||||
| 	OutputFileTemplate() string | ||||
| 	SkipDeps() bool | ||||
| 	SkipRefresh() bool | ||||
| 	SkipCleanup() bool | ||||
| 	IncludeTransitiveNeeds() bool | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,10 +8,7 @@ import ( | |||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	DefaultHelmfile = "helmfile.yaml" | ||||
| 	// TODO: Remove this function once Helmfile v0.x
 | ||||
| 	DeprecatedHelmfile = "charts.yaml" | ||||
| 
 | ||||
| 	DefaultHelmfile              = "helmfile.yaml" | ||||
| 	DefaultHelmfileDirectory     = "helmfile.d" | ||||
| 	ExperimentalSelectorExplicit = "explicit-selector-inheritance" // value to remove default selector inheritance to sub-helmfiles and use the explicit one
 | ||||
| ) | ||||
|  |  | |||
|  | @ -15,7 +15,6 @@ import ( | |||
| 	"github.com/helmfile/helmfile/pkg/helmexec" | ||||
| 	"github.com/helmfile/helmfile/pkg/policy" | ||||
| 	"github.com/helmfile/helmfile/pkg/remote" | ||||
| 	"github.com/helmfile/helmfile/pkg/runtime" | ||||
| 	"github.com/helmfile/helmfile/pkg/state" | ||||
| ) | ||||
| 
 | ||||
|  | @ -162,21 +161,14 @@ func (a *desiredStateLoader) underlying() *state.StateCreator { | |||
| func (a *desiredStateLoader) rawLoad(yaml []byte, baseDir, file string, evaluateBases bool, env, overrodeEnv *environment.Environment) (*state.HelmState, error) { | ||||
| 	var st *state.HelmState | ||||
| 	var err error | ||||
| 	if runtime.V1Mode { | ||||
| 		st, err = a.underlying().ParseAndLoad(yaml, baseDir, file, a.env, false, evaluateBases, env, overrodeEnv) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} else { | ||||
| 		merged, err := env.Merge(overrodeEnv) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	merged, err := env.Merge(overrodeEnv) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 		st, err = a.underlying().ParseAndLoad(yaml, baseDir, file, a.env, false, evaluateBases, merged, nil) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	st, err = a.underlying().ParseAndLoad(yaml, baseDir, file, a.env, false, evaluateBases, merged, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	helmfiles, err := st.ExpandedHelmfiles() | ||||
| 	if err != nil { | ||||
|  | @ -207,7 +199,7 @@ func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, ba | |||
| 
 | ||||
| 		var rawContent []byte | ||||
| 
 | ||||
| 		if filepath.Ext(filename) == ".gotmpl" || !runtime.V1Mode { | ||||
| 		if filepath.Ext(filename) == ".gotmpl" { | ||||
| 			var yamlBuf *bytes.Buffer | ||||
| 			var err error | ||||
| 
 | ||||
|  | @ -249,6 +241,14 @@ func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, ba | |||
| 			finalState.RenderedValues = currentState.RenderedValues | ||||
| 		} | ||||
| 
 | ||||
| 		if len(finalState.HelmDefaults.PostRendererArgs) > 0 { | ||||
| 			for i := range finalState.Releases { | ||||
| 				if len(finalState.Releases[i].PostRendererArgs) == 0 { | ||||
| 					finalState.Releases[i].PostRendererArgs = finalState.HelmDefaults.PostRendererArgs | ||||
| 				} | ||||
| 			} | ||||
| 			finalState.HelmDefaults.PostRendererArgs = nil | ||||
| 		} | ||||
| 		env = &finalState.Env | ||||
| 
 | ||||
| 		ld.logger.Debugf("merged environment: %v", env) | ||||
|  |  | |||
|  | @ -38,6 +38,7 @@ type destroyConfig struct { | |||
| 	concurrency            int | ||||
| 	interactive            bool | ||||
| 	skipDeps               bool | ||||
| 	skipRefresh            bool | ||||
| 	logger                 *zap.SugaredLogger | ||||
| 	includeTransitiveNeeds bool | ||||
| 	skipCharts             bool | ||||
|  | @ -73,6 +74,10 @@ func (d destroyConfig) SkipDeps() bool { | |||
| 	return d.skipDeps | ||||
| } | ||||
| 
 | ||||
| func (d destroyConfig) SkipRefresh() bool { | ||||
| 	return d.skipRefresh | ||||
| } | ||||
| 
 | ||||
| func (d destroyConfig) IncludeTransitiveNeeds() bool { | ||||
| 	return d.includeTransitiveNeeds | ||||
| } | ||||
|  |  | |||
|  | @ -104,16 +104,16 @@ releases: | |||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				// noop on frontend-v2
 | ||||
| 				{Name: "frontend-v2", Chart: "charts/frontend", Flags: "--detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "frontend-v2", Chart: "charts/frontend", Flags: "--reset-values --detailed-exitcode"}: nil, | ||||
| 				// install frontend-v3
 | ||||
| 				{Name: "frontend-v3", Chart: "charts/frontend", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "frontend-v3", Chart: "charts/frontend", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				// upgrades
 | ||||
| 				{Name: "logging", Chart: "charts/fluent-bit", Flags: "--detailed-exitcode --reset-values"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "front-proxy", Chart: "stable/envoy", Flags: "--detailed-exitcode --reset-values"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "servicemesh", Chart: "charts/istio", Flags: "--detailed-exitcode --reset-values"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "database", Chart: "charts/mysql", Flags: "--detailed-exitcode --reset-values"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "backend-v2", Chart: "charts/backend", Flags: "--detailed-exitcode --reset-values"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "logging", Chart: "charts/fluent-bit", Flags: "--reset-values --detailed-exitcode"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "front-proxy", Chart: "stable/envoy", Flags: "--reset-values --detailed-exitcode"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "servicemesh", Chart: "charts/istio", Flags: "--reset-values --detailed-exitcode"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "database", Chart: "charts/mysql", Flags: "--reset-values --detailed-exitcode"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "backend-v2", Chart: "charts/backend", Flags: "--reset-values --detailed-exitcode"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				// delete frontend-v1 and backend-v1
 | ||||
|  | @ -150,7 +150,7 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: nil, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: ``, | ||||
|  | @ -183,9 +183,9 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists:       map[exectest.ListKey]string{}, | ||||
| 			upgraded:    []exectest.Release{}, | ||||
|  | @ -212,8 +212,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -234,8 +234,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -257,8 +257,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -280,8 +280,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -304,8 +304,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -328,8 +328,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -352,8 +352,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -381,8 +381,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -413,8 +413,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -447,8 +447,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -479,8 +479,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            `in ./helmfile.yaml: release "foo" depends on "bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -514,8 +514,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -549,8 +549,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -581,8 +581,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            `in ./helmfile.yaml: release "bar" depends on "foo" which does not match the selectors. Please add a selector like "--selector name=foo", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -613,8 +613,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -636,7 +636,7 @@ bar 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	mychart2-3.1.0	3.1.0      	defau | |||
| 			loc:   location(), | ||||
| 			flags: flags{skipNeeds: true}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -664,8 +664,8 @@ releases: | |||
| 			selectors:        []string{"app=test"}, | ||||
| 			detailedExitcode: true, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -677,7 +677,7 @@ releases: | |||
| 			loc:   location(), | ||||
| 			flags: flags{skipNeeds: false}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -705,87 +705,20 @@ releases: | |||
| 			selectors:        []string{"app=test"}, | ||||
| 			detailedExitcode: true, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}:       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, | ||||
| 			error:       `in ./helmfile.yaml: release "default/external-secrets" depends on "kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			log: `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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| 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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) matching app=test found in helmfile.yaml | ||||
| 
 | ||||
| err: release "default/external-secrets" depends on "kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 			error:       `in ./helmfile.yaml.gotmpl: release "default/external-secrets" depends on "kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			// see https://github.com/roboll/helmfile/issues/919#issuecomment-549831747
 | ||||
| 			name: "upgrades with bad selector", | ||||
| 			loc:  location(), | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -817,72 +750,6 @@ releases: | |||
| 			error:            "err: no releases found that matches specified selector(app=test_non_existent) and environment(default), in any helmfile", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
| 			log: `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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| 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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 0 release(s) matching app=test_non_existent found in helmfile.yaml | ||||
| 
 | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 		}, | ||||
| 		//
 | ||||
| 		// error cases
 | ||||
|  | @ -904,54 +771,14 @@ releases: | |||
| 			}, | ||||
| 			detailedExitcode: true, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}:                 helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}:                 helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists:       map[exectest.ListKey]string{}, | ||||
| 			upgraded:    []exectest.Release{}, | ||||
| 			deleted:     []exectest.Release{}, | ||||
| 			concurrency: 1, | ||||
| 			error:       `in ./helmfile.yaml: release(s) "foo" depend(s) on an undefined release "bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"?`, | ||||
| 			log: `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: baz | ||||
|  3:   namespace: ns1 | ||||
|  4:   chart: mychart3 | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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: baz | ||||
|  3:   namespace: ns1 | ||||
|  4:   chart: mychart3 | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| err: release(s) "foo" depend(s) on an undefined release "bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"? | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ type diffConfig struct { | |||
| 	validate                bool | ||||
| 	skipCRDs                bool | ||||
| 	skipDeps                bool | ||||
| 	skipRefresh             bool | ||||
| 	includeTests            bool | ||||
| 	skipNeeds               bool | ||||
| 	includeNeeds            bool | ||||
|  | @ -42,6 +43,7 @@ type diffConfig struct { | |||
| 	stripTrailingCR         bool | ||||
| 	interactive             bool | ||||
| 	skipDiffOnInstall       bool | ||||
| 	skipSchemaValidation    bool | ||||
| 	reuseValues             bool | ||||
| 	logger                  *zap.SugaredLogger | ||||
| } | ||||
|  | @ -74,6 +76,10 @@ func (a diffConfig) SkipDeps() bool { | |||
| 	return a.skipDeps | ||||
| } | ||||
| 
 | ||||
| func (a diffConfig) SkipRefresh() bool { | ||||
| 	return a.skipRefresh | ||||
| } | ||||
| 
 | ||||
| func (a diffConfig) IncludeTests() bool { | ||||
| 	return a.includeTests | ||||
| } | ||||
|  | @ -170,6 +176,10 @@ func (a diffConfig) PostRendererArgs() []string { | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a diffConfig) SkipSchemaValidation() bool { | ||||
| 	return a.skipSchemaValidation | ||||
| } | ||||
| 
 | ||||
| func (a diffConfig) SuppressOutputLineRegex() []string { | ||||
| 	return a.suppressOutputLineRegex | ||||
| } | ||||
|  | @ -266,16 +276,16 @@ releases: | |||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				// noop on frontend-v2
 | ||||
| 				{Name: "frontend-v2", Chart: "charts/frontend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "frontend-v2", Chart: "charts/frontend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil, | ||||
| 				// install frontend-v3
 | ||||
| 				{Name: "frontend-v3", Chart: "charts/frontend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "frontend-v3", Chart: "charts/frontend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				// upgrades
 | ||||
| 				{Name: "logging", Chart: "charts/fluent-bit", Flags: "--kube-context default --detailed-exitcode --reset-values"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "front-proxy", Chart: "stable/envoy", Flags: "--kube-context default --detailed-exitcode --reset-values"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "servicemesh", Chart: "charts/istio", Flags: "--kube-context default --detailed-exitcode --reset-values"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "database", Chart: "charts/mysql", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "backend-v2", Chart: "charts/backend", Flags: "--kube-context default --detailed-exitcode --reset-values"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "logging", Chart: "charts/fluent-bit", Flags: "--kube-context default --reset-values --detailed-exitcode"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "front-proxy", Chart: "stable/envoy", Flags: "--kube-context default --reset-values --detailed-exitcode"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "servicemesh", Chart: "charts/istio", Flags: "--kube-context default --reset-values --detailed-exitcode"}:             helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "database", Chart: "charts/mysql", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "backend-v2", Chart: "charts/backend", Flags: "--kube-context default --reset-values --detailed-exitcode"}:            helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				// delete frontend-v1 and backend-v1
 | ||||
|  | @ -312,7 +322,7 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: ``, | ||||
|  | @ -345,9 +355,9 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists:       map[exectest.ListKey]string{}, | ||||
| 			upgraded:    []exectest.Release{}, | ||||
|  | @ -374,8 +384,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -399,8 +409,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context hello/world --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context hello/world --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context hello/world --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context hello/world --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -426,8 +436,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "releaseB", Chart: "mychart2", Flags: "--kube-context arn:aws:eks:us-east-1:1234567890:cluster/myekscluster --namespace namespaceA --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "releaseA", Chart: "mychart1", Flags: "--kube-context arn:aws:eks:us-east-1:1234567890:cluster/myekscluster --namespace namespaceA --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "releaseB", Chart: "mychart2", Flags: "--kube-context arn:aws:eks:us-east-1:1234567890:cluster/myekscluster --namespace namespaceA --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "releaseA", Chart: "mychart1", Flags: "--kube-context arn:aws:eks:us-east-1:1234567890:cluster/myekscluster --namespace namespaceA --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -448,8 +458,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -471,8 +481,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -494,8 +504,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -518,8 +528,36 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "upgrade when ns1/foo needs ns1/bar and ns2/bar is disabled", | ||||
| 			loc:  location(), | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| releases: | ||||
| - name: bar | ||||
|   chart: mychart2 | ||||
|   namespace: ns1 | ||||
| - name: bar | ||||
|   chart: mychart2 | ||||
|   namespace: ns2 | ||||
|   installed: false | ||||
| - name: foo | ||||
|   chart: mychart1 | ||||
|   namespace: ns1 | ||||
|   needs: | ||||
|   - ns1/bar | ||||
| `, | ||||
| 			}, | ||||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -543,8 +581,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 		}, | ||||
|  | @ -567,8 +605,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -596,8 +634,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -628,8 +666,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -662,8 +700,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -694,8 +732,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            `in ./helmfile.yaml: release "default//foo" depends on "default//bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -729,8 +767,8 @@ releases: | |||
| 			}, | ||||
| 			error: "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -764,8 +802,8 @@ releases: | |||
| 			}, | ||||
| 			error: "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -796,8 +834,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            `in ./helmfile.yaml: release "default//bar" depends on "default//foo" which does not match the selectors. Please add a selector like "--selector name=foo", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -831,8 +869,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -866,8 +904,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -898,8 +936,8 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			error:            "Identified at least one change", | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
|  | @ -921,7 +959,7 @@ bar 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	mychart2-3.1.0	3.1.0      	defau | |||
| 			loc:   location(), | ||||
| 			flags: flags{skipNeeds: true}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -949,8 +987,8 @@ releases: | |||
| 			selectors:        []string{"app=test"}, | ||||
| 			detailedExitcode: true, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:       helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{}, | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
|  | @ -962,7 +1000,7 @@ releases: | |||
| 			loc:   location(), | ||||
| 			flags: flags{skipNeeds: false}, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -990,87 +1028,20 @@ releases: | |||
| 			selectors:        []string{"app=test"}, | ||||
| 			detailedExitcode: true, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}:       helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}:       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, | ||||
| 			error:       `in ./helmfile.yaml: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			log: `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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| 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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) matching app=test found in helmfile.yaml | ||||
| 
 | ||||
| err: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 			error:       `in ./helmfile.yaml.gotmpl: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			// see https://github.com/roboll/helmfile/issues/919#issuecomment-549831747
 | ||||
| 			name: "upgrades with bad selector", | ||||
| 			loc:  location(), | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| 				"/path/to/helmfile.yaml.gotmpl": ` | ||||
| {{ $mark := "a" }} | ||||
| 
 | ||||
| releases: | ||||
|  | @ -1102,72 +1073,6 @@ releases: | |||
| 			error:            "err: no releases found that matches specified selector(app=test_non_existent) and environment(default), in any helmfile", | ||||
| 			// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
 | ||||
| 			concurrency: 1, | ||||
| 			log: `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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| 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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 0 release(s) matching app=test_non_existent found in helmfile.yaml | ||||
| 
 | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 		}, | ||||
| 		//
 | ||||
| 		// error cases
 | ||||
|  | @ -1190,51 +1095,14 @@ releases: | |||
| 			detailedExitcode: true, | ||||
| 			selectors:        []string{"name=foo"}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                 helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                 helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists:       map[exectest.ListKey]string{}, | ||||
| 			upgraded:    []exectest.Release{}, | ||||
| 			deleted:     []exectest.Release{}, | ||||
| 			concurrency: 1, | ||||
| 			error:       `in ./helmfile.yaml: release "default//foo" depends on "default//bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`, | ||||
| 			log: `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: mychart3 | ||||
|  4: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8:  | ||||
| 
 | ||||
| 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: mychart3 | ||||
|  4: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 1 release(s) matching name=foo found in helmfile.yaml | ||||
| 
 | ||||
| err: release "default//foo" depends on "default//bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "non-existent release in needs", | ||||
|  | @ -1253,54 +1121,14 @@ releases: | |||
| 			}, | ||||
| 			detailedExitcode: true, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}:                 helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "baz", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                 helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists:       map[exectest.ListKey]string{}, | ||||
| 			upgraded:    []exectest.Release{}, | ||||
| 			deleted:     []exectest.Release{}, | ||||
| 			concurrency: 1, | ||||
| 			error:       `in ./helmfile.yaml: release(s) "default//foo" depend(s) on an undefined release "default//bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"?`, | ||||
| 			log: `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: baz | ||||
|  3:   namespace: ns1 | ||||
|  4:   chart: mychart3 | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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: baz | ||||
|  3:   namespace: ns1 | ||||
|  4:   chart: mychart3 | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| err: release(s) "default//foo" depend(s) on an undefined release "default//bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"? | ||||
| changing working directory back to "/path/to" | ||||
| `, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,12 +17,12 @@ import ( | |||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	HelmRequiredVersion           = "v3.15.4" | ||||
| 	HelmRecommendedVersion        = "v3.16.1" | ||||
| 	HelmDiffRecommendedVersion    = "v3.9.11" | ||||
| 	HelmSecretsRecommendedVersion = "v4.6.0" | ||||
| 	HelmGitRecommendedVersion     = "v0.15.1" | ||||
| 	HelmS3RecommendedVersion      = "v0.16.0" | ||||
| 	HelmRequiredVersion           = "v3.16.4" | ||||
| 	HelmRecommendedVersion        = "v3.17.3" | ||||
| 	HelmDiffRecommendedVersion    = "v3.11.0" | ||||
| 	HelmSecretsRecommendedVersion = "v4.6.3" | ||||
| 	HelmGitRecommendedVersion     = "v1.3.0" | ||||
| 	HelmS3RecommendedVersion      = "v0.16.3" | ||||
| 	HelmInstallCommand            = "https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3" | ||||
| ) | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,27 +8,28 @@ import ( | |||
| 	"path/filepath" | ||||
| 	"regexp" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| func TestDownloadfile(t *testing.T) { | ||||
| 	var ts *httptest.Server | ||||
| 	cases := []struct { | ||||
| 		name        string | ||||
| 		handler     func(http.ResponseWriter, *http.Request) | ||||
| 		url         string | ||||
| 		filepath    string | ||||
| 		wantContent string | ||||
| 		wantError   string | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "download success", | ||||
| 			name: "successful download of file content", | ||||
| 			handler: func(w http.ResponseWriter, r *http.Request) { | ||||
| 				w.WriteHeader(http.StatusOK) | ||||
| 				fmt.Fprint(w, "helmfile") | ||||
| 			}, | ||||
| 			wantContent: "helmfile", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "download 404", | ||||
| 			name: "404 error when file not found", | ||||
| 			handler: func(w http.ResponseWriter, r *http.Request) { | ||||
| 				w.WriteHeader(http.StatusNotFound) | ||||
| 				fmt.Fprint(w, "not found") | ||||
|  | @ -36,7 +37,7 @@ func TestDownloadfile(t *testing.T) { | |||
| 			wantError: "download .*? error, code: 404", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "download 500", | ||||
| 			name: "500 error on server failure", | ||||
| 			handler: func(w http.ResponseWriter, r *http.Request) { | ||||
| 				w.WriteHeader(http.StatusInternalServerError) | ||||
| 				fmt.Fprint(w, "server error") | ||||
|  | @ -44,14 +45,16 @@ func TestDownloadfile(t *testing.T) { | |||
| 			wantError: "download .*? error, code: 500", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "download path error", | ||||
| 			name: "error due to invalid file path", | ||||
| 			handler: func(w http.ResponseWriter, r *http.Request) { | ||||
| 				w.WriteHeader(http.StatusOK) | ||||
| 				fmt.Fprint(w, "helmfile") | ||||
| 			}, | ||||
| 			filepath:  "abc/down.txt", | ||||
| 			wantError: "open .*? no such file or directory", | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, c := range cases { | ||||
| 		t.Run(c.name, func(t *testing.T) { | ||||
| 			dir := t.TempDir() | ||||
|  | @ -60,30 +63,24 @@ func TestDownloadfile(t *testing.T) { | |||
| 				downfile = filepath.Join(dir, c.filepath) | ||||
| 			} | ||||
| 
 | ||||
| 			ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | ||||
| 				c.handler(w, r) | ||||
| 			})) | ||||
| 			ts := httptest.NewServer(http.HandlerFunc(c.handler)) | ||||
| 			defer ts.Close() | ||||
| 			url := ts.URL | ||||
| 			if c.url != "" { | ||||
| 				url = c.url | ||||
| 			} | ||||
| 			err := downloadfile(downfile, url) | ||||
| 
 | ||||
| 			err := downloadfile(downfile, ts.URL) | ||||
| 
 | ||||
| 			if c.wantError != "" { | ||||
| 				if err == nil { | ||||
| 					t.Errorf("download got no error, want error: %v", c.wantError) | ||||
| 				} else if matched, regexErr := regexp.MatchString(c.wantError, err.Error()); regexErr != nil || !matched { | ||||
| 					t.Errorf("download got error: %v, want error: %v", err, c.wantError) | ||||
| 				assert.Error(t, err) | ||||
| 				if err != nil { | ||||
| 					matched, regexErr := regexp.MatchString(c.wantError, err.Error()) | ||||
| 					assert.NoError(t, regexErr) | ||||
| 					assert.True(t, matched, "expected error message to match regex: %s", c.wantError) | ||||
| 				} | ||||
| 				return | ||||
| 			} | ||||
| 
 | ||||
| 			content, err := os.ReadFile(downfile) | ||||
| 			if err != nil { | ||||
| 				t.Errorf("read download file error: %v", err) | ||||
| 			} | ||||
| 			if string(content) != c.wantContent { | ||||
| 				t.Errorf("download file content got: %v, want content: %v", string(content), c.wantContent) | ||||
| 			} | ||||
| 			assert.NoError(t, err) | ||||
| 			assert.Equal(t, c.wantContent, string(content), "unexpected content in downloaded file") | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -7,6 +7,8 @@ import ( | |||
| 	"sort" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/fatih/color" | ||||
| 
 | ||||
| 	"github.com/helmfile/helmfile/pkg/helmexec" | ||||
| 	"github.com/helmfile/helmfile/pkg/state" | ||||
| ) | ||||
|  | @ -139,17 +141,6 @@ func (r *Run) Repos(c ReposConfigProvider) error { | |||
| 	return r.ctx.SyncReposOnce(r.state, r.helm) | ||||
| } | ||||
| 
 | ||||
| // TODO: Remove this function once Helmfile v0.x
 | ||||
| func (r *Run) DeprecatedSyncCharts(c DeprecatedChartsConfigProvider) []error { | ||||
| 	st := r.state | ||||
| 	helm := r.helm | ||||
| 
 | ||||
| 	affectedReleases := state.AffectedReleases{} | ||||
| 	errs := st.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency()) | ||||
| 	affectedReleases.DisplayAffectedReleases(c.Logger()) | ||||
| 	return errs | ||||
| } | ||||
| 
 | ||||
| func (r *Run) diff(triggerCleanupEvent bool, detailedExitCode bool, c DiffConfigProvider, diffOpts *state.DiffOpts) (*string, map[string]state.ReleaseSpec, map[string]state.ReleaseSpec, []error) { | ||||
| 	st := r.state | ||||
| 	helm := r.helm | ||||
|  | @ -220,7 +211,11 @@ func (r *Run) diff(triggerCleanupEvent bool, detailedExitCode bool, c DiffConfig | |||
| 		names = append(names, fmt.Sprintf("  %s (%s) UPDATED", r.Name, r.Chart)) | ||||
| 	} | ||||
| 	for _, r := range releasesToBeDeleted { | ||||
| 		names = append(names, fmt.Sprintf("  %s (%s) DELETED", r.Name, r.Chart)) | ||||
| 		releaseToBeDeleted := fmt.Sprintf("  %s (%s) DELETED", r.Name, r.Chart) | ||||
| 		if c.Color() { | ||||
| 			releaseToBeDeleted = color.RedString(releaseToBeDeleted) | ||||
| 		} | ||||
| 		names = append(names, releaseToBeDeleted) | ||||
| 	} | ||||
| 	// Make the output deterministic for testing purpose
 | ||||
| 	sort.Strings(names) | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 0 release(s) matching app=test_non_existent found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 2 release(s) matching app=test found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 2 release(s) matching app=test found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 1 release(s) matching name=test2 found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 1 release(s) matching name=test3 found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 1 release(s) matching name=test2 found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 1 release(s) matching name=test3 found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 2 release(s) matching app=test found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 1 release(s) matching name=test3 found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 2 release(s) matching app=test found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,34 +1,5 @@ | |||
| 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: a | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: default | ||||
|  5: - name: b | ||||
|  6:   chart: incubator/raw | ||||
|  7:   namespace: default | ||||
|  8:  | ||||
| 
 | ||||
| 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: a | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: default | ||||
|  5: - name: b | ||||
|  6:   chart: incubator/raw | ||||
|  7:   namespace: default | ||||
|  8:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 1 release(s) matching name=a found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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: a | ||||
|  3:   chart: incubator/raw | ||||
|  4:   installed: false | ||||
|  5:   namespace: default | ||||
|  6: - name: b | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: default | ||||
|  9:  | ||||
| 
 | ||||
| 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: a | ||||
|  3:   chart: incubator/raw | ||||
|  4:   installed: false | ||||
|  5:   namespace: default | ||||
|  6: - name: b | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: default | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 1 release(s) matching name=a found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,106 +1,5 @@ | |||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| 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: logging | ||||
|  3:   chart: incubator/raw | ||||
|  4:   namespace: kube-system | ||||
|  5:  | ||||
|  6: - name: kubernetes-external-secrets | ||||
|  7:   chart: incubator/raw | ||||
|  8:   namespace: kube-system | ||||
|  9:   needs: | ||||
| 10:   - kube-system/logging | ||||
| 11:  | ||||
| 12: - name: external-secrets | ||||
| 13:   chart: incubator/raw | ||||
| 14:   namespace: default | ||||
| 15:   labels: | ||||
| 16:     app: test | ||||
| 17:   needs: | ||||
| 18:   - kube-system/kubernetes-external-secrets | ||||
| 19:  | ||||
| 20: - name: my-release | ||||
| 21:   chart: incubator/raw | ||||
| 22:   namespace: default | ||||
| 23:   labels: | ||||
| 24:     app: test | ||||
| 25:   needs: | ||||
| 26:   - default/external-secrets | ||||
| 27:  | ||||
| 28:  | ||||
| 29: # Disabled releases are treated as missing | ||||
| 30: - name: disabled | ||||
| 31:   chart: incubator/raw | ||||
| 32:   namespace: kube-system | ||||
| 33:   installed: false | ||||
| 34:  | ||||
| 35: - name: test2 | ||||
| 36:   chart: incubator/raw | ||||
| 37:   needs: | ||||
| 38:   - kube-system/disabled | ||||
| 39:  | ||||
| 40: - name: test3 | ||||
| 41:   chart: incubator/raw | ||||
| 42:   needs: | ||||
| 43:   - test2 | ||||
| 44:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs | ||||
| 2 release(s) matching app=test found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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:   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[]} | ||||
| 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:   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 | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,18 @@ | |||
| processing file "helmfile.yaml" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| merged environment: &{default  map[] map[]} | ||||
| 3 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| processing 2 groups of releases in this order: | ||||
| GROUP RELEASES | ||||
| 1     default/ns1/bar | ||||
| 2     default/ns1/foo | ||||
| 
 | ||||
| processing releases in group 1/2: default/ns1/bar | ||||
| processing releases in group 2/2: default/ns1/foo | ||||
| Affected releases are: | ||||
|   bar (mychart2) DELETED | ||||
|   bar (mychart2) UPDATED | ||||
|   foo (mychart1) UPDATED | ||||
| 
 | ||||
| changing working directory back to "/path/to" | ||||
|  | @ -1,36 +1,5 @@ | |||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,40 +1,6 @@ | |||
| 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:   installed: false | ||||
|  5:   needs: | ||||
|  6:   - foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   installed: false | ||||
| 10:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5:   needs: | ||||
|  6:   - foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   installed: false | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| Affected releases are: | ||||
|  |  | |||
|  | @ -1,40 +1,6 @@ | |||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   installed: false | ||||
|  8:   needs: | ||||
|  9:   - bar | ||||
| 10:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   installed: false | ||||
|  8:   needs: | ||||
|  9:   - bar | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| Affected releases are: | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: bar | ||||
|  6:   chart: mychart2 | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: bar | ||||
|  6:   chart: mychart2 | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: bar | ||||
|  6:   chart: mychart2 | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: bar | ||||
|  6:   chart: mychart2 | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: bar | ||||
|  6:   chart: mychart2 | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: bar | ||||
|  6:   chart: mychart2 | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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:   needs: | ||||
|  6:   - ns1/foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   namespace: ns1 | ||||
| 10:  | ||||
| 
 | ||||
| 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:   needs: | ||||
|  6:   - ns1/foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   namespace: ns1 | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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: baz | ||||
|  3:   chart: mychart3 | ||||
|  4: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8: - name: bar | ||||
|  9:   chart: mychart2 | ||||
| 10:  | ||||
| 
 | ||||
| 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: baz | ||||
|  3:   chart: mychart3 | ||||
|  4: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8: - name: bar | ||||
|  9:   chart: mychart2 | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 3 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,8 @@ | |||
| processing file "helmfile.yaml" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| err: release(s) "default//foo" depend(s) on an undefined release "default//bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"? | ||||
| changing working directory back to "/path/to" | ||||
|  | @ -1,36 +1,5 @@ | |||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,128 +1,6 @@ | |||
| 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: database | ||||
|  3:   chart: charts/mysql | ||||
|  4:   needs: | ||||
|  5:   - logging | ||||
|  6: - name: frontend-v1 | ||||
|  7:   chart: charts/frontend | ||||
|  8:   installed: false | ||||
|  9:   needs: | ||||
| 10:   - servicemesh | ||||
| 11:   - logging | ||||
| 12:   - backend-v1 | ||||
| 13: - name: frontend-v2 | ||||
| 14:   chart: charts/frontend | ||||
| 15:   needs: | ||||
| 16:   - servicemesh | ||||
| 17:   - logging | ||||
| 18:   - backend-v2 | ||||
| 19: - name: frontend-v3 | ||||
| 20:   chart: charts/frontend | ||||
| 21:   needs: | ||||
| 22:   - servicemesh | ||||
| 23:   - logging | ||||
| 24:   - backend-v2 | ||||
| 25: - name: backend-v1 | ||||
| 26:   chart: charts/backend | ||||
| 27:   installed: false | ||||
| 28:   needs: | ||||
| 29:   - servicemesh | ||||
| 30:   - logging | ||||
| 31:   - database | ||||
| 32:   - anotherbackend | ||||
| 33: - name: backend-v2 | ||||
| 34:   chart: charts/backend | ||||
| 35:   needs: | ||||
| 36:   - servicemesh | ||||
| 37:   - logging | ||||
| 38:   - database | ||||
| 39:   - anotherbackend | ||||
| 40: - name: anotherbackend | ||||
| 41:   chart: charts/anotherbackend | ||||
| 42:   needs: | ||||
| 43:   - servicemesh | ||||
| 44:   - logging | ||||
| 45:   - database | ||||
| 46: - name: servicemesh | ||||
| 47:   chart: charts/istio | ||||
| 48:   needs: | ||||
| 49:   - logging | ||||
| 50: - name: logging | ||||
| 51:   chart: charts/fluent-bit | ||||
| 52: - name: front-proxy | ||||
| 53:   chart: stable/envoy | ||||
| 54:  | ||||
| 
 | ||||
| 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: database | ||||
|  3:   chart: charts/mysql | ||||
|  4:   needs: | ||||
|  5:   - logging | ||||
|  6: - name: frontend-v1 | ||||
|  7:   chart: charts/frontend | ||||
|  8:   installed: false | ||||
|  9:   needs: | ||||
| 10:   - servicemesh | ||||
| 11:   - logging | ||||
| 12:   - backend-v1 | ||||
| 13: - name: frontend-v2 | ||||
| 14:   chart: charts/frontend | ||||
| 15:   needs: | ||||
| 16:   - servicemesh | ||||
| 17:   - logging | ||||
| 18:   - backend-v2 | ||||
| 19: - name: frontend-v3 | ||||
| 20:   chart: charts/frontend | ||||
| 21:   needs: | ||||
| 22:   - servicemesh | ||||
| 23:   - logging | ||||
| 24:   - backend-v2 | ||||
| 25: - name: backend-v1 | ||||
| 26:   chart: charts/backend | ||||
| 27:   installed: false | ||||
| 28:   needs: | ||||
| 29:   - servicemesh | ||||
| 30:   - logging | ||||
| 31:   - database | ||||
| 32:   - anotherbackend | ||||
| 33: - name: backend-v2 | ||||
| 34:   chart: charts/backend | ||||
| 35:   needs: | ||||
| 36:   - servicemesh | ||||
| 37:   - logging | ||||
| 38:   - database | ||||
| 39:   - anotherbackend | ||||
| 40: - name: anotherbackend | ||||
| 41:   chart: charts/anotherbackend | ||||
| 42:   needs: | ||||
| 43:   - servicemesh | ||||
| 44:   - logging | ||||
| 45:   - database | ||||
| 46: - name: servicemesh | ||||
| 47:   chart: charts/istio | ||||
| 48:   needs: | ||||
| 49:   - logging | ||||
| 50: - name: logging | ||||
| 51:   chart: charts/fluent-bit | ||||
| 52: - name: front-proxy | ||||
| 53:   chart: stable/envoy | ||||
| 54:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs | ||||
| 10 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| processing 5 groups of releases in this order: | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| processing file "helmfile.yaml" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| merged environment: &{default  map[] map[]} | ||||
| 1 release(s) matching name=foo found in helmfile.yaml | ||||
| 
 | ||||
| err: release "default//foo" depends on "default//bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies | ||||
| changing working directory back to "/path/to" | ||||
|  | @ -1,34 +1,5 @@ | |||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   needs: | ||||
|  7:   - foo | ||||
|  8:  | ||||
| 
 | ||||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   needs: | ||||
|  7:   - foo | ||||
|  8:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,34 +1,5 @@ | |||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   needs: | ||||
|  7:   - foo | ||||
|  8:  | ||||
| 
 | ||||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   needs: | ||||
|  7:   - foo | ||||
|  8:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,34 +1,5 @@ | |||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8:  | ||||
| 
 | ||||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,34 +1,5 @@ | |||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8:  | ||||
| 
 | ||||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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: helmDefaults: | ||||
|  2:   kubeContext: hello/world | ||||
|  3: releases: | ||||
|  4: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6: - name: foo | ||||
|  7:   chart: mychart1 | ||||
|  8:   needs: | ||||
|  9:   - bar | ||||
| 10:  | ||||
| 
 | ||||
| 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: helmDefaults: | ||||
|  2:   kubeContext: hello/world | ||||
|  3: releases: | ||||
|  4: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6: - name: foo | ||||
|  7:   chart: mychart1 | ||||
|  8:   needs: | ||||
|  9:   - bar | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,42 +1,5 @@ | |||
| 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: releaseA | ||||
|  3:   chart: mychart1 | ||||
|  4:   namespace: namespaceA | ||||
|  5:   kubeContext: arn:aws:eks:us-east-1:1234567890:cluster/myekscluster | ||||
|  6: - name: releaseB | ||||
|  7:   chart: mychart2 | ||||
|  8:   namespace: namespaceA | ||||
|  9:   kubeContext: arn:aws:eks:us-east-1:1234567890:cluster/myekscluster | ||||
| 10:   needs: | ||||
| 11:     - arn:aws:eks:us-east-1:1234567890:cluster/myekscluster/namespaceA/releaseA | ||||
| 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: releaseA | ||||
|  3:   chart: mychart1 | ||||
|  4:   namespace: namespaceA | ||||
|  5:   kubeContext: arn:aws:eks:us-east-1:1234567890:cluster/myekscluster | ||||
|  6: - name: releaseB | ||||
|  7:   chart: mychart2 | ||||
|  8:   namespace: namespaceA | ||||
|  9:   kubeContext: arn:aws:eks:us-east-1:1234567890:cluster/myekscluster | ||||
| 10:   needs: | ||||
| 11:     - arn:aws:eks:us-east-1:1234567890:cluster/myekscluster/namespaceA/releaseA | ||||
| 12:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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:   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[]} | ||||
| 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:   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 | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,33 @@ | |||
| processing file "helmfile.yaml.gotmpl" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default  map[] map[]}, overrode=<nil> | ||||
| rendering result of "helmfile.yaml.gotmpl.part.0": | ||||
|  0:  | ||||
|  1:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 0 release(s) matching app=test_non_existent found in helmfile.yaml.gotmpl | ||||
| 
 | ||||
| changing working directory back to "/path/to" | ||||
							
								
								
									
										34
									
								
								pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=false
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										34
									
								
								pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=false
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,34 @@ | |||
| processing file "helmfile.yaml.gotmpl" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default  map[] map[]}, overrode=<nil> | ||||
| rendering result of "helmfile.yaml.gotmpl.part.0": | ||||
|  0:  | ||||
|  1:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) matching app=test found in helmfile.yaml.gotmpl | ||||
| 
 | ||||
| err: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies | ||||
| changing working directory back to "/path/to" | ||||
|  | @ -1,39 +1,7 @@ | |||
| processing file "helmfile.yaml" in directory "." | ||||
| processing file "helmfile.yaml.gotmpl" 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:  | ||||
|  2:  | ||||
|  3: releases: | ||||
|  4: - name: kubernetes-external-secrets | ||||
|  5:   chart: incubator/raw | ||||
|  6:   namespace: kube-system | ||||
|  7:  | ||||
|  8: - name: external-secrets | ||||
|  9:   chart: incubator/raw | ||||
| 10:   namespace: default | ||||
| 11:   labels: | ||||
| 12:     app: test | ||||
| 13:   needs: | ||||
| 14:   - kube-system/kubernetes-external-secrets | ||||
| 15:  | ||||
| 16: - name: my-release | ||||
| 17:   chart: incubator/raw | ||||
| 18:   namespace: default | ||||
| 19:   labels: | ||||
| 20:     app: test | ||||
| 21:   needs: | ||||
| 22:   - default/external-secrets | ||||
| 23:  | ||||
| 
 | ||||
| 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": | ||||
| rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default  map[] map[]}, overrode=<nil> | ||||
| rendering result of "helmfile.yaml.gotmpl.part.0": | ||||
|  0:  | ||||
|  1:  | ||||
|  2:  | ||||
|  | @ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0": | |||
| 23:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) matching app=test found in helmfile.yaml | ||||
| 2 release(s) matching app=test found in helmfile.yaml.gotmpl | ||||
| 
 | ||||
| processing 2 groups of releases in this order: | ||||
| GROUP RELEASES | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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:   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[]} | ||||
| 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:   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 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,40 +1,6 @@ | |||
| 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:   installed: false | ||||
|  5:   needs: | ||||
|  6:   - foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   installed: false | ||||
| 10:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5:   needs: | ||||
|  6:   - foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   installed: false | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| Affected releases are: | ||||
|  |  | |||
|  | @ -1,40 +1,6 @@ | |||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   installed: false | ||||
|  8:   needs: | ||||
|  9:   - bar | ||||
| 10:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: foo | ||||
|  6:   chart: mychart1 | ||||
|  7:   installed: false | ||||
|  8:   needs: | ||||
|  9:   - bar | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| Affected releases are: | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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:   installed: false | ||||
|  5: - name: bar | ||||
|  6:   chart: mychart2 | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| 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:   installed: false | ||||
|  5: - name: bar | ||||
|  6:   chart: mychart2 | ||||
|  7:   needs: | ||||
|  8:   - foo | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
|  |  | |||
|  | @ -1,36 +1,5 @@ | |||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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:   needs: | ||||
|  6:   - ns1/foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   namespace: ns1 | ||||
| 10:  | ||||
| 
 | ||||
| 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:   needs: | ||||
|  6:   - ns1/foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   namespace: ns1 | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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:   needs: | ||||
|  6:   - ns1/foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   namespace: ns1 | ||||
| 10:  | ||||
| 
 | ||||
| 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:   needs: | ||||
|  6:   - ns1/foo | ||||
|  7: - name: foo | ||||
|  8:   chart: mychart1 | ||||
|  9:   namespace: ns1 | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,38 +1,5 @@ | |||
| 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: baz | ||||
|  3:   chart: mychart3 | ||||
|  4: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8: - name: bar | ||||
|  9:   chart: mychart2 | ||||
| 10:  | ||||
| 
 | ||||
| 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: baz | ||||
|  3:   chart: mychart3 | ||||
|  4: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   needs: | ||||
|  7:   - bar | ||||
|  8: - name: bar | ||||
|  9:   chart: mychart2 | ||||
| 10:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 3 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,8 @@ | |||
| processing file "helmfile.yaml" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| err: release(s) "foo" depend(s) on an undefined release "bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"? | ||||
| changing working directory back to "/path/to" | ||||
|  | @ -1,36 +1,5 @@ | |||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| 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: - name: foo | ||||
|  5:   chart: mychart1 | ||||
|  6:   installed: false | ||||
|  7:   needs: | ||||
|  8:   - bar | ||||
|  9:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,128 +1,6 @@ | |||
| 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: database | ||||
|  3:   chart: charts/mysql | ||||
|  4:   needs: | ||||
|  5:   - logging | ||||
|  6: - name: frontend-v1 | ||||
|  7:   chart: charts/frontend | ||||
|  8:   installed: false | ||||
|  9:   needs: | ||||
| 10:   - servicemesh | ||||
| 11:   - logging | ||||
| 12:   - backend-v1 | ||||
| 13: - name: frontend-v2 | ||||
| 14:   chart: charts/frontend | ||||
| 15:   needs: | ||||
| 16:   - servicemesh | ||||
| 17:   - logging | ||||
| 18:   - backend-v2 | ||||
| 19: - name: frontend-v3 | ||||
| 20:   chart: charts/frontend | ||||
| 21:   needs: | ||||
| 22:   - servicemesh | ||||
| 23:   - logging | ||||
| 24:   - backend-v2 | ||||
| 25: - name: backend-v1 | ||||
| 26:   chart: charts/backend | ||||
| 27:   installed: false | ||||
| 28:   needs: | ||||
| 29:   - servicemesh | ||||
| 30:   - logging | ||||
| 31:   - database | ||||
| 32:   - anotherbackend | ||||
| 33: - name: backend-v2 | ||||
| 34:   chart: charts/backend | ||||
| 35:   needs: | ||||
| 36:   - servicemesh | ||||
| 37:   - logging | ||||
| 38:   - database | ||||
| 39:   - anotherbackend | ||||
| 40: - name: anotherbackend | ||||
| 41:   chart: charts/anotherbackend | ||||
| 42:   needs: | ||||
| 43:   - servicemesh | ||||
| 44:   - logging | ||||
| 45:   - database | ||||
| 46: - name: servicemesh | ||||
| 47:   chart: charts/istio | ||||
| 48:   needs: | ||||
| 49:   - logging | ||||
| 50: - name: logging | ||||
| 51:   chart: charts/fluent-bit | ||||
| 52: - name: front-proxy | ||||
| 53:   chart: stable/envoy | ||||
| 54:  | ||||
| 
 | ||||
| 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: database | ||||
|  3:   chart: charts/mysql | ||||
|  4:   needs: | ||||
|  5:   - logging | ||||
|  6: - name: frontend-v1 | ||||
|  7:   chart: charts/frontend | ||||
|  8:   installed: false | ||||
|  9:   needs: | ||||
| 10:   - servicemesh | ||||
| 11:   - logging | ||||
| 12:   - backend-v1 | ||||
| 13: - name: frontend-v2 | ||||
| 14:   chart: charts/frontend | ||||
| 15:   needs: | ||||
| 16:   - servicemesh | ||||
| 17:   - logging | ||||
| 18:   - backend-v2 | ||||
| 19: - name: frontend-v3 | ||||
| 20:   chart: charts/frontend | ||||
| 21:   needs: | ||||
| 22:   - servicemesh | ||||
| 23:   - logging | ||||
| 24:   - backend-v2 | ||||
| 25: - name: backend-v1 | ||||
| 26:   chart: charts/backend | ||||
| 27:   installed: false | ||||
| 28:   needs: | ||||
| 29:   - servicemesh | ||||
| 30:   - logging | ||||
| 31:   - database | ||||
| 32:   - anotherbackend | ||||
| 33: - name: backend-v2 | ||||
| 34:   chart: charts/backend | ||||
| 35:   needs: | ||||
| 36:   - servicemesh | ||||
| 37:   - logging | ||||
| 38:   - database | ||||
| 39:   - anotherbackend | ||||
| 40: - name: anotherbackend | ||||
| 41:   chart: charts/anotherbackend | ||||
| 42:   needs: | ||||
| 43:   - servicemesh | ||||
| 44:   - logging | ||||
| 45:   - database | ||||
| 46: - name: servicemesh | ||||
| 47:   chart: charts/istio | ||||
| 48:   needs: | ||||
| 49:   - logging | ||||
| 50: - name: logging | ||||
| 51:   chart: charts/fluent-bit | ||||
| 52: - name: front-proxy | ||||
| 53:   chart: stable/envoy | ||||
| 54:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs | ||||
| 10 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| processing 5 groups of releases in this order: | ||||
|  |  | |||
|  | @ -1,34 +1,5 @@ | |||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   needs: | ||||
|  7:   - foo | ||||
|  8:  | ||||
| 
 | ||||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   needs: | ||||
|  7:   - foo | ||||
|  8:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,34 +1,5 @@ | |||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   needs: | ||||
|  7:   - foo | ||||
|  8:  | ||||
| 
 | ||||
| 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: - name: bar | ||||
|  5:   chart: mychart2 | ||||
|  6:   needs: | ||||
|  7:   - foo | ||||
|  8:  | ||||
| 
 | ||||
| merged environment: &{default  map[] map[]} | ||||
| 2 release(s) found in helmfile.yaml | ||||
| 
 | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue