helm:如何在toYaml函数后删除换行符

时间:2018-02-21 13:52:08

标签: kubernetes-helm

从官方文件: 当模板引擎运行时,它会删除{{和}}内的内容,但它会完全保留剩余的空格。可以使用特殊字符修改模板声明的大括号语法,以告诉模板引擎选择空白。 {{ - (添加了破折号和空格)表示应该左边的空格,而 - }}表示应该消耗右边的空格。

但我尝试所有变化都没有成功。有没有人解决如何将yaml放在yaml里面?我不想使用range

apiVersion: v1
kind: Pod
metadata:
  name: app
  labels:
    app: app
spec:
  containers:
  - name: app
    image: image
    volumeMounts:
      - mountPath: test
        name: test
    resources:
{{ toYaml .Values.pod.resources | indent 6 }}
  volumes:
  - name: test
    emptyDir: {}

当我在没有-}}的情况下使用此代码时,它会添加换行符:

    resources:
      limits:
        cpu: 100m
        memory: 128Mi
      requests:
        cpu: 20m
        memory: 64Mi

  volumes:
  - name: test
    emptyDir: {}

但是当我使用-}}时,它会与另一个位置结合。

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 20m
    memory: 64Mi
  volumes: <- shoud be in indent 2
- name: test
  emptyDir: {}

values.yaml是

pod:
  resources:
    requests:
      cpu: 20m
      memory: 64Mi
    limits:
      cpu: 100m
      memory: 128Mi

3 个答案:

答案 0 :(得分:1)

以下变体是正确的:

{{ toYaml .Values.pod.resources | indent 6 }} 

添加换行符不会在此处产生任何问题。

我已尝试过您的pod.yaml并收到以下错误:

$ helm install .
Error: release pilfering-pronghorn failed: Pod "app" is invalid: spec.containers[0].volumeMounts[0].mountPath: Invalid value: "test": must be an absolute path

这意味着mountPath的{​​{1}}应该类似于volumeMounts

因此,以下/mnt效果非常好,并使用我们在pod.yaml中定义的确切资源创建了一个pod:

values.yaml

答案 1 :(得分:0)

@Nickolay,它是一个有效的yaml文件,根据helm - 至少是helm barfs并说:

  

将YAML转换为JSON时出错:yaml:第51行:找不到预期的密钥

对我来说,第51行是空白区域 - 以下任何内容都不应缩进到同一级别

答案 2 :(得分:0)

这对我有用:

{{1}}