【问题标题】:In a Helm chart YAML, how do i include multiple lines of properties in one call?在 Helm 图表 YAML 中,如何在一次调用中包含多行属性?
【发布时间】:2020-10-08 00:04:23
【问题描述】:

我希望能够从 values.yaml 属性中获取多个子属性,并将它们全部放在模板中的属性下。例如:

values.yaml

selectors:
  propA: valueA
  propB: valueB
  propC: valueC

/templates/deployment.yaml

# ...elided...
spec:
  selector:
    matchLabels:
      # This is pseudo code
      {{ includeAll .Values.selectors | nindent 6 }}

然后这会导致 K8s 得到一个 yaml:

# ...elided...
spec:
  selector:
    matchLabels:
      propA: valueA
      propB: valueB
      propC: valueC

我该怎么做?

【问题讨论】:

    标签: kubernetes yaml kubernetes-helm


    【解决方案1】:

    事实证明并不是超级简单。这取决于(据我所知)下面是哪种类型的东西。

    简单的名称:值对

    您可以使用range 函数,它的作用很像for-each 循环。

    {{- range $name, $labelValue := .Values.labels }}
    {{ $name }}: {{ $labelValue }}
    {{- end }}
    

    多层次的嵌套属性

    如果您有一个嵌套的多级属性,那么我能找到的唯一方法是将其转换为 yaml。你需要非常小心缩进。它做了几件事:

    1. 它以一个新行开始(一个完整的空行)
    2. 无论您添加什么缩进都会在每一行的前面
    3. 如果您在模板中开始缩进,那也将包含在内

    来自values.yaml的示例

    envVariables:
      - name: MYSQL_ROOT_PASSWORD
        valueFrom: 
          secretKeyRef:
            name: db-creds
            key: db-pass
    

    第一种有效方式:

    spec:
      containers:
        - image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env: {{ toYaml .Values.envVariables | nindent 12 }}
    

    这将导致:

    spec:
      containers:
        - image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom: 
                secretKeyRef:
                  name: db-creds
                  key: db-pass
    

    第二种有效方式:

    spec:
      containers:
        - image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env: 
    {{ toYaml .Values.envVariables | nindent 12 }}
    

    注意它是左对齐的。这将导致env: 之后出现一个空行,但会有正确的缩进。

    无效方式:

    spec:
      containers:
        - image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env: 
            {{ toYaml .Values.envVariables | nindent 12 }}
    

    根据上述情况,没有办法正确缩进,因为第一行只会有额外的缩进,而其他行不会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2020-03-30
      • 2021-12-03
      • 2017-09-02
      • 2022-01-25
      • 2020-12-06
      相关资源
      最近更新 更多