我正在从Docker迁移到Helm3。我的Docker部署使用.env文件来加载环境变量,参见参考文献。在迁移过程中,我需要同时支持旧方式和新方式,所以如果可以避免的话,我不想更改。env格式。
下面是我的示例。env文件:
key1=value1
key2=value2
然后在我的Helm3部署。我需要:
kind: Deployment
spec:
template:
spec:
containers:
env:
- name: key1
value: "value1"
- name: key2
value: "value2"
.env文件是helm项目根目录,所以我希望我可以根据这个问题做这样的事情,但不确定如何进行:
{{- $files := .Files }}
#Not sure how to select just one file?
{{- range tuple ".env" }}
#Split file by newlines and =
{{- range $line := splitList "n" $files.Get . }}
{{/* Break the line into words */}}
{{- $kv := splitList "=" $line -}}
{{- $k := first $kv -}}
{{ $k }}: {{ last $kv | quote }}
{{- end }}
{{- end }}
这是对我有效的方法,但我愿意接受更好的答案。我唯一不明白的是为什么我需要空行{{"}} -我认为没有它就会插入新行。
我对@Matt的回答的问题是缩进出现了错误。
{{ $file := .Files.Get ".env" | trimSuffix "n" }}
{{- range $line := splitList "n" $file -}}
{{- $kv := splitList "=" $line -}}
{{ "" }}
- name: {{ first $kv }}
value: {{ last $kv | quote }}
{{- end }}
我是这么想的
kind: Deployment
spec:
template:
spec:
containers:
env:
{{ $files := .Files }}
{{- range tuple ".env" -}}
{{- $file := $files.Get . | trimSuffix "n" -}}
{{- range $line := splitList "n" $file -}}
{{- $kv := splitList "=" $line -}}
{{- $k := first $kv -}}
{{- $v := last $kv -}}
{{- printf "- name: "%s"n" $k | indent 8 }}
{{- printf " value: "%s"n" $v }}
{{- end }}
{{- end }}
如果.env
文件放置在helm项目根目录
我用下面的。env文件测试了它:
key1=value1
key2=value2
并得到以下yaml作为输出:
---
kind: Deployment
spec:
template:
spec:
containers:
env:
- name: "key1"
value: "value1"
- name: "key2"
value: "value2"