用 helm 模板文件有条件地设置一个变量,用于整个模板文件

我想在 helm 模板文件的顶部有条件地设置一个“go”变量,然后稍后在模板文件中使用它。以下是我尝试不起作用的方法:


在我的模板文件的顶部,我执行以下操作:


{{- if eq $.Values.kafka.create true -}}

{{- $kafka_port := 9094 -}}

{{- else -}}

{{- $kafka_port := $.Values.kafka.port -}} 

{{- end }}

但是当我尝试执行“helm install”时,我收到一个解析错误,我稍后在模板文件中使用$kafka_port。具体错误是:


Error: parse error at (tombolo/templates/tom-node-launch.yaml:89): 未定义的变量 “$kafka_port”


冉冉说
浏览 152回答 3
3回答

RISEBY

在外部块中定义变量:{{- $kafka_port := 9094 -}}{{- if eq $.Values.kafka.create false -}}{{- $kafka_port = $.Values.kafka.port -}} {{- end }}

拉风的咖菲猫

您的示例非常简短,非常适合您的用例。但作为一般规则:当您开始在模板中编写代码时,也可能表明您应该在控制器部分(go代码)中编写代码:type KafkaCfg struct {&nbsp; &nbsp; port&nbsp; &nbsp;int&nbsp; &nbsp; create bool}const kafkaCreationPort = 9094func (c KafkaCfg) Port() int {&nbsp; &nbsp; if c.create {&nbsp; &nbsp; &nbsp; &nbsp; return kafkaCreationPort&nbsp; &nbsp; }&nbsp; &nbsp; return c.port}func someWhereElse() {&nbsp; &nbsp; var data struct {&nbsp; &nbsp; &nbsp; &nbsp; Values struct {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Kafka KafkaCfg&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; data.Values.Kafka.create = true&nbsp; &nbsp; helmTemplate.Execute(w, data)}// in your template :{{ .Values.Kafka.Port }} {{ /* <- will call the .Port() method */ }}https://play.golang.org/p/6pNHY0kcegp

隔江千里

Go 语言(与 Go 编程语言本身不同)没有全局变量。text/template您可以做的是编写一个帮助程序模板,通常在 中生成以下片段:templates/_helpers.tpl{{- define "kafka.port" -}}{{- if .Values.kafka.create -}}9094{{- else -}}{{- .Values.kafka.port -}}{{- end -}}此模板在调用时输出端口号;其单个参数应为标准的顶级 Helm 对象。- name: KAFKA_PORT&nbsp; value: {{ include "kafka.port" . | quote }}或者,如果在特定上下文中,您碰巧需要它作为变量,则可以将其包含在其中(使用 Helm include 扩展将调用模板的输出捕获为字符串);但它将仅限于其特定的模板或文件。{{- $kafkaPort := include "kafka.port" . }}- name: KAFKA_PORT&nbsp; value: {{ quote $kafkaPort }}- name: KAFKA_BROKER_URL&nbsp; value: kafka://{{ include "kafka.name" . }}:{{ $kafkaPort }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go