[K8S Deploy Study by Gasida] - Ansible 기초 - 핸들러
[K8S Deploy Study by Gasida] - Ansible 기초 - 핸들러
핸들러
앤서블의 핵심: 멱등성 (Idempotency)
앤서블 모듈의 가장 큰 특징은 현재 상태를 체크하고 원하는 상태로 만든다는 점이다.
- 동일한 결과: 플레이북을 한 번 실행하든 백 번 실행하든, 시스템의 최종 상태는 항상 동일합니다.
- 지능적 변경: 시스템이 이미 원하는 상태(예: 패키지가 이미 설치됨)라면, 앤서블은 아무런 작업을 수행하지 않고 넘어간다.
- 최소한의 변경: 오직 변경이 필요한 경우에만 작업을 수행하여 시스템 자원 낭비를 줄이고 예기치 못한 오류를 방지한다
핸들러 (Handlers)의 역할: “조건부 사후 작업”
멱등성에 의해 시스템에 실제 변화(changed)가 발생했을 때만 추가로 호출되는 특수한 작업이다.
트리거(Trigger): 일반 태스크가 실행되어 시스템 설정이 실제로 바뀌면,
notify구문을 통해 핸들러에게 알림을 보낸다.응답(Response): 핸들러는 알림을 받았을 때만 실행 대기열에 들어간다.
지연 실행: 알림을 받은 핸들러는 즉시 실행되지 않고, 플레이북의 모든 일반 태스크가 성공적으로 끝난 후 맨 마지막에 한 번만 실행된다.
3. 왜 핸들러를 사용해야 할까요?
단순히 태스크 뒤에 서비스 재시작 태스크를 넣는 것과 핸들러를 사용하는 것의 차이는 효율성에 있다.
불필요한 작업 방지: 설정 파일에 아무런 수정이 없었다면(
ok), 서비스를 재시작할 필요가 없다. 핸들러는 이때 동작하지 않아 서비스 가용성을 높인다.중복 실행 방지: 만약 5개의 서로 다른 설정 파일을 수정했더라도, 핸들러는 마지막에 딱 한 번만 서비스를 재시작한다. (재시작 남발 방지)
rsyslog 재시작 태스크가 실행되면 notify 키워드를 통해 print msg라는 핸들러를 호출하는 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
- hosts: tnode2
tasks:
- name: restart rsyslog
ansible.builtin.service:
name: "rsyslog"
state: restarted
notify:
- print msg
handlers:
- name: print msg
ansible.builtin.debug:
msg: "rsyslog is restarted"
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.