首页 > 解决方案 > 如何在配置映射中读取 env 属性文件

问题描述

我在图表/属性文件夹中有一个属性文件。例如chart/properties/dev是文件,它的内容如下所示

var1=somevalue1
var2=somevalue2


var3=somepwd=

var4=http://someurl.company.com

属性文件中的一些值字符串有一个 =。属性文件中还有一些空行。

chart/configmap.yaml如下所示

apiVersion: v1
kind: ConfigMap
metadata:
  name: env-configmap
  namespace: {{ .Release.Namespace }}
data:
{{ range .Files.Lines "properties"/.Values.env.required.environment }}
  {{ . | replace "=" ": " }}
{{ end }}

生成的yaml文件:

---
# Source: app/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-configmap
  namespace: default
data:

  var1: somevalue1

  var2: somevalue2
  
  var3: somepwd:

  var4: http://someurl.company.com

生成的输出属性条目在值中缺少双引号,因此当值字符串包含特殊字符时,部署会抱怨它。

我期望 configmap.yaml 数据块是具有上述更改的正确 yaml(缩进 2)类文件。通过上述更改,yaml 文件中的每个属性条目之后都有额外的行。当没有空行且没有带 = 的值字符串时,我得到了部分工作。需要帮助才能使其正常工作。

预期的 yaml 文件:

---
# Source: app/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-configmap
  namespace: default
data:
  var1: "somevalue1"
  var2: "somevalue2"
  var3: "somepwd="
  var4: "http://someurl.company.com"

标签: kuberneteskubernetes-helmkubernetes-pod

解决方案


您可以按照 go 模板语法来做到这一点。我像以下作品一样更新 config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: env-configmap
  namespace: {{ .Release.Namespace }}
data:
  {{ range .Files.Lines "properties"/.Values.env.required.environment }}
    {{- if ne . "" -}}
    {{- $parts := splitn "=" 2 . -}} # details about split function http://masterminds.github.io/sprig/string_slice.html
    {{ $parts._0 }}: {{ $parts._1 | quote }}
    {{end}}
  {{ end }}

推荐阅读