본문으로 건너뛰기
  1. Automations/

[Ansible] Handlers

·
DevOps Ansible
목차
Ansible - 이 글은 시리즈의 일부입니다.
부분 2: 이 글

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도 실행되지 않음!


Ansible - 이 글은 시리즈의 일부입니다.
부분 2: 이 글

관련 글

Ansible Basics
DevOps Ansible
Overview # 이번 포스팅에서는 Ansible이란 무엇인지, 구조와 설치방법에 대해서 기술하도록 하겠습니다.
[Ansible] host x.x.x.x should use /usr/bin/python3
Ansible
Environment # Arch : amd64 OS : Ubuntu 18.04.4 LTS
Openshift4 Operations -Troubleshooting
Kubernetes RHCOS Openshift
Overview # Openshift를 다루며 생겼던 에러들에 대해서 정리해둔 문서입니다.