У меня есть структура ролей, которая включает в себя различные плейбуки, и мне нужно назначить общие переменные для некоторых из них, чтобы избежать переписывания кода для каждой задачи в плейбуке. Возможно ли это?
Я понимаю, что мы можем назначать переменные при вызове роли, однако в данном случае мне нужно, чтобы они были применимы к нескольким сценариям в роли.
решение1
Да, это возможно. Используйтеansible_play_nameдля выбора переменных. Например, создать переменные по умолчанию для роли
shell> cat roles/test1/defaults/main.yml
my_vars:
pb1: 'var1'
pb2: 'var2'
default: 'default'
Назначить переменную, выбранную по названию пьесы
shell> cat roles/test1/tasks/main.yml
- set_fact:
myvar: "{{ my_vars[ansible_play_name]|default(my_vars.default) }}"
- debug:
var: myvar
Пособие
- name: pb1
hosts: localhost
roles:
- test1
- name: pb2
hosts: localhost
roles:
- test1
- name: pb9
hosts: localhost
roles:
- test1
давать
PLAY [pb1] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "var1"
}
PLAY [pb2] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "var2"
}
PLAY [pb9] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "default"
}