Как использовать без функции с шаблонами helm (go)? - PullRequest
0 голосов
/ 27 мая 2020

Я использую 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

Это работает нормально, но теперь я хочу установить метку c для определенных пространств имен. default, ingress-controller, rba c -manager и velero - это пространства имен, для которых я не хочу устанавливать метку, а только для пространств имен c, определенных командой .. в данном случае test {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 }}

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Вы пытаетесь передать строку в качестве первого параметра в без функции , хотя для этого требуется список.

Вот пример того, как вы можете сделать это с помощью функции without . Я удалил избыточный ключ name из массива namespaces.

values.yaml

namespaces:
  - default
  - ingress-controller
  - rbac-manager
  - velero
  - test1
  - test2
  - test3

namespace.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 голосов
/ 27 мая 2020

Я знаю, что на самом деле это не ответ на вопрос о том, как заставить его работать с функцией без, но у меня это работает с этим:

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