Можно ли назначить переменные для выборочных воспроизведений роли?

Можно ли назначить переменные для выборочных воспроизведений роли?

У меня есть структура ролей, которая включает в себя различные плейбуки, и мне нужно назначить общие переменные для некоторых из них, чтобы избежать переписывания кода для каждой задачи в плейбуке. Возможно ли это?

Я понимаю, что мы можем назначать переменные при вызове роли, однако в данном случае мне нужно, чтобы они были применимы к нескольким сценариям в роли.

решение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"
}

Связанный контент