3 回答
TA贡献1856条经验 获得超5个赞
在外部块中定义变量:
{{- $kafka_port := 9094 -}}
{{- if eq $.Values.kafka.create false -}}
{{- $kafka_port = $.Values.kafka.port -}}
{{- end }}
TA贡献1995条经验 获得超2个赞
您的示例非常简短,非常适合您的用例。
但作为一般规则:当您开始在模板中编写代码时,也可能表明您应该在控制器部分(go代码)中编写代码:
type KafkaCfg struct {
port int
create bool
}
const kafkaCreationPort = 9094
func (c KafkaCfg) Port() int {
if c.create {
return kafkaCreationPort
}
return c.port
}
func someWhereElse() {
var data struct {
Values struct {
Kafka KafkaCfg
}
}
data.Values.Kafka.create = true
helmTemplate.Execute(w, data)
}
// in your template :
{{ .Values.Kafka.Port }} {{ /* <- will call the .Port() method */ }}
https://play.golang.org/p/6pNHY0kcegp
TA贡献1906条经验 获得超10个赞
Go 语言(与 Go 编程语言本身不同)没有全局变量。text/template
您可以做的是编写一个帮助程序模板,通常在 中生成以下片段:templates/_helpers.tpl
{{- define "kafka.port" -}}
{{- if .Values.kafka.create -}}
9094
{{- else -}}
{{- .Values.kafka.port -}}
{{- end -}}
此模板在调用时输出端口号;其单个参数应为标准的顶级 Helm 对象。
- name: KAFKA_PORT
value: {{ include "kafka.port" . | quote }}
或者,如果在特定上下文中,您碰巧需要它作为变量,则可以将其包含在其中(使用 Helm include 扩展将调用模板的输出捕获为字符串);但它将仅限于其特定的模板或文件。
{{- $kafkaPort := include "kafka.port" . }}
- name: KAFKA_PORT
value: {{ quote $kafkaPort }}
- name: KAFKA_BROKER_URL
value: kafka://{{ include "kafka.name" . }}:{{ $kafkaPort }}
- 3 回答
- 0 关注
- 151 浏览
添加回答
举报
