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
인프런 조훈님 강의 - 앤서블을 깊이있게 활용하기