역할의 선택적 플레이에 변수를 할당할 수 있나요?

역할의 선택적 플레이에 변수를 할당할 수 있나요?

저는 다양한 플레이북을 포함하는 역할 구조를 가지고 있으며, 플레이북의 모든 작업에 대해 코드를 다시 작성하지 않아도 되도록 그 중 일부에 공개 변수를 할당해야 합니다. 가능합니까?

역할을 호출할 때 변수를 할당할 수 있다는 것을 알고 있지만 이 경우 역할 내의 일부 플레이북에서 작동하려면 변수가 필요합니다.

답변1

예. 이것은 가능하다. 사용ansible_playname변수를 선택합니다. 예를 들어 역할에 대한 기본 변수를 만듭니다.

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

관련 정보