10월, 2023의 게시물 표시

[Ansible] Error Handling #3 - failed_when 작업 실패 조건 지정

이미지
Ansible에서 작업 결과와 무관하게 조건에 따라 실패 여부를 제어할 수 있는 failed_when 지시어의 활용 방법을 설명합니다.   failed_when 지시어란? failed_when 지시어를 사용하면 작업에 조건을 걸어 조건이 충족될 때 작업을 실패 처리할 수 있습니다. 이 방법은 정상적으로 작업이 실행되어도 작업의 결과를 체크해서 특정 조건이 만족하지 않으면 실패시키는 방법입니다. failed_when 활용 사례 예를 들어 스크립트를 돌린다고 가정해 보도록 하겠습니다. 해당 스크립트가 오류 없이 실행된다면 returncord(출력 결과) 0을 반환합니다. 그럼 앤서블에서는 정상 종료로 인식한 뒤 나머지 작업을 이어 나갑니다. 하지만 스크립트가 정상 종료되었다고 해서 작업이 정상적으로 끝났다는 보장은 없습니다. 이럴 때 failed_when 지시어를 작업에 추가하여 작업이 잘 끝났는지를 확인해 볼 수 있습니다.   사례1 : 스크립트의 출력 결과에 특정 문구가 포함되면 실패 처리 예를 들어 backup.sh 스크립트를 실행했을 때 출력 결과에 “backup failed”라는 문구가 포함되면, 스크립트가 정상적으로 종료되었더라도 작업을 실패로 간주할 수 있습니다. tasks: - name: backup etc directory ansible.builtin.command: cmd: /root/backup.sh register: results failed_when: results.stdout == "backup failed" 이렇게 설정한 후 플레이북을 실행하면 출력 결과에 따라 실패 처리 여부가 결정됩니다. 예제 출력은 다음과 같습니다: # ansible-playbook fail.yaml ... TASK [backup etc directory] **************************************************************** fata...

[Ansible] Install Ansible - 앤서블 설치

이미지
  Red Hat Linux에서 ansible-core와 Ansible Community 패키지를 설치하고 버전 및 모듈/컬렉션 상태를 비교해보는 과정을 안내합니다. Ansible 설치 개요 Ansible은 오픈소스 프로젝트로 누구나 자유롭게 설치하고 사용할 수 있는 자동화 도구입니다. 이번 글에서는 Red Hat Enterprise Linux에서 오픈소스 Ansible과 Red Hat이 공식 지원하는 Ansible 설치 방법을 살펴보겠습니다. 환경 Redhat Enterprise Linux 8 이상 ansible 8.4.0 ansible-core 2.15.4 사전 요구사항 Ansible 8 및 ansible-core 2.15를 설치하기 위해서는 Python 3.9 이상의 버전이 필요합니다. Red Hat에서 Python 설치 방법은 별도 안내된 "파이썬 설치" 를 참조하세요. Ansible 버전 구분 및 개요 커뮤니티 기반 Ansible은 2.9 버전 이후로 크게 두 가지 방식으로 분리되었습니다. ansible community package : 기존의 모든 모듈이 포함된 방식으로 배터리 포함(Batteries Included) 모델입니다. ansible-core : 필수 모듈만 포함되어 가볍게 운영할 수 있으며, 최신 모듈은 컬렉션 형태로 개별 설치합니다. 이는 빠르게 변화하는 오픈소스 환경에서 더 유연한 구성이 가능하게 해줍니다. 각자의 목적에 맞게 적절한 방식으로 선택하여 설치하면 됩니다. 참고: https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html Red Hat 기반 Ansible 설치 Red Hat은 두 가지 방식으로 Ansible을 제공합니다. Red Hat Enterprise Linux에 포함된 ansible-core 구독 기반 제품인 AAP(Ansible Automation Platform) 그...

[Linux] 레드햇 dnf 이용 python3.9 설치

이미지
  RHEL8부터 도입된 DNF 모듈 기능을 활용해 Python 3.9 버전을 설치하고, 시스템 전역에서 사용할 수 있도록 설정하는 방법을 설명합니다. DNF 모듈 기능 개요 RHEL7에서 RHEL8으로 넘어오면서 dnf 에는 module 이라는 기능이 새롭게 추가되었습니다. 이 기능을 통해 동일한 OS 버전 내에서도 여러 소프트웨어의 다양한 버전을 선택적으로 설치하고 관리할 수 있게 되었습니다. 이번 글에서는 이 기능을 활용하여 Python 3.9 버전을 설치하고 활성화하는 방법을 설명합니다.   환경 대상 OS: Red Hat Enterprise Linux 8 이상 사전 조건: 시스템에 레포지토리가 설정되어 있어야 하며, 구성 방법은 LOCAL REPO 를 참조하시기 바랍니다. Python3.9 설치  현재 시스템에 활성화되어 있는 Python 모듈을 먼저 확인합니다. 다음 명령어를 실행하면 Python 2.7부터 3.9까지의 모듈 목록을 확인할 수 있으며, 현재 활성화된 버전은 [e] 로 표시됩니다. # dnf module list | grep ^python python27 2.7 [d] common [d] Python programming language, version 2.7 python36 3.6 [d][e] build, common [d] Python programming language, version 3.6 ...

[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...

[Ansible] Error Handling #1 - any_errors_fatal 하나의 노드 작업 실패 시 모든 노드 플레이 정지

이미지
  Ansible 플레이북 실행 중 하나의 노드에서 오류가 발생했을 때 전체 실행 흐름을 제어하는 방법을 소개합니다.   플레이북이 실패한 노드를 처리하는 기본 방법 Ansible 플레이북은 실행 중 특정 작업에서 실패가 발생하면 기본적으로 실패한 노드만 작업을 중단하고 , 나머지 노드는 정상적으로 작업을 끝까지 수행합니다. 이는 병렬 처리 환경에서 효율성을 높이기 위한 기본 동작입니다. 예를 들어, 웹 서버 설치를 위한 간단한 플레이북을 아래와 같이 작성합니다. 이때 node2 는 Yum 리포지토리를 설정하지 않아 설치 작업이 실패하도록 구성되어 있습니다. # cat webserver.yaml --- - name: install web service hosts: all tasks: - name: install http package ansible.builtin.dnf: name: httpd state: present - name: start http service ansible.builtin.service: name: httpd state: started enabled: yes 플레이북을 실행해 보면, node2 는 패키지 설치 실패 후 이후 작업이 진행되지 않고 중단됩니다. 반면 node1 은 모든 작업을 정상적으로 완료합니다. # ansible-playbook webserver.yaml PLAY [install web service] ***************************************************** TASK [Gathering Facts] ********************************************************* ok: [node2] ok: [node1] TASK [install http package] ***************************...