是否可以為角色中的選擇性扮演分配變數?

是否可以為角色中的選擇性扮演分配變數?

我有一個涉及各種劇本的角色結構,我需要為其中一些分配公共變量,以避免為劇本中的每個任務重寫程式碼。這可能嗎?

我知道我們可以在調用角色時分配變量,但是在這種情況下,我需要它適用於角色中的一些劇本。

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

相關內容