如何在 helm (go) 的模板中使用无函数?

问题描述 投票:0回答:1

我正在使用 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 }}
kubernetes-helm go-templates
1个回答
0
投票

您试图将一个字符串作为第一个参数传递给 无功能而它需要一个列表。

下面是一个例子,告诉你如何使用 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 列表中是否有值。


0
投票

我知道这并不是让它与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 }}
© www.soinside.com 2019 - 2024. All rights reserved.