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

 


Ansible의 ignore_errors 옵션은 실패한 작업을 무시하고 후속 작업을 계속 진행할 수 있게 합니다. 점검 자동화 등에 유용합니다.


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

Ansible 플레이북은 병렬 처리를 기반으로 설계되어 있습니다. 여러 노드에서 동일한 작업을 수행할 때, 어느 하나의 노드가 실패하더라도 그 노드만 중단되고 나머지 노드는 끝까지 플레이를 수행합니다. 이는 기본 동작이며, 대부분의 환경에서는 효율적인 실행을 위한 적절한 방식입니다.

그러나 상황에 따라, 특정 작업의 실패를 무시하고 나머지 작업을 계속해야 할 경우도 있습니다. 이를 위해 Ansible은 ignore_errors라는 지시어를 제공합니다. 이 옵션을 활용하면, 실패가 예상되거나 무시 가능한 작업에서 플레이 전체의 중단 없이 다음 작업을 이어갈 수 있습니다.

 

ignore_errors 개념

ignore_errors는 특정 작업이 실패해도 오류를 무시하고 다음 작업을 계속 실행하게 하는 옵션입니다. 예를 들어 점검 자동화나 모니터링 플레이북에서 사용되며, 일부 서비스가 꺼져 있는 상황에서도 후속 점검을 이어가야 할 때 유용합니다.

서버 점검 중 특정 조건에 따라 실패가 발생해도 전체 점검을 멈출 수 없는 경우, 이 지시어를 통해 문제가 되는 작업을 건너뛰고 전체적인 작업 흐름을 유지할 수 있습니다. 결과적으로, 부분적인 실패를 포용하면서 전체 시스템 상태를 파악하는 데 도움이 됩니다.

 

ignore_errors 사용 방법

다음은 ignore_errors를 사용하는 예시입니다. Postfix 서비스 상태를 확인하는 작업에서 오류가 발생하더라도 플레이북이 중단되지 않고 다음 작업이 계속 수행됩니다.

  tasks:
    - name: Postfix Service status
      ansible.builtin.command: /usr/bin/systemctl is-active postfix
      ignore_errors: yes
      register: result

    - name: Postfix Service status
      ansible.builtin.debug:
        msg: postfix service is active
      when:
        result.stdout == "active"

    - name: Postfix Service status
ansible.builtin.debug: msg: postfix service is inactive when: result.stdout == "inactive"

첫 번째 태스크는 Postfix 서비스가 활성 상태인지 확인합니다. Postfix가 설치되지 않았거나 비활성화된 경우 오류가 발생하지만, ignore_errors: yes 설정으로 인해 플레이는 계속 진행됩니다.

조건문과의 연계 사용

두 번째와 세 번째 작업은 첫 번째 작업의 결과값을 기반으로 분기됩니다. result.stdout 값을 검사하여 서비스가 활성 상태일 때와 비활성 상태일 때 각각 다른 메시지를 출력합니다.

이러한 구조는 오류가 발생해도 유연하게 후속 로직을 실행하도록 설계할 수 있음을 보여줍니다. 특히 점검 스크립트에서 매우 유용하게 쓰이며, 단일 실패가 전체 실행에 영향을 주지 않도록 방지할 수 있습니다.

 

마치며

ignore_errors는 Ansible 플레이북 내에서 실패할 수 있는 작업을 유연하게 처리하기 위한 중요한 도구입니다. 특히 점검이나 테스트 작업처럼 일부 실패가 전체 실행에 치명적이지 않은 경우 유용하게 사용됩니다.

다만 이 옵션을 무분별하게 사용할 경우 실제로 중요한 오류를 놓칠 수 있으므로, 반드시 의도된 작업에서만 사용해야 합니다. 실패를 임시로 무시하는 경우에도 추후 디버깅과 원인 분석을 병행하는 것이 좋습니다.

 

참고

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

댓글

이 블로그의 인기 게시물

[Linux] RHEL Local YUM Repository 구성

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용