kustomize icon indicating copy to clipboard operation
kustomize copied to clipboard

helmGlobals is not used when HelmChartInflationGenerator is used in generators field

Open LarsStegman opened this issue 9 months ago • 5 comments

What happened?

I am having trouble getting my deployments of a Helm chart to multiple sites/deployments working.

The setup

/
├─ charts/
│  ├─ my-app/
├─ my-app/
│  ├─ helm/
│  │  ├─ helm.yaml
│  │  ├─ kustomization.yaml
│  ├─ overlays/
│  │  ├─ site1/
│  │  │  ├─ common/
│  │  │  │  ├─ kustomization.yaml
│  │  │  ├─ deployments/
│  │  │  │  ├─ deployment1/
│  │  │  │  │  ├─ kustomization.yaml
│  │  │  │  ├─ kustomization.yaml

I have this structure because I need to deploy my app to multiple sites. Some of the values need to be the same across all sites, like the application version, for example. Some of the values need to be the same across 1 site, like some credentials/domain names. Some of the values are specific per deployment, like the name.

This is the contents of the /my-app/helm folder. It is used as the base
config for all deployments.

# /my-app/helm/helm.yaml
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
  name: my-app
name: my-app
# /my-app/helm/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - helm.yaml

Then, per site I kustomize the HelmChartInflationGenerator from /my-app/helm/helm.yaml to provide some valuesInline.

# /my-app/overlays/site1/common/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../../helm

patches:
  - patch: |-
      apiVersion: builtin
      kind: HelmChartInflationGenerator
      metadata:
        name: my-app
      valuesInline:
        k8sSecret:
          secretName: my-secret
        outputs:
          - url: "http://database.site1.company.global"
            tokenSecretKey: write1
            db: "db1"

Then in /my-app/overlays/site1/deployments/deployment1/kustomization.yaml I kustomize the same HelmChartInflationGenerator another time to add additional valuesInline values.

# /my-app/overlays/site1/deployments/deployment1/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../common-config

patches:
  - patch: |-
      apiVersion: builtin
      kind: HelmChartInflationGenerator
      metadata:
        name: my-app
      releaseName: deployment1-my-app
      valuesInline:
        requireActiveAccessToSensors: true
        socketListeners:
          - protocol: UDP
            port: 2000
        appConfig: |
          [config]
            key1 = "value1"

Finally, I collect all the different deployments from the site in /my-app/overlays/site1/deployments/kustomization.yaml.

# /my-app/overlays/site1/deployments/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
helmGlobals:
  chartHome: ../../../charts

generators:
  - ./deployment1

The problem

When I try to build this kustomization I get the following:

> cd my-app/overlays/site1/deployments
> kustomize build . --enable-helm --load-restrictor LoadRestrictionsNone
Error: no repo specified for pull, no chart found at ''

It looks like helmGlobals.chartHome is not passed to the HelmChartInflationGenerator at all. Even if I change it to foo, I still get the same error. I would expect it to say no chart found at 'foo' then.

Am I doing something wrong, or is this a bug?

What did you expect to happen?

The Helm chart is inflated multiple times, once per sites per deployment.

How can we reproduce it (as minimally and precisely as possible)?

Files

# /my-app/helm/helm.yaml
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
  name: my-app
name: my-app
# /my-app/helm/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - helm.yaml
# /my-app/overlays/site1/common/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../../helm

patches:
  - patch: |-
      apiVersion: builtin
      kind: HelmChartInflationGenerator
      metadata:
        name: my-app
      valuesInline:
        k8sSecret:
          secretName: my-secret
        outputs:
          - url: "http://database.site1.company.global"
            tokenSecretKey: write1
            db: "db1"
# /my-app/overlays/site1/deployments/deployment1/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../common-config

patches:
  - patch: |-
      apiVersion: builtin
      kind: HelmChartInflationGenerator
      metadata:
        name: my-app
      releaseName: deployment1-my-app
      valuesInline:
        requireActiveAccessToSensors: true
        socketListeners:
          - protocol: UDP
            port: 2000
        appConfig: |
          [config]
            key1 = "value1"
# /my-app/overlays/site1/deployments/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
helmGlobals:
  chartHome: ../../../charts

generators:
  - ./deployment1

Command

> cd my-app/overlays/site1/deployments
> kustomize build . --enable-helm --load-restrictor LoadRestrictionsNone
Error: no repo specified for pull, no chart found at ''

Expected output

Inflated Helm Chart per site per deployment

Actual output

An error saying the Helm chart cannot be found

Kustomize version

5.3.0

Operating system

Linux

LarsStegman avatar Apr 30 '24 15:04 LarsStegman

This issue is currently awaiting triage.

SIG CLI takes a lead on issue triage for this repo, but any Kubernetes member can accept issues by applying the triage/accepted label.

The triage/accepted label can be added by org members by writing /triage accepted in a comment.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

k8s-ci-robot avatar Apr 30 '24 15:04 k8s-ci-robot

I had a similar problem. After checking the source code I discovered that (in my case) the folder name where my chart resides was not correct.

Have a look at this: https://github.com/kubernetes-sigs/kustomize/blob/c1de0301f5e71ffbecf77f5bc8687e7693878eb5/plugin/builtin/helmchartinflationgenerator/HelmChartInflationGenerator.go#L343

busilina avatar Jul 02 '24 14:07 busilina

I don't think that is actually the problem in my case, because I think I tested that, but it has been a while. I will report back in few weeks.

LarsStegman avatar Jul 02 '24 17:07 LarsStegman