다음 스크립트를 사용합니다.
~ # cat play.yml
- name: MAIN PLAY
hosts: localhost
gather_facts: no
vars:
status:
check1: present
check2: ""
tasks:
- debug:
var: status
- name: Verify status
set_fact:
status_old: "{{status}}"
status_new:
check1: "{{'present' if status.check1 is defined and status.check1 != '' else 'absent'}}"
check2: "{{'present' if status.check2 is defined and status.check2 != '' else 'absent'}}"
- name: Combine facts
set_fact:
status: "{{status|combine(status_old, status_new, recursive=True) }}"
- debug:
var: status
산출:
PLAY [MAIN PLAY] **********************************************************************************************************************************************************************************************************************************************************
TASK [debug] **************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"status": {
"check1": "present",
"check2": ""
}
}
TASK [Verify status] ******************************************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Combine facts] ******************************************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug] **************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"status": {
"check1": "present",
"check2": "absent"
}
}
보시다시피 이것이 작동하지만 두 번째 임무는 name: Combine facts
쇼에 있어야 합니다.
질문:
변수가 존재하고 감지된 조건에 따라 특정 상태를 설정할 수 있는지 확인하는 더 좋은 방법이 있습니까?
여기서 목표는 작업을 제거 하고 "블록"을 사용하지 않고 name: Combine facts
작업 아래에 모든 것을 설정하는 것입니다 .name: Verify status
나는 또한 이것을하려고 노력하고 있습니다 :
- name: Verify status
set_fact:
status: "{{ status |combine(status_old, status_new, recursive=True) }}"
vars:
status_old: "{{status}}"
status_new:
check1: "{{'present' if status.check1 is defined and status.check1 != '' else 'absent'}}"
check2: "{{'present' if check2 is defined and check2 != '' else 'absent'}}"
하지만 이제 출력에는 변화가 있습니다.
TASK [debug] **************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"status": {
"check1": "present",
"check2": ""
}
}
"set_fact"를 다음으로 설정하면
- name: Verify status
set_fact:
status:
check2: present
status.check1
사라진 것보다
ok: [localhost] => {
"status": {
"check2": "present"
}
}
어떤 제안이 있으십니까?
답변1
status_old
그것들을 설정 하고 status_new
결합할 이유가 없습니다 . status
state 의 값을 간단히 바꿀 수 있습니다 set_fact
. 대신에:
- name: Verify status
set_fact:
status_old: "{{status}}"
status_new:
check1: "{{'present' if status.check1 is defined and status.check1 != '' else 'absent'}}"
check2: "{{'present' if status.check2 is defined and status.check2 != '' else 'absent'}}"
- name: Combine facts
set_fact:
status: "{{status|combine(status_old, status_new, recursive=True) }}"
이렇게 하세요:
- name: Verify status
set_fact:
status:
check1: "{{'present' if status.check1 is defined and status.check1 != '' else 'absent'}}"
check2: "{{'present' if status.check2 is defined and status.check2 != '' else 'absent'}}"