多次使用的角色的 Ansible 变量

多次使用的角色的 Ansible 变量

我有一个具有一些变量的角色,我多次使用不同的参数,如下所示:

  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 ]"

相关内容