Helm - Configmap - 仅替换文件内容而不替换文件名

Sun*_*ula 3 kubernetes kubernetes-helm

我已经在配置目录中定义了 application.properties 文件。配置目录位于以下结构中。

config
  application.properties
  application-test.properties
  application-dev.properties
  application-prod.properties
Run Code Online (Sandbox Code Playgroud)

我创建了一个舵图来创建配置图。Helm图表定义如下

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configmap
data:
  {{- (.Files.Glob "config/*").AsConfig | nindent 2 }}
Run Code Online (Sandbox Code Playgroud)

我看到配置映射已创建。

我们使用该envFrom属性通过正在运行的容器中的环境变量来使用 ConfigMap。(这在我的部署 yaml 文件中)

spec:
   containers:
   - envFrom:
     - configMapRef:
         name: nginx-configmap
Run Code Online (Sandbox Code Playgroud)

我看到这些值存储为环境变量。然而,变量都是小写的。

server.port=8080
server.name=localhost
Run Code Online (Sandbox Code Playgroud)

由于这些是环境变量,因此它们必须是大写的并且 . 应替换为 _。所以,我修改了我的图表如下

data:
  {{- (.Files.Glob "config/*").AsConfig | nindent 2 | upper | replace "." "_" }}

Run Code Online (Sandbox Code Playgroud)

生成的configmap如下

  APPLICATION_PROPERTIES: |
    SERVER_PORT = 8080
    SERVER_NAME = LOCALHOST
Run Code Online (Sandbox Code Playgroud)

以下是容器内的环境变量

APPLICATION_PROPERTIES=SERVER_PORT = 8080
SERVER_NAME = LOCALHOST
Run Code Online (Sandbox Code Playgroud)

我的要求是只有文件的内容应该是大写和. 应替换为 _。不应转换文件名。文件名应保持原样。

这能实现吗?

Emr*_*ain 7

尝试这个:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configmap
data:
  {{ $root := . }}
  {{ range $path, $bytes := .Files.Glob "config/*" }}
  {{ base $path }}: '{{ $root.Files.Get $path | nindent 2 | upper | replace "." "_"  }}'
  {{ end }}
Run Code Online (Sandbox Code Playgroud)