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

3

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

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

我已经创建了一个Helm Chart来创建ConfigMap。Helm Chart定义如下:

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

我看到配置映射已经创建。
我们使用envFrom属性在运行的容器中通过环境变量消耗ConfigMap。(这是我的部署yaml文件中的内容)。
最初的回答:我注意到配置映射已经被创建。我们正在使用envFrom属性在运行的容器中通过环境变量来使用ConfigMap(这是我部署yaml文件中的内容)。
spec:
   containers:
   - envFrom:
     - configMapRef:
         name: nginx-configmap

我注意到这些值被存储为环境变量。但是,这些变量都是小写的。最初的回答:我看到这些值被存储为环境变量。然而,这些变量都是小写的。
server.port=8080
server.name=localhost

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

最初的回答

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


最初的回答:

生成的配置文件如下所示

  APPLICATION_PROPERTIES: |
    SERVER_PORT = 8080
    SERVER_NAME = LOCALHOST

以下是容器内的环境变量

APPLICATION_PROPERTIES=SERVER_PORT = 8080
SERVER_NAME = LOCALHOST

我的要求是仅将文件内容变成大写字母,并用下划线替换掉 "."。文件名不应更改,文件名应保持原样。

这个要求可以实现吗?

1个回答

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 }}

在添加时,我看到配置映射被设置为application.properties: ' SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICE '在Docker容器内部,我看到application.properties= SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICEecho $SERVER_PORTecho $application.properties .properties这个值的设置是不正确的。 - Sunil Gajula
你能再解释一下吗?我从你的评论中没有理解清楚。 - Emruz Hossain
在configmap中,我添加了以下内容:数据: {{ range $path, $bytes := .Files.Glob "config/*" }} {{ base $path }}:'{{ $.Files.Get $path | nindent 2 | upper | replace "." "_" }}' {{ end }}

`kubectl describe cm 数据

application.properties:

SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICE`这里所有的键值对都被作为字符串而不是configmap来处理。想要传递参数AsConfig如下所示 {{- (.Files.Glob "foo/*").AsConfig | nindent 2 }}
- Sunil Gajula
在容器内部,env被设置如下: application.properties= SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICE当我打印echo $SERVER_PORT的值时,它是空的。 - Sunil Gajula
以与您将.替换为_的方式相同,将=替换为:。 - Emruz Hossain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接