Kubernetes | Helm values.yaml - Как получить доступ к массиву с помощью динамического индекса - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть values.yaml, где мне нужно упомянуть несколько портов, например:

kafkaClientPort:
  - 32000
  - 32001
  - 32002

В yaml для statefulset мне нужно получить значение, используя порядковый номер.Поэтому для kf-0 мне нужно поместить первый элемент kafkaClientPort;и для kf-1, второй элемент и так далее.Я пытаюсь сделать следующее:

args:
- "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://$(MY_NODE_NAME):{{ index .Values.kafkaClientPort ${HOSTNAME##*-} }}"

Но это показывает ошибку.

Пожалуйста, посоветуйте, как лучше всего получить динамический доступ к values.yaml значению.

1 Ответ

0 голосов
/ 21 ноября 2018

Хитрость в том, что шаблон Helm ничего не знает об ординале в вашем наборе с состоянием.Если вы посмотрите на диаграмму Шлема Кафки , вы увидите, что они используют базовый порт 31090, а затем добавляют порядковый номер, но это замещение выполняется после того, как шаблон создан.Примерно так в ваших значениях:

"advertised.listener": |-
   PLAINTEXT://kafka.cluster.local:$((31090 + ${KAFKA_BROKER_ID}))

, а затем в файле шаблона использует экспорт bash в command с printf, который является псевдонимом для fmt.Sprintf.Примерно так в вашем случае:

    command:
    - sh
    - -exc
    - |
      unset KAFKA_PORT && \
      export KAFKA_BROKER_ID=${HOSTNAME##*-} && \
      export "KAFKA_ADVERTISED_LISTENERS={{ printf "%s" $advertised.listener }} \\
      ...
...