图表值内的多行字符串

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

我正在尝试创建一个舵图。在部署文件夹中,我有一个如下所示的 configmap 模板:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config
data:
  app-properties: |
    {{ .Values.app.appProperties }}

我的默认值是这样的:

app:
  appProperties: |
    line1

该代码似乎可以工作,但我需要在 app.appProperties 中添加更多行,当我在其中添加更多行时,如下所示:

app:
  appProperties: |
    line1
    line2
    line3

我得到:

upgrade.go:142: [debug] preparing upgrade for myhelm
Error: UPGRADE FAILED: YAML parse error on helm/templates/cms.yml: error converting YAML to JSON: yaml: line 11: could not find expected ':'
helm.go:84: [debug] error converting YAML to JSON: yaml: line 11: could not find expected ':'
YAML parse error on helm/templates/cms.yml

我期望的模板化定义应该是:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config
data:
  app-properties: |
    line1
    line2
    line3

正确的做法是什么?

yaml kubernetes-helm
1个回答
2
投票

这里的原因主要是因为缩进不正确,您可以通过运行带有

helm template
标志的
--debug
来验证。您可以仅将
nindent 4
与您的值一起使用,因为这似乎是正确的缩进级别,或者如果多行字符串具有一些您想要在配置映射中移动的模板,也可以使用
tpl

{{- /*
ConfigMap template 
*/ -}}

apiVersion: v1
kind: ConfigMap
metadata:
  name: config
data:
  app-properties:
    {{- .Values.app.appProperties | nindent 4 }}
---
## Values File  
app:
  appProperties: |
    line1
    line2
    line3

结果

➜  $ helm template ./         
---
# Source: my-local-functions/templates/multi-line-string.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: config
data:
  app-properties:
    line1
    line2
    line3
  • 具有
    tpl
    功能的示例
{{- /*
In the templates directory somefile.yaml
*/ -}}

multiLineString:
  {{- tpl .Values.multiLine . | nindent 2 }}

---

## Values Files

extraFruits: banana
multiLine: |
  I am a line
  {{ .Values.extraFruits }}

结果:

➜  $ helm template ./         
---
# Source: my-local-functions/templates/somefile.yaml
multiLineString:
  I am a line
  banana

希望这有帮助。

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