Kubernetes 在Helm chart YAML中,如何在一次调用中包含多行属性?

Kubernetes 在Helm chart YAML中,如何在一次调用中包含多行属性?,kubernetes,yaml,kubernetes-helm,Kubernetes,Yaml,Kubernetes Helm,我希望能够从values.yaml属性中获取多个子属性,并将它们全部放在模板中的属性下。例如: 值。yaml 选择器: propA:valueA 建议B:价值B propC:valueC /templates/deployment.yaml #…省略。。。 规格: 选择器: 火柴标签: #这是伪代码 {{includeal.Values.selectors | nindent6} 然后这将导致K8s获得以下yaml: #…省略。。。 规格: 选择器: 火柴标签: propA:valueA 建

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

值。yaml

选择器:
propA:valueA
建议B:价值B
propC:valueC
/templates/deployment.yaml

#…省略。。。
规格:
选择器:
火柴标签:
#这是伪代码
{{includeal.Values.selectors | nindent6}
然后这将导致K8s获得以下yaml:

#…省略。。。
规格:
选择器:
火柴标签:
propA:valueA
建议B:价值B
propC:valueC

我怎么能做那样的事呢?

事实证明这并不是非常简单。这取决于(据我所知)下面是什么类型的东西

简单名称:值对

您可以使用
range
函数,该函数的作用非常类似于每个循环的一个函数。

{{-range$name,$labelValue:=.Values.labels}
{{$name}}:{{$labelValue}
{{-end}
多个级别的嵌套属性

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

  • 它以一个新行开始(一个完整的空行)
  • 您添加的任何缩进都将出现在每一行的前面
  • 如果你开始缩进你的模板,这将包括在内
  • 来自
    values.yaml的示例

    env变量:
    -名称:MYSQL\u ROOT\u密码
    价值来源:
    secretKeyRef:
    姓名:db creds
    密钥:db pass
    
    第一种有效方式:

    spec:
    容器:
    -图像:{{.Values.image.name}:{{.Values.image.tag}
    imagePullPolicy:{{.Values.image.pullPolicy}}
    env:{{toYaml.Values.envVariables | nindent12}
    
    这将导致:

    spec:
    容器:
    -图像:{{.Values.image.name}:{{.Values.image.tag}
    imagePullPolicy:{{.Values.image.pullPolicy}}
    环境:
    -名称:MYSQL\u ROOT\u密码
    价值来源:
    secretKeyRef:
    姓名:db creds
    密钥:db pass
    
    第二种有效方式:

    spec:
    容器:
    -图像:{{.Values.image.name}:{{.Values.image.tag}
    imagePullPolicy:{{.Values.image.pullPolicy}}
    环境:
    {{toYaml.Values.envVariables | nindent12}
    
    注意它是左对齐的。这将导致在
    env:
    之后出现一个空行,但将有正确的缩进

    无效方式:

    spec:
    容器:
    -图像:{{.Values.image.name}:{{.Values.image.tag}
    imagePullPolicy:{{.Values.image.pullPolicy}}
    环境:
    {{toYaml.Values.envVariables | nindent12}
    

    有了以上内容,就没有办法获得正确的缩进,因为只有第一行会有额外的缩进,而其他行不会。

    事实证明,这并不是非常简单。这取决于(据我所知)下面是什么类型的东西

    简单名称:值对

    您可以使用
    range
    函数,该函数的作用非常类似于每个循环的一个函数。

    {{-range$name,$labelValue:=.Values.labels}
    {{$name}}:{{$labelValue}
    {{-end}
    
    多个级别的嵌套属性

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

  • 它以一个新行开始(一个完整的空行)
  • 您添加的任何缩进都将出现在每一行的前面
  • 如果你开始缩进你的模板,这将包括在内
  • 来自
    values.yaml的示例

    env变量:
    -名称:MYSQL\u ROOT\u密码
    价值来源:
    secretKeyRef:
    姓名:db creds
    密钥:db pass
    
    第一种有效方式:

    spec:
    容器:
    -图像:{{.Values.image.name}:{{.Values.image.tag}
    imagePullPolicy:{{.Values.image.pullPolicy}}
    env:{{toYaml.Values.envVariables | nindent12}
    
    这将导致:

    spec:
    容器:
    -图像:{{.Values.image.name}:{{.Values.image.tag}
    imagePullPolicy:{{.Values.image.pullPolicy}}
    环境:
    -名称:MYSQL\u ROOT\u密码
    价值来源:
    secretKeyRef:
    姓名:db creds
    密钥:db pass
    
    第二种有效方式:

    spec:
    容器:
    -图像:{{.Values.image.name}:{{.Values.image.tag}
    imagePullPolicy:{{.Values.image.pullPolicy}}
    环境:
    {{toYaml.Values.envVariables | nindent12}
    
    注意它是左对齐的。这将导致在
    env:
    之后出现一个空行,但将有正确的缩进

    无效方式:

    spec:
    容器:
    -图像:{{.Values.image.name}:{{.Values.image.tag}
    imagePullPolicy:{{.Values.image.pullPolicy}}
    环境:
    {{toYaml.Values.envVariables | nindent12}
    
    使用上述方法,无法获得正确的缩进,因为只有第一行会有额外的缩进,而其他行不会