首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Helm: range循环中的值不变

Helm: range循环中的值不变
EN

Stack Overflow用户
提问于 2021-12-30 11:03:07
回答 2查看 548关注 0票数 0

很抱歉,如果这个案例已经涉及到了,我阅读了许多类似的问题/答案,但尽管它们有所帮助,但我还没有找到解决我的pb的方法。

我需要更新yaml值文件,以引入一个新的密钥networkpolicy,并在helm range循环中遍历它:

初始value.yaml文件:

代码语言:javascript
复制
calico:
  spec:
    egress:
      - action: Allow
        destination:
          selector: app.kubernetes.io/name == 'test'
    order: 10
    types:
      - Egress
  spec:
    egress:
      - action: Allow
        destination:
          selector: app.kubernetes.io/name == 'test'
    order: 10
    types:
      - Egress

更新的value.yaml文件:

代码语言:javascript
复制
calico:
  networkpolicy:
    name: micro-zoning.allow-egress-from-p-to-bitbucket
    spec:
      egress:
        - action: Allow
          destination:
            selector: app.kubernetes.io/name == 'test'
      order: 10
      types:
        - Egress
  networkpolicy:
    name: micro-zoning.allow-egress-from-p-to-papi
    spec:
      egress:
        - action: Allow
          destination:
            selector: app.kubernetes.io/name == 'p-api'
      order: 10
      types:
        - Egress

处理它的舵机模板是这样的:

代码语言:javascript
复制
{{- if .Values.calico -}}
{{- range .Values.calico.networkpolicy }}
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: {{ $.Values.calico.networkpolicy.name | default (printf "micro-zoning.%s" (include "test.fullname" $)) }}
  {{- include "test.globalMetadata" $ | nindent 2 }}
  labels:
    projectcalico.org/tier: micro-zoning
spec:
  tier: micro-zoning
  selector: app.kubernetes.io/name == "{{ include "test.name" $ }}"
  {{- with $.Values.calico.networkpolicy.spec }}
  {{- toYaml . | nindent 2 }}
  {{- end }}
---
{{- end }}
{{- end }}

它重复两次(如预期的那样),但生成的模板是相同的,即只打印来自第二字典的数据:

代码语言:javascript
复制
---
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: micro-zoning.allow-egress-from-p-to-api
  
  namespace: test
  labels:
    projectcalico.org/tier: micro-zoning
spec:
  tier: micro-zoning
  selector: app.kubernetes.io/name == "test"
  egress:
  - action: Allow
    destination:
      selector: app.kubernetes.io/name == 'p-api'
  order: 10
  types:
  - Egress
---
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: micro-zoning.allow-egress-from-p-to-api
  
  namespace: test
  labels:
    projectcalico.org/tier: micro-zoning
spec:
  tier: micro-zoning
  selector: app.kubernetes.io/name == "test"
  egress:
  - action: Allow
    destination:
      selector: app.kubernetes.io/name == 'p-api'
  order: 10
  types:
  - Egress
---

你知道发生了什么吗?我想我的value.yaml文件的格式可能出了问题,但却搞不清楚是什么。

EN

回答 2

Stack Overflow用户

发布于 2021-12-30 13:36:09

这可能是由范围引起的。

$表示值的根。

在range循环中,应该使用.来表示当前元素。

模板

代码语言:javascript
复制
{{- if .Values.calico -}}
{{- range .Values.calico }}
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: {{ .name | default (printf "micro-zoning.%s" (include "test.fullname" $)) }}
  labels:
    projectcalico.org/tier: micro-zoning
spec:
  tier: micro-zoning
  selector: app.kubernetes.io/name == "{{ include "test.name" $ }}"
  {{- with .networkpolicy.spec }}
  {{- toYaml . | nindent 2 }}
  {{- end }}
---
{{- end }}
{{- end }}

产出:

代码语言:javascript
复制
---
# Source: test/templates/calico.yaml
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: micro-zoning.test
  labels:
    projectcalico.org/tier: micro-zoning
spec:
  tier: micro-zoning
  selector: app.kubernetes.io/name == "test"
  egress:
  - action: Allow
    destination:
      selector: app.kubernetes.io/name == 'test'
  order: 10
  types:
  - Egress
---
# Source: test/templates/calico.yaml
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: micro-zoning.test
  labels:
    projectcalico.org/tier: micro-zoning
spec:
  tier: micro-zoning
  selector: app.kubernetes.io/name == "test"
  egress:
  - action: Allow
    destination:
      selector: app.kubernetes.io/name == 'p-api'
  order: 10
  types:
  - Egress
---

Ps:values.yaml有一些语法错误,您提供了。

地图上不可能有两个相同的钥匙。您应该将它们写入数组中,以符合语法。如下所示:

初始value.yaml文件:

代码语言:javascript
复制
calico:
  - spec:
    egress:
        - action: Allow
          destination:
            selector: app.kubernetes.io/name == 'test'
      order: 10
      types:
        - Egress
  - spec:
      egress:
        - action: Allow
          destination:
            selector: app.kubernetes.io/name == 'test'
      order: 10
      types:
        - Egress

更新的value.yaml文件:

代码语言:javascript
复制
calico:
  - networkpolicy:
      name: micro-zoning.allow-egress-from-p-to-bitbucket
      spec:
        egress:
          - action: Allow
            destination:
              selector: app.kubernetes.io/name == 'test'
        order: 10
        types:
          - Egress
  - networkpolicy:
      name: micro-zoning.allow-egress-from-p-to-papi
      spec:
        egress:
          - action: Allow
            destination:
              selector: app.kubernetes.io/name == 'p-api'
        order: 10
        types:
          - Egress
票数 1
EN

Stack Overflow用户

发布于 2022-01-04 17:56:50

我终于解决了这个问题。我对yaml几乎没有经验,还犯了一些语法错误。

最后的yaml配置文件现在如下所示:

代码语言:javascript
复制
calico:
  networkPolicy:
    - name: networkpolicy1
      spec:
        selector: test
        egress:
          - action: Allow
            destination:
              selector: app.kubernetes.io/name == 'chartname'
        order: 10
        types:
          - Egress
    - name: networkpolicy2
      spec:
        selector: chartname
        egress:
          - action: Allow
            destination:
              selector: app.kubernetes.io/name == 'test2'
        order: 10
        types:
          - Egress

舵机模板的处理如下所示:

代码语言:javascript
复制
{{- if .Values.calico -}}
{{- range .Values.calico.networkPolicy }}
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: {{ .name | default (printf "micro-zoning.%s" (include "chartname.fullname" $)) }}
  {{- include "chartname.globalMetadata" $ | nindent 2 }}
  labels:
    projectcalico.org/tier: micro-zoning
spec:
  tier: micro-zoning
  selector: app.kubernetes.io/name == {{ .spec.selector | default ((include "chartname.name" $)) }}
  {{- with .spec }}
  {{- toYaml . | nindent 2 }}
  {{- end }}
---
{{- end }}
{{- end }}

注意:这个yaml教程提供了帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70530721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档