Helm:范围循环中的值不变



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

我需要更新我的yaml值文件,以引入一个新的密钥networkpolicy,并在helmrange循环中迭代它:

初始value.yaml文件:

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文件:

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

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

{{- 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 }}

它迭代两次(如预期(,但生成的模板是相同的,即只打印第二个字典中的数据:

---
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文件的格式有问题,但我真的不知道是什么。

这可能是由作用域引起的。

$表示值的根。

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

模板

{{- 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 }}

输出:

---
# 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文件:

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文件:

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

我终于解决了这个问题。我对yaml只有很少的经验,并且犯了一些语法错误。

最终的yaml配置文件现在看起来是这样的:

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

和掌舵模板处理它看起来像这样:

{{- 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教程有帮助。

最新更新