저는 다양한 플레이북을 포함하는 역할 구조를 가지고 있으며, 플레이북의 모든 작업에 대해 코드를 다시 작성하지 않아도 되도록 그 중 일부에 공개 변수를 할당해야 합니다. 가능합니까?
역할을 호출할 때 변수를 할당할 수 있다는 것을 알고 있지만 이 경우 역할 내의 일부 플레이북에서 작동하려면 변수가 필요합니다.
답변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"
}