我有一个包含三个子图表的父图表:subchart 01,subchart 02,subchart-main。在我的subchart-main中,我有一个configmap.yaml模板,它需要基于其他子图表创建一个json字符串:
configmap.yaml:
kind: ConfigMap
data:
appsettings.json: |-
{
"Services": [
{
"Name": {{ .Values.service1.name }}
"Endpoint": "{{ .Values.service1.endpoint }}:5080"
},
{
"Name": {{ .Values.service2.name }}
"Endpoint": "{{ .Values.service2.endpoint }}:5081"
},
]
}
然后,我有以下值.yaml文件在父图表文件夹中,但它没有工作.
values.yaml:
subchart-main:
service1:
name: {{ template .Release.name .Subcharts.subchart01 }}
endpoint: {{ template "subchart01.fullname" .Subcharts.subchart01 }}
service2:
name: {{ template .Release.name .Subcharts.subchart02 }}
endpoint: {{ template "subchart02.fullname" .Subcharts.subchart02 }}
任何帮助都将不胜感激。
1条答案
按热度按时间9udxz4iz1#
重要
如official documentation a子图表中所述
1.子图表被认为是“独立的”,这意味着子图表永远不能显式地依赖于其父图表。
1.因此,子图表不能访问其父图表的值。
1.父图表可以覆盖子图表的值。
你能做什么
您可以使用
global
值并将helm模板语法({{ .Values.global.example }}
)作为值传递给子图表。因此,在主图表的values.yaml文件中,您可以控制、覆盖和共享所有值,而子图表保持独立。
代码
你可以在github上找到完整的例子:https://github.com/Hadsch/helm-share-values-demo
**重要提示:**如果作为子图安装,这些值将被
mychart/values.yaml
中定义的值覆盖。如果单独安装,将使用此处定义的值。与subchart-main相同:值将被覆盖!
测试运行的输出