У меня есть роль с некоторыми переменными, которые я использовал несколько раз с разными параметрами, как показано ниже:
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 ]"