如何在其他变量循环中使用.Values

时间:2018-09-15 10:13:05

标签: kubernetes-helm

以下是我的情况:

{{- $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移到第一行,则没有错误。

3 个答案:

答案 0 :(得分:2)

您只需使用$即可到达根作用域

无需定义$root是什么,您可以从循环或任何其他范围内将.Values引用为$.Values

来源:https://github.com/kubeapps/kubeapps/pull/1057

答案 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分配给范围之外的变量并在其中使用。