![多次使用的角色的 Ansible 变量](https://linux22.com/image/725954/%E5%A4%9A%E6%AC%A1%E4%BD%BF%E7%94%A8%E7%9A%84%E8%A7%92%E8%89%B2%E7%9A%84%20Ansible%20%E5%8F%98%E9%87%8F.png)
我有一个具有一些变量的角色,我多次使用不同的参数,如下所示:
roles:
- role: my_role
vars:
role_uuid: uuud_1
first_param: first
- role: my_role
vars:
role_uuid: uuid_2
second_param: second
问题是,当我的角色被执行时:
- 第一个角色实例,uuid_1,有一个参数第二个参数设置为第二
- 第二个角色实例uuid_2,有一个参数第一个参数设置为第一的。
继续,两个实例都有参数第一个参数和第二个参数放。
看起来角色实例的参数我的角色合并后,只有不同的部分才是真正不同的(这里role_uuid)。
有什么办法可以避免这种合并吗?
答案1
这是在本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
答案2
一个选项是动态地包含变量我的角色
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 ]"