首页 > 解决方案 > Helm3:在 Configmap 中递归创建 .properties 文件

问题描述

以下是我拥有的文件: users-values.yaml文件:

users:
  - foo
  - baz

other-values.yaml文件:

foo_engine=postgres
foo_url=some_url
foo_username=foofoo
baz_engine=postgres
baz_url=some_url
baz_username=bazbaz

config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-catalog
data:
  {{- range $user := .Values.users }}
  {{ . }}: |
    engine.name={{ printf ".Values.%s_engine" ($user) }}
    url={{ printf ".Values.%s_url" ($user) }}
    username={{ printf".Values.%s_username" ($user) }}
  {{- end }}

deployment-coordinator.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "{{ .Release.Name }}-coordinator"
  labels:
    app.kubernetes.io/name: "{{ .Release.Name }}-coordinator"
spec:
  replicas: 1
...
  template:
    metadata:
      labels:
        app.kubernetes.io/name: "{{ .Release.Name }}-coordinator"
    spec:
      volumes:
        - name: config
          configMap:
            name: test-catalog
...
          volumeMounts:
            - name: config
              mountPath: "/etc/config"

然后,我做一个helm install test mychart.

当我exec进入 pod 和cdto 时/etc/config,我希望在其中看到foo.propertiesbaz.properties文件,每个文件看起来像:

  foo.properties: |
    engine.name=postgres
    url=some_url
    username=foofoo
  baz.properties: |
    engine.name=postgres
    url=some_url
    username=bazbaz

下面 Pawel 的回答解决了我之前遇到的错误

unexpected bad character U+0022 '"' in command

但是,文件仍然没有在/etc/config目录中创建。所以,我想知道是否可以使用 helm range 创建 .properties 文件,正如我在config.yaml上面的文件中提到的那样。

我想以下面的方式这样做的原因是因为我有超过 10 个用户来创建 .properties 文件,而不仅仅是 foo 和 baz。只是认为如果可能的话我可以在它上面做一个 for 循环会更容易。

data:
  {{- range $user := .Values.users }}
  {{ . }}: |
    engine.name={{ printf ".Values.%s_engine" ($user) }}
    url={{ printf ".Values.%s_url" ($user) }}
    username={{ printf".Values.%s_username" ($user) }}
  {{- end }}

标签: kuberneteskubernetes-helmhelmfile

解决方案


推荐阅读