Ansible Playbook - Handler

Handler

Playbook에는 여러 요소가 있지만 Handler를 알아보자.

Handler는 작업 전달자라고 부를 수 있다.

만약 다음과 같은 프로세스로 nginx를 설치하고 실행한다고 가정해보자.

1. 설치

2. 파일 전송

if 파일이 정상적으로 전송되었는가? == YES {
  3. 서비스 재시작
} else {
  3. 동작 안함
}

이처럼 핸들러는 파일이 정상적으로 전송된 것을 확인하고 동작한다.

즉, 불필요한 작업을 줄일 수 있다.

핸들러의 또 다른 장점은Ansible의 멱등성에 따라 변경사항이 없으면 작동하지않기 때문에 불필요한 작업을 줄일 수 있다.

vars:
  lnx_name: "\{\{'Ubuntu' if ansible_distribution == 'Ubuntu' else 'CentOS' if ansible_distribution == 'CentOS' else 'Just Linux'\}\}"

tasks:
  - name: nginx for Any Linux
    include_tasks: "\{\{ lnx_name \}\}.yml"

handlers:
  - name: Restart nginx web server
    service: name=nginx state=restarted

include_tasks가 호출하는 코드는 아래와 같다.

- name: install epel-release
  action: "\{\{ ansible_pkg_mgr \}\} name=epel-release state=latest"
- name: install nginx web server
  action: "\{\{ ansible_pkg_mgr \}\} name=nginx state=present"
- name: Upload default index.html for wen server
  get_url: url=https://www.nginx.com dest=/usr/share/nginx/html/ mode=0644
  notify:
    - Restart nginx web server

잘 보면 마지막에 notify라는 구문이 보일 것이다.

바로 이 부분이 변경사항을 감지하고 핸들러를 호출하는 구문이다.

결과적으로 핸들러를 사용하면 불필요한 테스크를 실행하지 않을 수 있다는 장점이 있다.

Reference

인프런 조훈님 강의 - 앤서블을 깊이있게 활용하기



© 2022. by minkuk

Powered by minkuk