플레이북의 기본 실패 처리 방식
플레이북은 실행 시 병렬처리를 하도록 설계되어 있어서 여러 노드가 동일한 플레이북을 실행할 때 하나의 노드가 작업에 실패하게 되면 그 노드만 중지됩니다. 실패하지 않은 노드들은 끝까지 플레이를 수행합니다.
ignore_errors 개념
특정 작업이 실패했을 때 오류를 무시하고 다음 작업을 이어서 실행하도록 하는 옵션입니다. 이 옵션을 사용하면 작업이 실패해도 진행돼야 하는 후속 작업들을 처리할 수 있습니다. 예를 들어 플레이북으로 서버의 정기점검을 진행하는 과정에서 특정 작업 때문에 플레이가 실패하는 경우가 있을 수 있습니다. 이럴 때 ignore_errors를 이용하여 실패하는 작업만 건너뛰고 플레이북을 실행하여 실패한 작업이 있는 노드의 플레이를 끝까지 진행하여 정기점검 결과서를 받아볼 수 있습니다.
ignore_errors 사용 방법
tasks:
- name: Postfix server status
ansible.builtin.command: /usr/bin/systemctl is-active postfix
ignore_errors: yes
register: result
- name: Postfix Package status
ansible.builtin.debug:
msg: postfix service is active
when:
result.stdout == "active"
- name: Postfix Package status
ansible.builtin.debug:
msg: postfix service is inactive
when:
result.stdout == "inactive"
첫 번째 작업은 postfix 서비스가 활성화되어있는지 확인하는 작업입니다. 만약 postfix 패키지가 비활성화 상태이거나 패키지가 설치되지 않은 경우 에러가 발생합니다. ignore_erros를 사용하면 해당 오류가 발생해도 플레이를 중지하지 않고 다음 작업을 이어갈 수 있습니다.
두 번째와 세 번째 작업에서는 조건문을 이용하여 첫 번째 작업의 결과에 따라 활성화 인지 비활성화 인지 여부를 알려주는 후속 작업이 있습니다.
마치며
“ignore_errors”를 사용하면 알려진 실패한 작업을 무시하고 플레이를 계속 진행시킬 수 있습니다. 이 옵션을 적절하게 사용하면 오류를 유연하게 처리할 수 있습니다. 그러나 너무 남용해서 사용하지 않도록 하고 알려진 오류에만 사용해야 합니다. 문제를 일시적으로 회피하는 경우에는 옵션 사용 후 디버깅을 통해서 근본적인 실패 원인도 함께 조사해야 합니다.