Helm chart generated yaml is invalid - (Kustomize parse errors)
Summary
Gitlab helm chart generates yaml that has syntax errors
Files that generate syntax errors:
- Duplicate keys:
charts/gitlab/charts/gitlab-exporter/templates/deployment.yaml
- Duplicate keys:
charts/gitlab/charts/sidekiq/templates/deployment.yaml
- Duplicate keys:
charts/gitlab/charts/webservice/templates/deployment.yaml
- Duplicate keys:
charts/gitlab/charts/gitaly/templates/statefulset.yml
- Key with only integers not wrapped with quotes:
charts/gitlab/charts/gitlab-shell/templates/nginx-tcp-configmap.yml
Steps to reproduce
# Install helm and kustomize (helm version 3) before running below commands
mkdir gitlab-test
cd gitlab-test
helm repo add gitlab https://charts.gitlab.io/
helm template -n gitlab gitlab gitlab/gitlab \
--set global.edition=ce \
--set global.operator.enabled=false \
--set global.hosts.domain=example.com \
--set global.pages.enabled=false \
--set registry.enabled=false \
--set prometheus.server.enabled=false \
--set certmanager.install=false \
--set global.imagePullPolicy="Always" \
--set global.ingress.configureCertmanager=false \
--set global.ingress.annotations."kubernetes\.io/tls-acme"=true \
--set global.ingress.annotations."kubernetes\.io/ingress\.allow-http"=false \
--set global.ingress.annotations."kubernetes\.io/ingress\.class"=private-nginx \
--set global.ingress.annotations."certmanager\.k8s\.io/acme-challenge-type"=dns01 \
--set global.ingress.annotations."certmanager\.k8s\.io/acme-dns01-provider"=route53 \
--set global.ingress.annotations."certmanager\.k8s\.io/cluster-issuer"=letsencrypt \
--set gitlab-runner.resources.limits.cpu="2" \
--set gitlab-runner.resources.requests.cpu="0.5" \
--set gitlab-runner.resources.limits.memory="2Gi" \
--set gitlab-runner.resources.requests.memory="512Mi" \
--set gitlab-runner.runners.builds.cpuLimit="4" \
--set gitlab-runner.runners.builds.cpuRequests="1" \
--set gitlab-runner.runners.builds.memoryLimit="4Gi" \
--set gitlab-runner.runners.builds.memoryRequests="1Gi" \
--set gitlab-runner.runners.helpers.cpuLimit="1" \
--set gitlab-runner.runners.helpers.cpuRequests="0.5" \
--set gitlab-runner.runners.helpers.memoryLimit="2Gi" \
--set gitlab-runner.runners.helpers.memoryRequests="512Mi" \
--set gitlab-runner.runners.services.cpuLimit="2" \
--set gitlab-runner.runners.services.cpuRequests="0.5" \
--set gitlab-runner.runners.services.memoryLimit="2Gi" \
--set gitlab-runner.runners.services.memoryRequests="512Mi" \
--set global.ingress.tls.secretName=gitlab-example-com-tls > all.yaml
# Create kustomization.yaml for testing:
cat <<EOF >kustomization.yaml
resources:
# Include GitLab helm chart generated k8s specification
- all.yaml
# All other cool stuff that I had to do was here
# and it was removed because it's irrelevant here
EOF
# Run kustomize command to parse generated all.yaml
kustomize build .
Configuration used
There were few patches that I needed to apply on top of gitlab helm chart and I used kustomize for that. Please check steps to reproduce for the helm command with parameters
Current behavior
Using helm command to deploy GitLab into Kubernetes works without any error. However, kustomize command fails to parse yaml generated by helm command. Search for the listed filename paths (see summary) inside all.yaml and you should notice the yaml syntax issues. Fixing those errors manually made kustomize command parse yaml correctly.
Expected behavior
Helm chart should always generate a clean and valid yaml file.
Versions
- Chart: 4.8.4
- Platform:
- Cloud: All
- Self-hosted: NA
- Kubernetes:
- Client:
version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-14T05:14:17Z", GoVersion:"go1.15.6", Compiler:"gc", Platform:"darwin/amd64"}
- Server:
version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.9-eks-d1db3c", GitCommit:"d1db3c46e55f95d6a7d3e5578689371318f95ff9", GitTreeState:"clean", BuildDate:"2020-10-20T22:18:07Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
- Client:
- Helm: (
helm version
)- Client: 3.5.0
- Server: NA
- Kustomize:
{Version:kustomize/v3.9.2 GitCommit:e98eada7365fc564c9aba392e954f306a9cbf1dd BuildDate:2021-01-17T17:49:45Z GoOs:darwin GoArch:amd64}
Relevant logs
kustomize yaml parse errors:
ERROR 1:
Error: yaml: unmarshal errors:
line 24: mapping key "app" already defined at line 22
line 26: mapping key "release" already defined at line 23
ERROR 2:
Error: error marshaling into JSON: json: unsupported type: map[interface {}]interface {
Edited by Satish Gaikwad