Helm Chart - 处理多行文件结果

问题描述 投票:0回答:2

我有一个

ConfigMap
,其中我在其数据属性中包含一个文件,我需要从中替换几个字符串。但我无法将它(“替换”)分成几行,这样它就不会得到一条巨大的线。我该怎么做?

这就是我不想要的:

apiVersion: v1
kind: ConfigMap
data:
{{ (.Files.Glob "myFolder/*.json").AsConfig | indent 2 | replace "var1_enabled" (toString .Values.myVar1.enabled) | replace "var2_enabled" (toString .Values.myVar2.enabled) }}

这就是我正在尝试做的:

apiVersion: v1
kind: ConfigMap
data:
{{ (.Files.Glob "myFolder/*.json").AsConfig | indent 2 |
  replace "var1_enabled" (toString .Values.myVar1.enabled) |
  replace "var2_enabled" (toString .Values.myVar2.enabled) }}

执行此操作的正确语法是什么?

kubernetes yaml kubernetes-helm configmap
2个回答
2
投票

执行此操作的正确语法是什么?

本文档中有很好的描述。实现目标的方法有很多种,这完全取决于具体情况。您拥有该文档中的所有内容。查看与您当前情况最相关的示例

在编写模板时,您可能会发现自己想要将文件的内容注入到模板中。正如我们在前面的章节中看到的,有两种方法可以做到这一点:

  • 使用
    {{ .Files.Get "FILENAME" }}
    获取图表中文件的内容。
  • 使用
    {{ include "TEMPLATE" . }}
    渲染模板,然后将其内容放入图表中。

在 YAML 中插入文件时,了解上面的多行规则是有好处的。通常,插入静态文件的最简单方法是执行以下操作:

myfile: |
{{ .Files.Get "myfile.txt" | indent 2 }}

注意我们如何进行上面的缩进:

indent 2
告诉模板引擎将“myfile.txt”中的每一行缩进两个空格。请注意,我们不会缩进该模板行。这是因为如果我们这样做,第一行的文件内容将缩进两次。

有关更多信息,请参阅 github 上的类似问题堆栈上的问题


编辑:

但是我无法将它(“替换”)分成几行,这样它就不会得到一条巨大的线。我该怎么做?

这是不可能实现的。 Go 模板不支持换行符。有关更多信息,请参阅这个问题。和本文档

模板的输入文本是任何格式的 UTF-8 编码文本。 “动作”——数据评估或控制结构——由“{{”和“}}”分隔;操作之外的所有文本都会原样复制到输出中。除了原始字符串之外,操作可能不会跨越换行符,但注释可以。


0
投票

由于无法在

ConfigMap
将表达式拆分为多行,我终于使用
_helpers.tpl
文件得到了解决方案。

基本上,我创建了一个字典,其中包含我想要替换的所有变量以及要替换的相应新值,然后我迭代该字典并在我的文件配置中进行替换:

{{/*
Manage the files and replace some variables
*/}}
{{- define "myFiles" -}}
{{ $filesConfig := (.Files.Glob "myFolder/*.json").AsConfig }}

{{ $myVars := dict "var1_enabled" (toString .Values.myVar1.enabled) }}
{{ $myVars = merge $myVars (dict "var2_enabled" (toString .Values.myVar2.enabled)) }}

{{ range $key, $value := $myVars }}
{{ $filesConfig = ($filesConfig | replace $key $value) }}
{{ end }}

{{ $filesConfig }}
{{- end -}}

然后我将

ConfigMap
更改为如下所示:

{{- $myFiles := include "myFiles" . -}}
apiVersion: v1
kind: ConfigMap
data:
  {{ $myFiles }}

我对这种语言一无所知,所以如果你知道如何改进它,请随时发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.