역할에 선택적인 플레이를 위한 변수를 할당하는 것이 가능한가요?

역할에 선택적인 플레이를 위한 변수를 할당하는 것이 가능한가요?

나는 다양한 플레이북을 포함하는 역할 구조를 갖고 있으며 플레이북의 모든 작업에 대한 코드를 다시 작성하지 않도록 이들 중 몇 가지에 공통 변수를 할당해야 합니다. 이것이 가능한가?

역할을 호출할 때 변수를 할당할 수 있다는 것을 이해합니다. 하지만 이 경우 역할의 몇 가지 플레이북에 적용 가능해야 합니다.

답변1

예. 있을 수있다. 사용ansible_play_name변수를 선택합니다. 예를 들어 역할의 기본 변수를 만듭니다.

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

관련 정보