以下是我的情况:
{{- $v := (.Files.Get "values-productpage.yaml") | fromYaml }}.
spec:
{{- range $key, $value := $v.containers }}
containers:
- name: {{ $value.name }}
image: {{.Values.productpage_image}}:latest
在使用.Values.productpage_image时,它将报告:无法评估类型为{}的字段productpage_image。 这里有使用错误吗?为什么不能在此循环中使用.Values.xxx?如果将.Values移到第一行,则没有错误。
答案 0 :(得分:2)
您只需使用$
即可到达根作用域
无需定义$root
是什么,您可以从循环或任何其他范围内将.Values
引用为$.Values
。
答案 1 :(得分:1)
正如@abinet正确解释了原因一样,我将分享我的解决方案(这对我有很大帮助,希望能节省您的时间):
首先,我保存了范围:
{{- $root := . -}}
然后,我在循环上下文中调用.Value,如下所示:
{{ $root.Values.data }}
因此,基本上,您的代码应类似于:
{{- $root := . -}}
{{- $v := (.Files.Get "values-productpage.yaml") | fromYaml }}.
spec:
{{- range $key, $value := $v.containers }}
containers:
- name: {{ $value.name }}
image: {{$root.Values.productpage_image}}:latest
答案 2 :(得分:0)
这是因为范围会更改范围(请参见https://github.com/helm/helm/blob/master/docs/chart_template_guide/control_structures.md#looping-with-the-range-action的详细说明)。
您可以将.Values.productpage_image
分配给范围之外的变量并在其中使用。