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] 사용자 계정 생성하기 (1) | 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 |