values.yaml 文件中的配置来动态决定 ConfigMap 的 data 字段内容。

在 Helm Chart 中,可以通过 values.yaml 文件中的配置来动态决定 ConfigMapdata 字段内容。以下是实现方法:

修改 values.yaml 文件

values.yaml 文件中添加一个字段,用于指定要使用的配置路径。例如:
yaml复制
confPath: "env/conf"
或者
yaml复制
confPath: "tee/conf"

修改 ConfigMap 的模板文件

在 ConfigMap 的模板文件中,使用 {{ .Values.confPath }} 来动态拼接路径。修改后的模板文件如下:
yaml复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.nameOverride }}
data:
{{ (.Files.Glob (printf "%s/*conf" .Values.confPath)).AsConfig | indent 2 }}

解释

  1. {{ .Values.confPath }}:从 values.yaml 文件中获取 confPath 的值。
  2. (printf "%s/*conf" .Values.confPath):将 confPath 的值拼接到路径模式中,例如 "env/conf/*conf""tee/conf/*conf"
  3. (.Files.Glob (printf "%s/*conf" .Values.confPath)).AsConfig:根据拼接后的路径模式,获取对应的文件内容并转换为 ConfigMap 的数据格式。
  4. | indent 2:对生成的内容进行缩进,以符合 YAML 的格式要求。

使用示例

values.yaml 文件

yaml复制
nameOverride: my-configmap
confPath: "env/conf"

ConfigMap 模板文件

yaml复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.nameOverride }}
data:
{{ (.Files.Glob (printf "%s/*conf" .Values.confPath)).AsConfig | indent 2 }}

文件结构

复制
my-chart/
├── Chart.yaml
├── values.yaml
├── templates/
│   └── configmap.yaml
└── env/
    └── conf/
        └── example.conf
└── tee/
    └── conf/
        └── example.conf

部署时的命令

bash复制
helm install my-release ./my-chart
 
 

🔍 搜一下再回答

 
posted @ 2025-03-25 16:04  牧之丨  阅读(102)  评论(0)    收藏  举报