플레이북이 실행되는 동안 실패를 무시하기 위한 이 플래그를 알고 있지만 ignore_errors: yes
"동작을 무시"하지 않지만 플레이북을 끝까지 실행하도록 설정할 수 있는 것이 Ansible에 있는지 궁금합니다. 더 나은 보고 제어를 원하기 때문입니다.
이를 설명하기 위해 지금까지의 "실행 중인 검토"는 다음과 같습니다.
PLAY RECAP *******************************************************************************************************************************************************************************************
<server> : ok=195 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 **ignored=10**
"ignored=10"은 실제로 "실패한 확인"입니다. 필요한 것은 다음과 같이 다시 설명하는 것입니다.
PLAY RECAP *******************************************************************************************************************************************************************************************
<server> : ok=195 changed=0 unreachable=0 **failed=10** skipped=0 rescued=0 ignored=0
답변1
귀하의 질문에 대해
Ansible에서 설정할 수 있는 것이 있다면 "동작을 무시"하는 것이 아니라 플레이북을 끝까지 실행하는 것입니다.
당신은 볼 수 있습니다플레이북의 오류 처리그리고실패의 정의~처럼
Ansible을 사용하면 조건을 사용하여 각 작업에서 "실패"가 의미하는 바를 정의할 수 있습니다
failed_when
.
답변2
사용할 수 있는 한 가지 전략은 오류를 무시하고 실패 조건을 변수에 저장하고 해당 변수의 상태를 플레이북의 마지막 작업으로 어설션하는 것입니다. 그런 식으로:
- 실패 여부에 관계없이 모든 작업이 시도됩니다.
- 작업 중 하나라도 실패하면 전체 플레이북이 실패하므로 최종 보고서에서 성공 또는 실패를 확인하고 필요한 경우 명령의 반환 코드를 사용할 수 있습니다.
- 기본적으로 작업 실패는 무시되더라도 빨간색으로 강조 표시되므로 해당 메시지는 플레이북 출력에서 쉽게 찾을 수 있습니다.
failed
등록된 출력에는 루프 항목 중 하나라도 실패했는지 표시하는 자체 속성이 있으므로 이는 루프에도 적용됩니다 .
예를 들어:
- set_fact:
global_fail: false
- name: Assert the state of something
ansible.builtin.assert:
that:
- <condition you want to assert>
success_msg: ...
fail_msg: ...
register: assert_task
ignore_errors: true
- set_fact:
global_fail: "{{ global_fail or (assert_task.failed is defined and assert_task.failed) }}"
<Further tasks here>
- name: Assert that no tasks failed
ansible.builtin.assert:
that:
- not global_fail
success_msg: "All tasks succeeded"
fail_msg: "One or more tasks failed"