我使用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这很好,但是现在我想为某些命名空间设置一个特定的标签。默认情况下,入口控制器、rbac-管理器和velero是我不想设置的名称空间,但只用于特定于团队的命名空间。在这种情况下,测试{1,2,3}。但这些变量。因此,与其使用has函数,不如:
{{ 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 }}发布于 2020-05-27 08:13:41
我知道这并不是一个真正的答案,让它的工作与无功能,但我让它的工作如下:
{{ 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 }}发布于 2020-05-27 16:00:29
您正在尝试将字符串作为第一个参数传递给无功能,而它需要一个列表。
下面是一个例子,说明如何使用without函数来完成这个任务。不过,我从name数组中删除了冗余的namespaces密钥。
values.yaml
namespaces:
- default
- ingress-controller
- rbac-manager
- velero
- test1
- test2
- test3namespace.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列表是否具有此值。
发布于 2021-01-06 08:43:17
因此,小枝文档有点缺乏,但我想说的是,通常您做的是而不是,将列表作为第二个参数传递。第一个参数肯定是一个列表,但您可以在列表函数的小枝单元测试中看到,下一个参数肯定不是,而是您想跳过的元素。如果将该信息与官方文件组合,则可以推断传递附加参数以跳过数组中的其他元素。
例如,
{{ without (list 1 2 3 4) 1 2 3 }}会给[4]
如果您真的想跳过一个元素是一个完整的列表,那么您可以这样做:
{{ without (list (list 1 2 3) 4) (list 1 2 3) }}这会给你[4]。
https://stackoverflow.com/questions/62036695
复制相似问题