为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在带有 go template 的模板中使用模板

是否可以在带有 go template 的模板中使用模板

Go
慕的地10843 2023-05-08 16:37:16
使用https://golang.org/pkg/text/template/,我有时需要在访问路径中使用变量(用于 kubernetes 部署)。我最终写了类似的东西:{{ if (eq .Values.cluster "aws" }}{{ .Values.redis.aws.masterHost | quote }}{{else}}{{ .Values.redis.gcp.masterHost | quote }}{{end}}我真正想写的是 pretty much {{ .Values.redis.{{.Values.cluster}}.masterHost | quote }},它不能编译。有没有办法写类似的东西?(因此在访问路径中有一种变量)。
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

您可以使用_helpers.tpl文件来定义逻辑并使用值进行操作。

_helpers.tpl

{{/*

Get redis host based on cluster.

*/}}

{{- define "chart.getRedis" -}}

{{- if eq .Values.cluster "aws" -}}

{{- .Values.redis.aws.masterHost | quote -}}

{{- else -}}

{{- .Values.redis.gcp.masterHost | quote -}}

{{- end -}}

{{- end -}}

值.yaml


cluster: local

redis:

  aws:

    masterHost: "my-aws-host"

  gcp:

    masterHost: "my-gcp-host"

并在您的部署中使用它(这里有一个 ConfigMap 示例以使其更短)


配置文件


apiVersion: v1

kind: ConfigMap

metadata:

  name: Configmap

data:

  redis: {{ template "chart.getRedis" . }}

输出:


helm install --dry-run --debug mychart


[debug] Created tunnel using local port: '64712'


...


COMPUTED VALUES:

cluster: local

redis:

  aws:

    masterHost: my-aws-host

  gcp:

    masterHost: my-gcp-host


HOOKS:

MANIFEST:


---

# Source: mychart/templates/configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: Configmap

data:

  redis: "my-gcp-host"

将集群值设置为 aws:


helm install --dry-run --debug mychart --set-string=cluster=aws


[debug] Created tunnel using local port: '64712'


...


COMPUTED VALUES:

cluster: local

redis:

  aws:

    masterHost: my-aws-host

  gcp:

    masterHost: my-gcp-host


HOOKS:

MANIFEST:


---

# Source: mychart/templates/configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: Configmap

data:

  redis: "my-aws-host"


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信