TLDR;
- name: push docker container
vars:
docker_name: "{{ vars[build_type].dockerName }}"
docker_image:
name: "{{ docker.registery }}/{{ docker_name }}"
source: build
build:
nocache: true
path: "{{ travis.base_build_path }}"
tag: "{{ ucd.component_version }}"
push: yes
нотация Vars
Ansible имеет 2 нотации для доступа к элементам dict:
- Точечная нотация:
{{ my_var.my_key.my_subkey }}
- Обозначение в скобках:
{{ my_var['my_key']['my_subkey'] }}
Вы можете смешивать эти два обозначения, когда вы будете sh
{{ my_var.my_key['my_subkey'] }}
{{ my_var['my_key'].my_subkey }}
Обратите внимание, что к спискам можно обращаться одинаково, используя их индекс:
{{ my_list.0 }}
{{ my_list[0] }}
Варь "точка доступа"
Каждое из ваших определений среды - вар первого уровня. Вы можете обычно вызывать эти переменные в выражении шаблона напрямую, например, {{ master.dockerName }}
. Но эти переменные также доступны через первый уровень vars
dict, так что следующее в точности эквивалентно {{ vars.master.dockerName }}
.
Наконец ...
Зная выше и что вы отправляете имя соответствующего ключа в переменной build_type
ожидаемое значение можно получить с помощью: {{ vars[build_type].dockerName }}
Не относящегося к вашему текущему вопросу
Относительно вашего условия include_role
:
when: build_type in "develop master UAT"
Обратите внимание, что это будет работать для значения "develop"
, как вы ожидаете, но также будет соответствовать для "AT"
, "mast"
, "devel"
или даже "op mas"
. Это может нарушить остальные операции в случае опечатки.
Чтобы убедиться, что вы соответствуете точному слову, поместите свои совпадения в список, и сравнение переместится с "is it a substring of"
на "is it an element of"
when: build_type in ["develop", "master", "UAT"]