Home  >  Article  >  Backend Development  >  How to return default false if property does not exist in values.yaml file?

How to return default false if property does not exist in values.yaml file?

WBOY
WBOYforward
2024-02-09 08:51:11423browse

如果values.yaml 文件中不存在属性,如何返回默认 false?

php editor Youzi is here to answer a common question: "If the attribute does not exist in the values.yaml file, how to return the default false?" In the Helm Chart of Kubernetes, we The values.yaml file is often used to define configuration parameters. When we want to get the value of a certain attribute, if the attribute does not exist in the values.yaml file, we can use some methods to return the default value. Here are a few common solutions.

Question content

yaml file. I have a value defined under global as shown below

global:
  logging:
    log4j:
     enabled: true

I also have an auxiliary function

{{- define "helm-basic-template.logging-enabled" -}}
{{ .Values.global.logging.log4j.enabled | default "false" }}
{{- end -}}

The property global.logging.log4j.enabled may not exist, in which case I want the helper function to return false, otherwise return the value of the property. But it's not working as I expected. Any idea what's wrong with my function? Or is there any other better way to rewrite it? Thank you

Solution

In order to avoid the variable being undefined, additional checks are required here.

According to helm documentation, when the object is empty, the if statement returns false.

The pipe will evaluate to false if the value is:

  • Boolean value false
  • Number zero
  • Empty string
  • nil (empty or null)
  • Empty collection (map, slice, tuple, dictionary, array)

Use the following checks directly.

{{- if .Values.global }}
{{- if .Values.global.logging }}
{{- if .Values.global.logging.log4j }}
{{- if .Values.global.logging.log4j.enabled }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: logging-cm
data:
  conf.json: |
    xxxxx
...
{{- end }}
{{- end }}
{{- end }}
{{- end }}

Or use the named template method.

{{- define "helm-basic-template.logging-enabled" -}}
{{- $val := false }}
{{- if .Values.global -}}
{{- if .Values.global.logging -}}
{{- if .Values.global.logging.log4j -}}
{{- if .Values.global.logging.log4j.enabled -}}
{{- $val = true }}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{ $val }}
{{- end -}}

Or use default to set a simple default value.

{{- define "helm-basic-template.logging-enabled" -}}
{{- .Values.global.logging.log4j.enabled | default false .Values.global.logging.log4j.enabled -}}
{{- end -}}

Or use dig to select a key from a list of values. p>

{{- define "helm-basic-template.logging-enabled" -}}
{{- dig "logging" "log4j" "enabled" false .Values.global -}}
{{- end -}}

The above is the detailed content of How to return default false if property does not exist in values.yaml file?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete