3 回答

TA貢獻1856條經(jīng)驗 獲得超5個贊
在外部塊中定義變量:
{{- $kafka_port := 9094 -}}
{{- if eq $.Values.kafka.create false -}}
{{- $kafka_port = $.Values.kafka.port -}}
{{- end }}

TA貢獻1995條經(jīng)驗 獲得超2個贊
您的示例非常簡短,非常適合您的用例。
但作為一般規(guī)則:當您開始在模板中編寫代碼時,也可能表明您應該在控制器部分(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條經(jīng)驗 獲得超10個贊
Go 語言(與 Go 編程語言本身不同)沒有全局變量。text/template
您可以做的是編寫一個幫助程序模板,通常在 中生成以下片段:templates/_helpers.tpl
{{- define "kafka.port" -}}
{{- if .Values.kafka.create -}}
9094
{{- else -}}
{{- .Values.kafka.port -}}
{{- end -}}
此模板在調(diào)用時輸出端口號;其單個參數(shù)應為標準的頂級 Helm 對象。
- name: KAFKA_PORT
value: {{ include "kafka.port" . | quote }}
或者,如果在特定上下文中,您碰巧需要它作為變量,則可以將其包含在其中(使用 Helm include 擴展將調(diào)用模板的輸出捕獲為字符串);但它將僅限于其特定的模板或文件。
{{- $kafkaPort := include "kafka.port" . }}
- name: KAFKA_PORT
value: {{ quote $kafkaPort }}
- name: KAFKA_BROKER_URL
value: kafka://{{ include "kafka.name" . }}:{{ $kafkaPort }}
- 3 回答
- 0 關注
- 92 瀏覽
添加回答
舉報