[Ansible] Handlers

Overview

이번 포스팅에서는 Ansible의 Handler에 대해서 기술하겠습니다.

Handlers?

Handler는 함수와 비슷합니다.
Task가 할 수 있는 일을 똑같이 할 수 있으며, Playbook의 Task에서 Handler를 호출하게되면 해당 Handler가 호출되어 실행되는 식으로 동작합니다.
위에서 함수와 비슷하다고 하였는데, 우리가 코드를 짤 때 반복되는 부분을 함수로 만들어서 필요할때마다 가지고 오듯이, Handler도 비슷하게 작성해주시면 됩니다.

아래의 playbook을 보면서 자세히 살펴보겠습니다.

- hosts: test
  become: yes
  tasks:
   - name: Install Nginx
     apt:
       name: nginx
       state: latest
       update_cache: true
     notify:
      - Start Nginx

  handlers:
   - name: Start Nginx
     service:
       name: nginx
       state: started

[test]태그를 가지는 서버에 해당 playbook을 적용할거고,
become:yes 구문에서는 아래 tasks는 root권한으로 실행할 것을 명시해두었습니다.

tasks 파트에서는 Nginx를 설치하는 작업이 들어가 있습니다.
원래는 apt구문에서 설치는 끝이 날텐데 밑에 notify라는 구문이 또 있습니다.

notify구문은 handler를 호출하는 구문으로써 위의 tasks를 모두 마친 뒤에 handler를 호출하라는 뜻입니다.

handler를 호출할때에는 name을 기준으로 호출하게 되어있습니다.

실제로 동작을 하게되면:

$ ansible-playbook -i hosts.inv install-nginx.yaml

PLAY [test] **********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [169.59.4.60]

TASK [Install Nginx] *************************************************************************************************************************
changed: [169.59.4.60]

RUNNING HANDLER [Start Nginx] ****************************************************************************************************************
ok: [169.59.4.60]

PLAY RECAP ***********************************************************************************************************************************
169.59.4.60                : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

TASK에서 Install Nginx를 하게 되고, 타겟서버에 nginx가 설치되어있지 않으니 설치를 진행해 상태가 changed가 되었습니다.
그리고 설치를 했으니 task를 마친 뒤, Start Nginx handler를 호출하여 실행하는것을 확인할 수 있습니다.

타겟서버에 nginx가 설치되어 있는데 playbook을 돌릴경우:
image
이미 설치되어있기 때문에 task를 진행하지 않고 넘어갑니다. 그래서 handler도 실행되지 않음!


댓글남기기