如何解析.env文件(dotenv)与Helm模板?



我正在从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"

相关内容

  • 没有找到相关文章