helm configmap包含values.yaml中的客户端脚本

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

我必须将客户端脚本文件包含为configmap并挂载到pod如何在values.yaml中为以下结构创建configmap

app:
  server:
    client-cli1.sh: |
      #!/bin/bash
      echo "Hello World"
    client-cli2.sh: |
      #!/bin/bash
      echo "Hello World"

这是configmap文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: cli-config
data: 
{{ range  $key, $val:= .Values.app.server }}
  {{ $key }}: |
    {{ $val  }}
{{ end }}

我收到错误“错误将YAML转换为JSON:yaml:第14行:找不到预期':'”注意:无法更改结构并且无法使用文件功能,因为构建发生在其他地方只会提供values.ymal。

如何解析这个。

kubernetes kubernetes-helm
2个回答
1
投票

试试这个:

apiVersion: v1
kind: ConfigMap
metadata:
  name: cli-config
data: 
{{ toYaml .Values.app.server | indent 2 }}

0
投票

您可以使用helm template和相同的-f--set标志来查看模板的输出。这是调试此类问题的关键,您可以在阅读之前尝试这一点,以了解出现了什么问题以及是否已修复它。

Kubernetes消耗的YAML文件对缩进非常敏感。 Helm的Go文本/模板引擎并不特别了解YAML结构。你可能会看到脚本第二行的echo根本没有缩进,这打破了YAML的缩进规则。

这有两个答案:

  1. 使用indent模板功能缩进您注射的整个身体。请注意,这包括第一行,因此您不需要在YAML模板中缩进该行。 data: {{ range $key, $val:= .Values.app.server }} {{ $key }}: | {{ $val | indent 4 }} {{ end }}
  2. 赫尔姆有several undocumented extensions。特别是,您可以使用toJson将字符串转换为JSON字符串,包括转义换行符等详细信息。 YAML 1.2旨在成为JSON的超集,因此这应该有效: data: {{ range $key, $val:= .Values.app.server }} {{ $key }}: {{ $val | toJson }} {{ end }} 就此而言,你可以使用toYaml让Helm为你努力工作: data: {{ .Values.app.server | toYaml | indent 2 }}

检查helm template以确保它们输出您期望的结果。第一个选项将产生更易读的ConfigMap YAML;第二个是更简洁的模板;但两者都应该是等价的。

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