首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用没有功能的舵机(go)模板?

如何使用没有功能的舵机(go)模板?
EN

Stack Overflow用户
提问于 2020-05-27 06:24:29
回答 3查看 708关注 0票数 0

我使用helm在kubernetes集群上部署名称空间。

这是模板:

代码语言:javascript
复制
{{- range $namespaces := .Values.namespaces }}
{{- if ne $namespaces.name "default" }}    
apiVersion: v1
kind: Namespace
metadata:
  name: {{ $namespaces.name }}
  labels:
    name: {{ $namespaces.name }}
{{- end }}

值文件:

代码语言:javascript
复制
namespaces:
  - name: default
  - name: ingress-controller
  - name: rbac-manager
  - name: velero
  - name: test1
  - name: test2
  - name: test3

这很好,但是现在我想为某些命名空间设置一个特定的标签。默认情况下,入口控制器、rbac-管理器和velero是我不想设置的名称空间,但只用于特定于团队的命名空间。在这种情况下,测试{1,2,3}。但这些变量。因此,与其使用has函数,不如:

代码语言:javascript
复制
{{ if has .Values.favorite.drink (list "coffee" "thee" "milk") }}mug: true{{ end }}

我想使用“无”函数,但我做错了一些事情,希望有人能帮我解决这个问题:

代码语言:javascript
复制
{{- 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 }}

当我运行这个程序时,我会得到错误:

代码语言:javascript
复制
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

当我使用:

代码语言:javascript
复制
{{- 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 }}
EN

回答 3

Stack Overflow用户

发布于 2020-05-27 08:13:41

我知道这并不是一个真正的答案,让它的工作与无功能,但我让它的工作如下:

代码语言:javascript
复制
{{ 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 }}
票数 0
EN

Stack Overflow用户

发布于 2020-05-27 16:00:29

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

下面是一个例子,说明如何使用without函数来完成这个任务。不过,我从name数组中删除了冗余的namespaces密钥。

values.yaml

代码语言:javascript
复制
namespaces:
  - default
  - ingress-controller
  - rbac-manager
  - velero
  - test1
  - test2
  - test3

namespace.yaml

代码语言:javascript
复制
{{ $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
EN

Stack Overflow用户

发布于 2021-01-06 08:43:17

因此,小枝文档有点缺乏,但我想说的是,通常您做的是而不是,将列表作为第二个参数传递。第一个参数肯定是一个列表,但您可以在列表函数的小枝单元测试中看到,下一个参数肯定不是,而是您想跳过的元素。如果将该信息与官方文件组合,则可以推断传递附加参数以跳过数组中的其他元素。

例如,

代码语言:javascript
复制
{{ without (list 1 2 3 4) 1 2 3 }}

会给[4]

如果您真的想跳过一个元素是一个完整的列表,那么您可以这样做:

代码语言:javascript
复制
{{ without (list (list 1 2 3) 4) (list 1 2 3) }}

这会给你[4]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62036695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档