-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
It is not possible to concatenate several environment variables into one value #72
Comments
Привет. Спасибо за PR. Тем не менее, не до конца понятно почему нельзя объявить 3 переменные: |
Изначально так и делали ...
containers:
- name: nginx
image: nginx
...
- name: app
image: {{ registry }}/{{ path }}:{{ tag }}
...
... Для большинства сервисов подобного шаблона достаточно, но в последнее время у нас начали появляться сервисы в которых по 3-5 контейнеров в одном деплое. Для каждого сервиса необходимо было писать свой шаблон, описывая все контейнеры. Из-за этого объем работы увеличивался и весь смысл шаблонизации пропадал (быстрее написать статичный манифест, собственно с чего все и начиналось). containers:
{%- for name, c_opts in deploy_opts.containers.items() -%}
- name: {{ name }}
image: {{ c_opts.image }}
...
{%- endfor %} staging:
deployments:
service_name:
containers:
app:
image: "{{ env='CI_REGISTRY' }}/{{ service_name }}:{{ env='APP_TAG' }}"
...
nginx:
image: nginx
... И вот тут возникает проблема из-за того, что часть контейнеров находятся в других регистри и перенести переменную регистри с тэгом в шаблон становится зубодробительным с описанием множества условий. А возможности конкатенации строк из нескольких переменных окружения невозможна, что значительно бы упрощала шаблон. Ну и как писал изначально, у нас несколько приватных регистри и в зависимости от ДЦ используется конкретный, определенный в глобальной переменной CI_REGISTRY GitLab-а. И в текущей реализации количество шаблонов приближается к количеству сервисов и k8s-handle становится больше похож по функционалу на envsubst. |
Сейчас у нас в каждом ДЦ один и тот же образ k8s-handle, вместе с шаблонами по одному для каждого типа манифестов. |
Хорошо, я очень хочу помочь и добавить этот функционал, но помоги мне разобраться пожалуйста. staging:
deployments:
service_name:
containers:
app:
registry: "{{ env='CI_REGISTRY' }}"
path: service-path
tag: "{{ env='APP_TAG' }}"
...
nginx:
image: nginx
... containers:
{%- for name, c_opts in deploy_opts.containers.items() -%}
- name: {{ name }}
image: "{{ c_opts.registry | defult('default-registry') }}/{{ c_ops.path }}:{{ c_ops.tag}}"
...
{%- endfor %} |
в таком случае для контейнера nginx containers:
- name:
image: /nginx: "invalid reference format", как следствие контейнер с nginx не запустится. Можно прописывать логику с if else, но получится как я уже писал "зубодробительно". |
Вышло в релизе https://github.com/2gis/k8s-handle/releases/tag/0.3.3 |
@otherNoscript спасибо за PullRequest и интерес к проекту! |
Привет.
Столкнулся с невозможностью одновременного использования нескольких переменных окружения при объявлении переменной в config.yaml. Небольшой пример:
Мы при развертывании сервиса иногда создаем более одного деплоя, registry используем как приватные так и публичные, да еще и registry приватных у нас несколько. Так же при каждом деплое у нас выбирается образ по тэгу в git. Для того, что бы не создавать множество шаблонов деплоя, мы сделали один универсальный, в цикле которого добавляем все необходимые образы. По этому все образы объявляются в config.yaml
Так вот при такой записи в случае с образом nginx все ОК, в случае с контейнером app после создания манифеста имеем "{{ env='CI_REGISTRY' }}/service-image:1.0.0". Заглянул в код и понял, что в текущей реализации не получится из нескольких переменных окружения получить нужное нам имя образа.
The text was updated successfully, but these errors were encountered: