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

时间:2019-08-27 07:56:44

标签: kubernetes kubernetes-helm helmfile

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

config
  application.properties
  application-test.properties
  application-dev.properties
  application-prod.properties

我创建了一个舵图来创建configmap。舵图定义如下

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

我看到已创建configmap。

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

spec:
   containers:
   - envFrom:
     - configMapRef:
         name: nginx-configmap

我看到这些值存储为环境变量。但是变量是小写的。

server.port=8080
server.name=localhost

由于这些是env变量,因此它们必须为大写和。应该用_代替。所以,我将图表修改如下

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

生成的配置图如下

  APPLICATION_PROPERTIES: |
    SERVER_PORT = 8080
    SERVER_NAME = LOCALHOST

下面是容器内的env变量

APPLICATION_PROPERTIES=SERVER_PORT = 8080
SERVER_NAME = LOCALHOST

我的要求是,仅文件内容应为大写字母和。应该用_代替。文件名不应该被转换。文件名应保持原样。

这可以实现吗?

1 个答案:

答案 0 :(得分:2)

尝试一下:

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 }}
相关问题