是否可以为角色中的选择性扮演分配变量?

是否可以为角色中的选择性扮演分配变量?

我有一个涉及各种剧本的角色结构,我需要为其中一些分配公共变量,以避免为剧本中的每个任务重写代码。这可能吗?

我知道我们可以在调用角色时分配变量,但是在这种情况下,我需要它适用于角色中的一些剧本。

答案1

是的。这是可能的。使用ansible_播放名称选择变量。例如创建角色的默认变量

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

相关内容