Kubernetes Helm Chart If Condition Check
Asked Answered
N

1

13

I am trying to add if great than condition in Helm chart. it is throwing error.

I have defined value in values.yaml and using that value in deployment.yaml for condition.

values.yaml

replicaCount: 2

deployment.yaml

rollingUpdate:
  maxSurge: 1
  {{ if gt .Values.replicaCount 2}}
  maxUnavailable: 0
  {{ else }}
  maxUnavailable: 1
  {{ end }}

I am using helm dry run option to check result. getting error

Error: render error in "hello-world/templates/deployment.yaml": template: hello-world/templates/deployment.yaml:16:12: executing "hello-world/templates/deployment.yaml" at <gt .Values.replicaCo...>: error calling gt: incompatible types for comparison

how to fix this ?

Nissen answered 2/9, 2017 at 2:28 Comment(2)
Did you manage to solve this?Landwaiter
Can u help me to do type casting ?Nissen
O
26

Try using float number in comparison instead:

deployment.yaml

rollingUpdate:
  maxSurge: 1
  {{ if gt .Values.replicaCount 2.0}}
  maxUnavailable: 0
  {{ else }}
  maxUnavailable: 1
  {{ end }}

Helm (along with underlying Golang templates and Yaml) can be weird sometimes.


Also, note that sometimes you need to typecast values in your yaml configs (e.g. port numbers).

Example:

...
ports:
- containerPort: !!int {{ .Values.containers.app.port }}
...

More about Yaml type casting: https://github.com/yaml/YAML2/wiki/Type-casting

Ormond answered 4/9, 2017 at 8:24 Comment(4)
I am trying with type casting option . it is not working. it is throwing error.{{- if gt !!int {{ .Values.replicaCount }} 1}}. how to type cast ?Nissen
You can also try typecasting not by yaml but by Go templates: containerPort: {{ .Values.replicaCount | int }}Ormond
What is the "-" is {{- if .Values.enable}} .. .. {{- end }} referred as?Resonator
@Resonator it is about controlling whitespace. Please see: helm.sh/docs/chart_template_guide/control_structures/…Ormond

© 2022 - 2024 — McMap. All rights reserved.