helmfile/helmfile

Issue with release dependencies with `needs` and multiple files

kpawlik-splunk opened this issue · 14 comments

Operating system

MacOS 13.6.1

Helmfile Version

v0.158.1

Helm Version

v3.13.2

Bug description

helmfile fails to find release dependencies when using multiple files, using attached sample files:

$ helmfile -f helmfile-all.yaml list
NAME     	NAMESPACE	ENABLED	INSTALLED	LABELS	CHART                      	VERSION
release-1	default  	true   	true     	      	ingress-nginx/ingress-nginx	4.8.1
release-2	default  	true   	true     	      	ingress-nginx/ingress-nginx	4.8.1
$ helmfile -f helmfile-all.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile1003781602/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile1003781602/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Linting release=release-2, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile1003781602/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile1003781602/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

But when the release-1 is moved to a separate file:

$ helmfile -f helmfile-split.yaml list
NAME     	NAMESPACE	ENABLED	INSTALLED	LABELS	CHART                      	VERSION
release-1	default  	true   	true     	      	ingress-nginx/ingress-nginx	4.8.1
release-2	default  	true   	true     	      	ingress-nginx/ingress-nginx	4.8.1
$ helmfile -f helmfile-split.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile1196831173/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile1196831173/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Fetching ingress-nginx/ingress-nginx
in ./helmfile-split.yaml: release(s) "default/release-2" depend(s) on an undefined release "default/release-1". Perhaps you made a typo in "needs" or forgot defining a release named "release-1" with appropriate "namespace" and "kubeContext"?

Example helmfile.yaml

helmfile-all.yaml:

repositories:
  - name: ingress-nginx
    url: https://kubernetes.github.io/ingress-nginx

releases:
  - chart: ingress-nginx/ingress-nginx
    version: 4.8.1
    name: release-1
    namespace: default
  - chart: ingress-nginx/ingress-nginx
    version: 4.8.1
    name: release-2
    namespace: default
    needs:
      - release-1

helmfile-split.yaml:

repositories:
  - name: ingress-nginx
    url: https://kubernetes.github.io/ingress-nginx

helmfiles:
  - helmfile-release-1.yaml

releases:
  - chart: ingress-nginx/ingress-nginx
    version: 4.8.1
    name: release-2
    namespace: default
    needs:
      - release-1

helmfile-release-1.yaml:

repositories:
  - name: ingress-nginx
    url: https://kubernetes.github.io/ingress-nginx

releases:
  - chart: ingress-nginx/ingress-nginx
    version: 4.8.1
    name: release-1
    namespace: default

Error message you've seen (if any)

in ./helmfile-split.yaml: release(s) "default/release-2" depend(s) on an undefined release "default/release-1". Perhaps you made a typo in "needs" or forgot defining a release named "release-1" with appropriate "namespace" and "kubeContext"?

Steps to reproduce

Given in the issue description, but basically helmfile -f helmfile-split.yaml lint.

Working Helmfile Version

(none)

Relevant discussion

No response

Still occurring with:

$ helmfile version

▓▓▓ helmfile

  Version            v0.159.0
  Git Commit         "brew"
  Build Date         24 Nov 23 01:42 CET (3 days ago)
  Commit Date        24 Nov 23 01:42 CET (3 days ago)
  Dirty Build        no
  Go version         1.21.4
  Compiler           gc
  Platform           darwin/amd64
$ helmfile -f helmfile-all.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile3746902576/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile3746902576/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Linting release=release-2, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile3746902576/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile3746902576/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

$ helmfile -f helmfile-split.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile1230466951/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile1230466951/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Fetching ingress-nginx/ingress-nginx
in ./helmfile-split.yaml: release(s) "default/release-2" depend(s) on an undefined release "default/release-1". Perhaps you made a typo in "needs" or forgot defining a release named "release-1" with appropriate "namespace" and "kubeContext"?

@kpawlik-splunk thanks for your issue.

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

/remove wontfix

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

Tested with latest version and this is still the case:

$ helmfile version

▓▓▓ helmfile

  Version            v0.160.0
  Git Commit         "brew"
  Build Date         22 Dec 23 22:36 CET (1 week ago)
  Commit Date        22 Dec 23 22:36 CET (1 week ago)
  Dirty Build        no
  Go version         1.21.5
  Compiler           gc
  Platform           darwin/amd64
$ helmfile -f helmfile-all.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile779621146/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile779621146/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Linting release=release-2, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile779621146/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile779621146/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed
$ helmfile -f helmfile-split.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile3910696982/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile3910696982/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Fetching ingress-nginx/ingress-nginx
in ./helmfile-split.yaml: release(s) "default/release-2" depend(s) on an undefined release "default/release-1". Perhaps you made a typo in "needs" or forgot defining a release named "release-1" with appropriate "namespace" and "kubeContext"?

I have the same problem, using version v0.160.0. Using helmfiles: to include multiple releases it looks like need is not able to find the other releases.

Also an issue if using --selector. Even if the selected releases have no needs, the needs in an unselected release still causes it to fail with the:

release(s) "default/release-2" depend(s) on an undefined release "default/release-1". Perhaps you made a typo in "needs" or forgot defining a release named "release-1" with appropriate "namespace" and "kubeContext"?

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

Tested with latest version:

$ helmfile version

▓▓▓ helmfile

  Version            v0.161.0
  Git Commit         "brew"
  Build Date         24 Jan 24 02:01 CET (2 weeks ago)
  Commit Date        24 Jan 24 02:01 CET (2 weeks ago)
  Dirty Build        no
  Go version         1.21.6
  Compiler           gc
  Platform           darwin/amd64
$ helmfile -f helmfile-all.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile2024464535/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile2024464535/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Linting release=release-2, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile2024464535/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile2024464535/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

$ helmfile -f helmfile-split.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile180109289/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile180109289/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Fetching ingress-nginx/ingress-nginx
in ./helmfile-split.yaml: release(s) "default/release-2" depend(s) on an undefined release "default/release-1". Perhaps you made a typo in "needs" or forgot defining a release named "release-1" with appropriate "namespace" and "kubeContext"?

Someone know how fix this issue ?

(preventing wontfix label from being added)

$ helmfile version

▓▓▓ helmfile

  Version            v0.162.0
  Git Commit         "brew"
  Build Date         18 Feb 24 05:10 CET (1 week ago)
  Commit Date        18 Feb 24 05:10 CET (1 week ago)
  Dirty Build        no
  Go version         1.22.0
  Compiler           gc
  Platform           darwin/amd64
$ helmfile -f helmfile-all.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile4086749705/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile4086749705/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Linting release=release-2, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile4086749705/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile4086749705/default/release-2/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

$ helmfile -f helmfile-split.yaml lint
Adding repo ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories

Fetching ingress-nginx/ingress-nginx
Linting release=release-1, chart=/var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile555423063/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx
==> Linting /var/folders/rh/z33gzdts36bb722jk1wmwdwr0000gn/T/helmfile555423063/default/release-1/ingress-nginx/ingress-nginx/4.8.1/ingress-nginx

1 chart(s) linted, 0 chart(s) failed

Fetching ingress-nginx/ingress-nginx
in ./helmfile-split.yaml: release(s) "default/release-2" depend(s) on an undefined release "default/release-1". Perhaps you made a typo in "needs" or forgot defining a release named "release-1" with appropriate "namespace" and "kubeContext"?

@fafarun I am so busy recently. PR is welcome. thanks so much.

@fafarun I'll try to work on this. but maybe in the future.