728x90

 

앤서블은 블록 block이라는 오류를 제어하는 문법을 제공합니다.

 

블록은 작업을 논리적으로 그룹화하는 절입니다.

이를 통해 작업 실행 방법을 제어에 사용할 수 있습니다.

블록을 통해 rescue 문과 always 문을 함께 사용함으로써 오류를 처리할 수 있습니다.

 

 

 

  • block : 실행할 기본 작업을 정의함
  • rescure : block 절에 정의된 작업이 실패할 경우 실행할 작업을 정의함
  • always : block 및 rescue 절에 정의된 작업의 성공 또는 실패 여부와 관계없이 항상 실행되는 작업을 정의함

1) 플레이북 생성

---
- hosts: tnode2
  vars:
    logdir: /var/log/daily_log
    logfile: todays.log

  tasks:
    - name: Configure Log Env
      block:
        - name: Find Directory
          ansible.builtin.find:
            paths: "{{ logdir }}"
          register: result
          failed_when: "'Not all paths' in result.msg"

      rescue:
        - name: Make Directory when Not found Directory
          ansible.builtin.file:
            path: "{{ logdir }}"
            state: directory
            mode: '0755'

      always:
        - name: Create File
          ansible.builtin.file:
            path: "{{ logdir }}/{{ logfile }}"
            state: touch
            mode: '0644'

 

2) 실행

ansible-playbook block-example.yml

 

먼저 실행해보면, 다음과 같이 출력되는 것을 알 수 있습니다.

Find Directory 태스크에서 logdir 디렉터리가 존재하지 않으면 실패하고, rescue 섹션이 실행되도록 명시되어 있는데,

첫 번째 실행시에는 해당 파일을 찾을 수 없습니다. 

 

따라서 rescue로 이동하였습니다.

always 구문은 실패에 상관없이 실행되었습니다.

 

다음의 명령어를 통해서 Ansible의 shell 모듈을 사용하여 tnode2 호스트에서 ls -l /var/log/daily_log/ 명령을 실행합니다.

ansible -m shell -a "ls -l /var/log/daily_log/" tnode2

 

 

 

다시금 플레이북을 실행해 보면, 다음과 같이 동작하는 것을 볼 수 있습니다.

 

감사합니다.

728x90
반응형

'DevOps > Ansible' 카테고리의 다른 글

[Ansible 101] 사용자 계정 생성하기  (2) 2024.02.04
[Ansible 101] 2주차 도전과제  (0) 2024.01.21
[Ansible 101] 핸들러 및 작업 실패 처리  (0) 2024.01.21
[Ansible 101] 조건문  (0) 2024.01.21
[Ansible 101] 반복문  (2) 2024.01.21