首页 > 后端开发 > Golang > 正文

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

WBOY
发布: 2024-02-09 08:51:11
转载
435 人浏览过

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

php小编柚子在这里给大家解答一个常见问题:“如果values.yaml 文件中不存在属性,如何返回默认 false?”在Kubernetes的Helm Chart中,我们经常会使用values.yaml文件来定义配置参数。当我们想要获取某个属性的值时,如果该属性在values.yaml文件中不存在,我们可以使用一些方法来返回默认值。以下是几种常见的解决方案。

问题内容

yaml 文件。 我有一个在全局下定义的值,如下所示

global:
  logging:
    log4j:
     enabled: true
登录后复制

我还有一个辅助功能

{{- define "helm-basic-template.logging-enabled" -}}
{{ .Values.global.logging.log4j.enabled | default "false" }}
{{- end -}}
登录后复制

属性 global.logging.log4j.enabled 可能不存在,在这种情况下,我希望辅助函数返回 false,否则返回属性的值。 但是它没有按我的预期工作。知道我的功能有什么问题吗?或者有其他更好的方法来重写它? 谢谢

解决方法

为了避免变量未定义,这里需要进行额外的检查。

根据helm文档,当对象为空时,if语句判断返回 false。

如果值为以下情况,管道将被评估为 false:

  • 布尔值 false
  • 数字零
  • 空字符串
  • nil(空或 null)
  • 空集合(映射、切片、元组、字典、数组)

直接使用以下检查。

{{- 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 }}
登录后复制

或者采用命名模板方法。

{{- 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 -}}
登录后复制

或者使用 default 设置一个简单的默认值。

{{- define "helm-basic-template.logging-enabled" -}}
{{- .Values.global.logging.log4j.enabled | default false .Values.global.logging.log4j.enabled -}}
{{- end -}}
登录后复制

或者使用dig从值列表中选择键。

{{- define "helm-basic-template.logging-enabled" -}}
{{- dig "logging" "log4j" "enabled" false .Values.global -}}
{{- end -}}
登录后复制

以上是如果values.yaml 文件中不存在属性,如何返回默认 false?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板