helm configmap включает клиентский скрипт в values.yaml - PullRequest
1 голос
/ 26 апреля 2019

Я должен включить файл клиентского скрипта в качестве configmap и смонтировать в pod как создать configmap для структуры ниже в values.yaml

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.

как разобрать это.

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Попробуйте это:

apiVersion: v1
kind: ConfigMap
metadata:
  name: cli-config
data: 
{{ toYaml .Values.app.server | indent 2 }}
0 голосов
/ 26 апреля 2019

Вы можете использовать helm template с такими же флагами -f и --set, чтобы увидеть, каков вывод вашего шаблона. Это ключ к устранению проблем такого рода, и вы можете попробовать это, прежде чем продолжить, чтобы понять, что идет не так, и если вы это исправили.

Файлы YAML, которые использует Kubernetes, невероятно чувствительны к отступам. Текстовый / шаблонный движок Helm Go не особенно осведомлен о структуре YAML. Вероятно, вы увидите, что echo во второй строке скрипта вообще не имеет отступов, что нарушает правила отступов YAML.

На это есть два ответа:

  1. Используйте шаблонную функцию indent для отступа всего тела того, что вы вводите. Обратите внимание, что это включает самую первую строку, поэтому вам не нужно делать отступ в строке в шаблоне YAML.

    data: 
    {{ range  $key, $val:= .Values.app.server }}
      {{ $key }}: |
    {{ $val | indent 4 }}
    {{ end }}
    
  2. Шлем имеет несколько недокументированных расширений . В частности, вы можете использовать toJson для преобразования строки в строку JSON, включая такие детали, как экранирование строк новой строки. YAML 1.2 предназначен для расширения JSON, поэтому он должен работать:

    data: 
    {{ range  $key, $val:= .Values.app.server }}
      {{ $key }}: {{ $val | toJson }}
    {{ end }}
    

    В этом отношении вы можете использовать toYaml, чтобы заставить Хелма сделать тяжелую работу за вас:

    data:
    {{ .Values.app.server | toYaml | indent 2 }}
    

Проверьте с помощью helm template, чтобы убедиться, что они выводят то, что вы ожидаете. Первый вариант создаст более читаемый YAML ConfigMap; второй более лаконичный шаблон; но оба должны быть эквивалентны.

...