我有一个头盔图表,需要stable/redis
作为子图表。父图表需要将redis服务公开为环境变量。
redis图表包含一个名为redis.fullname
的模板。我如何在我的父图表中引用它?即我在父部署中想要这样的东西,但它不起作用:
kind: Deployment
spec:
template:
containers:
env:
- name: REDIS_CLUSTER_SERVICE_HOST
value: {{ template "redis.fullname" . }}
答案 0 :(得分:1)
您可以在父图表中使用'{{ .Release.Name }}-redis'
。我有同样的要求。如果您想看看-> https://github.com/kubernetes/charts/tree/master/incubator/distribution
答案 1 :(得分:1)
现在可以在父级和子级图表之间共享模板。 请参阅-https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md#sharing-templates-with-subcharts
我看到的问题将是:
如果您的redis.fullname
模板使用两个图表中具有相同名称但值不同的变量(例如.Values.commonVariable),则在父图表中引用该变量时,该值将将用于父级图表,而不是子级图表。
考虑一下:
{{- define "zookeeper.fullname" -}}
{{- printf "%s-%s" (.Values.component) (.Values.subcomponent) -}}
{{- end -}}
尽管我希望在zookeeper.fullname
(父)图表中引用我的kafka
。但是.Values.component
和.Values.subcomponent
将用于kafka,而不是用于Zookeeper(子图),这完全破坏了这个想法。
在这种情况下,解决方法是使用Jainish Shah的答案。但是,如果不是这种情况,请不要遵循该答案。这破坏了模板的想法。如果要以任何方式更改子图中的模板功能,则还需要修改父图表中的值{{ .Release.Name }}-redis
。这不是模板。
答案 2 :(得分:0)
改进 Akash 的答案,您可以尝试模拟正确的范围。这也只有在您知道子模板使用哪些变量时才有效,但可能会更稳定一些:
{{ template "redis.fullname" (dict "Values" $.Values.redis "Chart" (dict "Name" "redis") "Release" $.Release) }}