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

使用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 }},它不能编译。

有没有办法写类似的东西?(因此在访问路径中有一种变量)。



慕的地10843
浏览 84回答 1
1回答

ITMISS

您可以使用_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 -}}值.yamlcluster: localredis:  aws:    masterHost: "my-aws-host"  gcp:    masterHost: "my-gcp-host"并在您的部署中使用它(这里有一个 ConfigMap 示例以使其更短)配置文件apiVersion: v1kind: ConfigMapmetadata:  name: Configmapdata:  redis: {{ template "chart.getRedis" . }}输出:helm install --dry-run --debug mychart[debug] Created tunnel using local port: '64712'...COMPUTED VALUES:cluster: localredis:  aws:    masterHost: my-aws-host  gcp:    masterHost: my-gcp-hostHOOKS:MANIFEST:---# Source: mychart/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata:  name: Configmapdata:  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: localredis:  aws:    masterHost: my-aws-host  gcp:    masterHost: my-gcp-hostHOOKS:MANIFEST:---# Source: mychart/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata:  name: Configmapdata:  redis: "my-aws-host"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go