当您不知道名称时,检查 values.yaml 属性 中是否有任何条目?

Check if a values.yaml property has any entries in it when you don't know the names?

我有一个舵图模板,如下所示:

  volumes:
    - name: secrets
      projected:
        sources:
        {{- range $secretKey := .Values.secrets }}            
          - secret: 
              name: {{ $secretKey | kebabcase }}-secret
        {{- end }}

这非常有效,除非 .Values.secrets 中没有任何条目。然后它给出了这个错误:

error validating data: ValidationError(Deployment.spec.template.spec.volumes[0].projected): missing required field "sources" in io.k8s.api.core.v1.ProjectedVolumeSource

基本上是在抱怨sources没有任何值。

但是我找不到一种方法来检查是否只在 .Values.secrets 有条目时执行此部分。我的 values.yaml 文件是自动填充的,有时没有任何机密值。

但是因为是自动填充的,不知道里面的值的名字。因此,我不能只对其中一个条目进行测试(就像大多数示例一样)。

如何检查 .Values.secrets 是否有任何值?

上面只需要加条件判断,没有值时不生成对象

根据helm document,当对象为空时,if语句判断为return false.

A pipeline is evaluated as false if the value is:

  • a boolean false
  • a numeric zero
  • an empty string
  • a nil (empty or null)
  • an empty collection (map, slice, tuple, dict, array)
volumes:
{{- if .Values.secrets }}
- name: secrets
  projected:
    sources:
    {{- range $secretKey := .Values.secrets }}
    - secret:
        name: {{ $secretKey | kebabcase }}-secret
    {{- end }}
{{- end }}

案例 1:

values.yaml

secrets:

输出:

volumes:

案例 2:

values.yaml

secrets:
  - "aaa"
  - "bbb"

输出:

volumes:
  - name: secrets
    projected:
      sources:
      - secret:
          name: aaa-secret
      - secret:
          name: bbb-secret