【问题标题】:Helm - Configmap - Replace only the contents of file and not File NamesHelm - Configmap - 仅替换文件的内容而不是文件名
【发布时间】:2019-12-31 08:43:51
【问题描述】:

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

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

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

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

因为这些是环境变量,所以它们必须是大写的和 .应该换成_。所以,我修改了我的图表如下

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

生成的configmap如下

  APPLICATION_PROPERTIES: |
    SERVER_PORT = 8080
    SERVER_NAME = LOCALHOST

下面是容器内的环境变量

APPLICATION_PROPERTIES=SERVER_PORT = 8080
SERVER_NAME = LOCALHOST

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

这可以实现吗?

【问题讨论】:

    标签: kubernetes kubernetes-helm helmfile


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 添加时,我看到 configmap 设置为 application.properties: ' SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICE ' 在 docker 容器内,我看到 application.properties= SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICE echo $SERVER_PORT echo $application.properties .properties 这个值设置不正确。
    • 你能解释一下吗。我没有从你的评论中得到它。
    • 在configmap中,我添加了如下data: {{ range $path, $bytes := .Files.Glob "config/*" }} {{ base $path }}: '{{ $.Files.Get $path | nindent 2 | upper | replace "." "_" }}' {{ end }}kubectl describe cm Data ==== application.properties: ---- SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICE这里所有的键值对都被当作字符串而不是configmap。想传递下面提到的参数AsConfig{{- (.Files.Glob "foo/*").AsConfig | nindent 2 }}
    • 在容器内,env设置如下application.properties= SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICEecho $SERVER_PORT,当我打印该值时,它为null。
    • = 替换为:,方法与将. 替换为_ 相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2012-04-30
    相关资源
    最近更新 更多