Используйте переменную окружения в качестве целого числа в файле yaml - PullRequest
3 голосов
/ 31 октября 2019

У меня есть приложение в контейнере, которое читает файл YAML, который содержит данные типа

              initializationCount=0
              port=980

Теперь, когда я хочу удалить эти жестко закодированные значения внутри приложения и вытащить их из контейнера. Поэтому я создал configMap со всеми значениями конфигурации. Я использовал ключи карты конфигурации в качестве переменных среды при развертывании модуля.

Моя проблема заключается в том, что, если я хочу использовать эти переменные среды в моем файле yaml, такие как

            initializationCount=${iCount}
            port=${port}

API, которыйчитает этот файл YAML. Выдает исключение формата чисел, поскольку переменные env всегда являются строками. У меня нет контроля над API, который читает мой файл yaml.

Я пробовал

            initializationCount=!!int ${iCount} 

, но он не работает.

1 Ответ

3 голосов
/ 31 октября 2019

Вместо того, чтобы извлекать значения configmap в качестве переменных среды, попробуйте подключить configmap как том во время выполнения.

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

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

Примерно так:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-app
      image: my-app:latest
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: app-config
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  config.yaml: |
    initializationCount=0
    port=980

Документы Kubernetes здесь

...