Создайте с помощью Helm json анализируемых конфигурационных карт k8s, содержащих списки цитируемых элементов. - PullRequest
0 голосов
/ 03 августа 2020

Я пытался изменить диаграмму управления ( эта ), и есть один шаблон для создания configMap.

Карта конфигурации затем загружается и анализируется как json разными модулями.

Дело в том, что мне нужно в какой-то момент поместить список строк в json. При передаче только значения в шаблоне список не цитировался. Затем я попытался использовать диапазон, чтобы делать это поэлементно, но затем получил последнюю запятую. А синтаксический анализатор json, используемый мной развертываемым образом (над которым я не контролирую), не будет принимать нестрогие json. Т.е. последний элемент в списке не может иметь завершающую запятую.

Вот пример values.yaml:

val:
  - "a"
  - "b"
  - "c"

И некоторые template.tpl:

apiVersion: v1
kind: ConfigMap
metadata:
  name: some-configmap
data:
  cfg.json: |
    {
      "val": [{{ range .Values.val }}{{ . | quote }},{{ end }}]
    }

Но это дает:

{
  "val": ["a","b","c",]
}

Что отклоняется парсером json с сообщением вида:

internal/modules/cjs/loader.js:1008
    throw err;
    ^

SyntaxError: /etc/config/..2020_08_03_15_32_26.221540866/pelias.json: Unexpected token ] in JSON at position 1744
    at JSON.parse (<anonymous>)
    at Object.Module._extensions..json (internal/modules/cjs/loader.js:1005:27)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Module.require (internal/modules/cjs/loader.js:848:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at getConfig (/code/pelias/schema/node_modules/pelias-config/index.js:66:21)
    at Object.generate (/code/pelias/schema/node_modules/pelias-config/index.js:24:18)
    at Object.<anonymous> (/code/pelias/schema/scripts/create_index.js:2:41)
    at Module._compile (internal/modules/cjs/loader.js:955:30)

Если я передаю только пустые списки, парсер json счастлив, но мне нужны эти аргументы для остальной части процесса.

Есть ли способ удалить последнюю запятую или даже более элегантно загрузить список строк с помощью шаблонов руля?

(я знаю, что могу жестко закодировать значение в своих шаблонах, но я бы хотел, чтобы это развертывание можно было повторно использовать с другими параметрами)

Заранее спасибо.

[EDIT ]

Я нашел несколько работающую стратегию, выполнив: "val": [{{ join "," .Values.val }}]

Единственная проблема сейчас в том, что мне нужно использовать двойные кавычки в моем values.yaml:

val:
  - '"a"'
  - '"b"'
  - '"c"'

Это нормально, но я был бы заинтересован в более чистом решении, если оно есть у кого-нибудь.

...