Шаблон Openshift/OKD, если условие /else
В настоящее время у меня есть шаблон OKD/openshift, который предоставляет порт 1883 для определенного контейнера:
ports:
- name: 1883-tcp
port: 1883
containerPort: 1883
protocol: TCP
hostPort: ${MQTT-PORT}
Возможно ли иметь предложение if/else в зависимости от параметров. Например:
ports:
- name: 1883-tcp
port: 1883
containerPort: 1883
protocol: TCP
{{ if ${MQTT-PORT} != 0 }}
hostPort: ${MQTT-PORT}
{{ /if }}
Делая это, я могу иметь один и тот же шаблон во всех моих средах (например, разработка / тестирование / производство), но на основе параметров, заданных созданием, некоторые порты доступны для отладки или тестирования без необходимости перенаправлять их каждый раз с помощью oc команда.
1 ответ
Вы не можете выполнять такую условную обработку на уровне шаблона.
Но, чтобы достичь желаемого результата, вы можете сделать одну из двух вещей.
Вариант 1 Передайте все параметры, необходимые для обработки условия на уровне шаблона, например MQTT-PORT
и сопоставьте правильный номер порта при создании вашего сервиса. Это может быть правильным подходом, так как шаблоны разработаны так, чтобы быть как можно менее логичными: вы принимаете все решения на гораздо более низком уровне.
Вариант 2 Если вы можете ослабить ограничение "тот же шаблон", у нас может быть 2 варианта одного и того же шаблона, один с определенным портом, а другой с параметризованным портом. Единственная проблема с этой опцией - это изменение 2 шаблонов каждый раз при изменении спецификаций вашего приложения / сервиса, что нарушает принцип DRY.
Обновить
Использование Helm с OpenShift может быть лучшим вариантом здесь. Вы можете шаблонизировать свои артефакты, используя условные обозначения Helm, и развернуть приложение Helm в OpenShift. Вот репозиторий с диаграммой Хелма, специально разработанной для OpenShift. Кроме того, вам нужно указать правильное пространство имен, чтобы Tiller мог использовать Helm с OpenShift. Вы можете найти более подробную информацию об этом здесь.