[Ansible] Error Handling #2 – ignore_errors 작업 실패 무시

ignore_errors

플레이북의 기본 실패 처리 방식

플레이북은 실행 시 병렬처리를 하도록 설계되어 있어서 여러 노드가 동일한 플레이북을 실행할 때 하나의 노드가 작업에 실패하게 되면 그 노드만 중지됩니다. 실패하지 않은 노드들은 끝까지 플레이를 수행합니다.

 

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”를 사용하면 알려진 실패한 작업을 무시하고 플레이를 계속 진행시킬 수 있습니다. 이 옵션을 적절하게 사용하면 오류를 유연하게 처리할 수 있습니다. 그러나 너무 남용해서 사용하지 않도록 하고 알려진 오류에만 사용해야 합니다. 문제를 일시적으로 회피하는 경우에는 옵션 사용 후 디버깅을 통해서 근본적인 실패 원인도 함께 조사해야 합니다.

 

참고

https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_error_handling.html#ignoring-unreachable-host-errors

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top