Получить массив строк из конфигурации helm - PullRequest
0 голосов
/ 16 октября 2018

В конечном итоге я пытаюсь получить массив строк, например ['foo', 'bar'] в моем приложении js из моей конфигурации helm.

. / Vars / dev / organiz.yaml

...
organizations:
  - 'foo'
  - 'bar'
...

. / templates / configmap.yaml

...
data:
  organizations.yaml: |
    organizations: "{{ toYaml .Values.organizations | indent 4 }}"
...

. / templates / deploy.yaml

...
containers:
    args:
       - "--organizations-config"
       - "/etc/app/cfg/organizations.yaml"
...

index.js

...
const DEFAULT_ORGANIZATIONS_PATH = './vars/local/organizations.yaml'
const program = require('commander')

program
  .option(
    '--organizations-config <file path>',
    'The path to the organizations config file.', DEFAULT_ORGANIZATIONS_PATH)
  .parse(process.argv)

function readConfigs () {
  return Promise.all(configs.map(path => {
    return new Promise((resolve, reject) => {
      fs.readFile(path, (err, data) => {
        err ? reject(err) : resolve(yaml.safeLoad(data))
      })
    })
  }))
}

readConfigs()
  .then(configs => {
    let organizationsConfig = configs[3]

    console.log('organizationsConfig = ', organizationsConfig)
    console.log('organizationsConfig.organizations = ', organizationsConfig.organizations)
...

Вывод сверху:

organizationsConfig =  { organizations: '    - foo - bar' }
organizationsConfig.organizations =      - foo - bar

Как я могу изменить мою настройку helm так, чтобы organizationsConfig.organizations было ['foo', 'bar']

1 Ответ

0 голосов
/ 16 октября 2018

Один из способов получить искомый вывод - изменить:

...
organizations:
  - 'foo'
  - 'bar'
...

На:

organizations: |
  [ 'foo', 'bar']

Таким образом, helm обрабатывает его как одну строку.Мы знаем, что он содержит содержимое массива, но helm просто думает, что это строка.Затем мы можем установить эту строку непосредственно в configmap:

organizations: {{ .Values.organizations | indent 4 }}

Что это делает, это то, что диаграмма графана делает в том, что она заставляет пользователя указатьсписок в нужном формате в первую очередь.Возможно, вы бы предпочли взять массив из значений helm и преобразовать его в нужный вам формат, который мне кажется в формате json.Для этого вы можете воспользоваться примером таблицы хранилищ .Таким образом, строка configmap становится такой:

organizations: {{ .Values.organizations | toJson | indent 4 }}

Тогда yaml, который вводит пользователь, может быть таким, каким он был у вас изначально, то есть истинный массив yaml.Я попробовал это, и это работает, но я замечаю, что он дает двойные кавычки, такие как ["foo","bar"]

Другой способ, которым вы можете сделать это, с помощью:

organizations:
  {{- range .Values.organizations }}
    - {{ . }}
  {{- end }}
...