我正在使用 helm 在我们的 kubernetes 集群上部署命名空间。
这是模板。
{{- range $namespaces := .Values.namespaces }}
{{- if ne $namespaces.name "default" }}
apiVersion: v1
kind: Namespace
metadata:
name: {{ $namespaces.name }}
labels:
name: {{ $namespaces.name }}
{{- end }}
值文件。
namespaces:
- name: default
- name: ingress-controller
- name: rbac-manager
- name: velero
- name: test1
- name: test2
- name: test3
默认情况下,ingress-controller,rbac-manager和velero是我不想设置标签的命名空间,只想为团队特定的命名空间设置标签,在本例中是test{1,2,3}。但是,这些变量,在这里是test{1,2,3}。所以,与其使用 has 函数,不如使用 without 函数。
{{ if has .Values.favorite.drink (list "coffee" "thee" "milk") }}mug: true{{ end }}
我想用不使用函数,但我做错了什么,所以希望有人能帮我解决这个问题。
{{- range $namespaces := .Values.namespaces }}
{{- if ne $namespaces.name "default" }}
apiVersion: v1
kind: Namespace
metadata:
name: {{ $namespaces.name }}
labels:
name: {{ $namespaces.name }}
{{ $custom := without $namespaces.name "default" "ingress-controller" "rbac-manager" "velero" }}
{{- if eq $custom.name }}
namespace: custom
{{- end }}
---
{{- end }}
{{- end }}
当我运行这个的时候,我得到了错误。
Error: UPGRADE FAILED: template: namespaces/templates/namespaces.yaml:10:14: executing "namespaces/templates/namespaces.yaml" at <without $namespaces.name "default" "ingress-controller" "rbac-manager" "velero">: error calling without: Cannot find without on type string
当我使用这个函数时,我也得到了同样的错误:
{{- range $namespaces := .Values.namespaces }}
{{- if ne $namespaces.name "default" }}
apiVersion: v1
kind: Namespace
metadata:
name: {{ $namespaces.name }}
labels:
name: {{ $namespaces.name }}
{{ $custom := without $namespaces.name (list "default" "ingress-controller" "rbac-manager" "velero") }}
{{- if eq $custom.name }}
namespace: custom
{{- end }}
---
{{- end }}
{{- end }}
您试图将一个字符串作为第一个参数传递给 无功能而它需要一个列表。
下面是一个例子,告诉你如何使用 without
功能。我删除了多余的 name
钥匙 namespaces
但数组。
value.yaml
namespaces:
- default
- ingress-controller
- rbac-manager
- velero
- test1
- test2
- test3
命名空间.yaml
{{ $compare := without .Values.namespaces list "default" "ingress-controller" "rbac-manager" "velero" }}
{{- range $namespace := .Values.namespaces }}
{{- if ne $namespace "default" }}
apiVersion: v1
kind: Namespace
metadata:
name: {{ $namespace }}
labels:
name: {{ $namespace }}
{{- if has $namespace $compare }}
namespace: custom
{{- end }}
---
{{- end }}
{{- end }}
作为 without
函数返回的是一个 列表,首先我们创建一个 列表 没有指定的值。比起我们迭代的 namespaces
并检查 $custom
列表中是否有值。
我知道这并不是让它与without函数一起工作的真正答案,但我用这个方法让它工作了。
{{ range $namespaces := .Values.namespaces }}
{{ if ne $namespaces.name "default" }}
apiVersion: v1
kind: Namespace
metadata:
name: {{ $namespaces.name }}
labels:
name: {{ $namespaces.name }}
{{ if (not (has $namespaces.name (list "default" "ingress-controller" "rbac-manager" "velero"))) }}
namespace: custom
{{ end }}
{{ end }}
{{ end }}