Назад | Перейти на главную страницу

Переменная Ansible для ролей, используемых несколько раз

У меня есть роль с некоторыми переменными, которые я использовал несколько раз с разными параметрами, как показано ниже:

  roles:
    - role: my_role
      vars:
        role_uuid: uuud_1
        first_param: first
    - role: my_role
      vars:
        role_uuid: uuid_2
        second_param: second

Проблема в том, что когда моя роль выполняется:

Чтобы продолжить, оба экземпляра имеют параметры first_param и второй_парам устанавливать.

Кажется, что параметры экземпляров роли моя роль объединяются, то действительно отличается только часть, которая отличается (здесь role_uuid).

Есть ли способ избежать этого слияния?

Это ожидается с ролями, определенными в roles раздел.

Использовать include_role или import_role модуль в tasks (или pre_tasks), чтобы избежать проблемы:

tasks:
  - include_role:
      name: my_role
    vars:
      role_uuid: uuud_1
      first_param: first
  - include_role:
      name: my_role
    vars:
      role_uuid: uuud_2
      second_param: second

Вариант - динамически включать вары в моя роль

tasks:
  - include_vars: "{{ role_id }}"
  - debug: msg="{{ role_id }}.first_param [ {{ first_param|default('undefined') }} ]"
  - debug: msg="{{ role_id }}.second_param [ {{ second_param|default('undefined') }} ]"

$ cat vars / id_1

first_param: 'first'

$ cat vars / id_2

second_param: 'second'

Затем запустите игру

$ cat play.yml

- hosts: localhost
  tasks:
  - include_role:
      name: my_role
    vars:
      role_id: 'id_1'
  - include_role:
      name: my_role
    vars:
      role_id: 'id_2'

$ ansible-playbook play.yml | grep msg

"msg": "id_1.first_param [ first ]"
"msg": "id_1.second_param [ undefined ]"
"msg": "id_2.first_param [ undefined ]"
"msg": "id_2.second_param [ second ]"