핸들러
▪ 특정 서비스가 실행 중일 경우에만 httpd 서비스 다시 시작
- 핸들러(Handler)는 작업을 실행하고 시스템의 변경(Changed)이 있을 때에 별도의 작업을 호출하고 실행하는
작업
- 주로 핸들러를 사용하게 시스템에서 특정 서비스의 구성 파일이 변경된 경우 서비스를 재시작할 때
- Ansible 모듈은 멱등이 되도록 설계 되어 있음. 즉 제어 노드가 원하는 상태가 되도록 하기 위해 플레이북과
해당 작업을 변경하지 않아도 되는 경우, 적절하게 작성된 플레이북에서 제어노드를 변경하지 않고
플레이북과 해당 작업을 여러번 실행 가능
- 핸들러는 작업에 변경이 있고, 반드시 알림(Notify)이 있을 때만 실행되는 작업
- 작업(변경) ---> 알림 ---> 핸들러
핸들러 사용시 주의 사항
▪ 핸들러는 항상 플레이의 handlers 섹션에서 지정한 순서대로 실행
- 작업의 notify 문에 따라 나열한 순서나 작업이 핸들러에 통지하는 순서대로 실행되지는 않음.
▪ 핸들러는 일반적으로 플레이에서 다른 모든 작업이 완료된 후에 실행
- 플레이북의 tasks 부분의 작업에서 호출한 핸들러는 tasks 아래에 있는 모든 작업이 처리될 때까지 실행되지 않음
▪ 핸들러 이름은 글로벌 네임스페이스에 있음.
- 두 핸들러에 같은 이름이 잘못 지정되면 한 핸들러만 실행
▪ 둘 이상의 작업에서 한 핸들러에게 알리는 경우 해당 핸들러가 한번만 실행
- 작업에서 핸들러에게 알리지 않는 경우 핸들러가 실행되지 않음.
▪ notify문을 포함한 작업이 chaged 결과를 보고하지 않으면 핸들러에 알리지 않음
- 다른 작업에서 이 핸들러에게 알라지 않으면 이 핸들러를 건너띔
- Ansible은 작업이 change 상태를 보고하는 경우에만 핸들러에게 알림.
▪ 핸들러는 작업이 제어노드를 변경할 때 추가 조치를 수행하기 위한 것으로 정상적인 작업을 대체하기 위해서
사용해서는 안됨.
▪ 핸들러는 작업의 알림과 핸들러의 이름이 일치해야지만 알림을 받을 수 있기 때문에 핸들러의 작업에는
반드시 이름을 선언해야 함.
위임(작업 실행 위치 제어)
▪ 하나의 플레이를 실행 할 때 작업들은 별도로 설정하지 않는 한 호스트에 실행이 됨
▪ 위임(delegation)은 호스트에 정의 되어있는 여러 작업들 중에 일부분의 작업을 다른 호스트에서
실행할 수 있음
▪ 위임을 사용하면 상호 관련된 환경을 정확하고 효율적으로 관리할 수 있음
▪ 다른 호스트를 참조하여 한 호스트에서 작업을 수행하려면 작업에서 delegate_to키워드를 사용
▪ 이는 로드 밸런싱된 풀에서 노드를 관리하거나 중단 기간을 제어하는 데 이상적
▪ 직렬 키워드 와 함께 위임을 사용 하여 한 번에 실행되는 호스트 수를 제어할 수 있음
팩트 수집 위임
▪ Ansible 작업을 위임하는 것은 현실 세계에서 작업을 위임하는 것과 동일하다고 할 수 있음.
▪ 위임된 작업에 의해 수집된 모든 fact는 기본적으로 fact를 생성한 호스트(위임된 호스트)가 아닌
인벤토리 _호스트 이름(현재 호스트)에 할당
▪ 수집된 fact을 현재 호스트 대신 위임된 호스트에 할당하려면 delegate_facts: true로 설정
블록
블록의 개념
▪ 블록은 플레이에 하나 이상의 작업을 논리적으로 그룹화 할 수 있음
- 그룹화의 장점은 대부분 단일 작업에서 적용했던 플레이북 키워드를 블록 수준에서 적용할 수 있음
- 조건문(when), 권한상승(become) 등 블록에 구성할 수 가능
- 블록에 구성된 키워드는 블록에 속한 모든 작업에 공통으로 적용
- 단 반복문은 블록에 적용 X
▪ 대부분의 프로그래밍 언어에 있듯이 예외 처리 기능을 제공
- 블록의 하나 이상의 작업이 실패한 경우, 실패한 작업에 대응(롤 백, 오류 수정 등)하는 작업을 지정 가능
작업의 그룹화
▪ 블록의 모든 작업은 블록 수준에서 적용된 지시문을 상속
▪ 단일 작업에 적용할 수 있는 대부분(반복문(loop) 제외)은 블록 수준에서 적용할 수 있으므로
블록을 사용하면 작업에 공통적인 데이터나 지시문을 훨씬 쉽게 설정 가능
▪ 지시문은 블록 자체에 영향을 미치지 않으며 블록으로 묶인 작업에 의해서만 상속
- when 문은 블록 자체가 아니라 블록 내의 작업에 적용
오류 처리
▪ rescue및 always섹션이 있는 블록을 사용하여 Ansible이 작업 오류에 응답하는 방식을 제어할 수
있음
▪ 복구 블록은 블록의 이전 작업이 실패할 때 실행할 작업을 지정
- 접근 방식은 많은 프로그래밍 언어의 예외 처리와 유사
▪ Ansible은 작업이 '실패' 상태를 반환한 후에만 복구 블록을 실행
- 잘못된 작업 정의와 연결할 수 없는 호스트는 복구 블록을 트리거하지 않음
▪ 블록의 작업 중 하나라도 실패가 있으면, Rescue 섹션의 작업이 실행
- 블록의 작업 중 실패가 없으면, Rescue 섹션은 실행 X
rescue & always
▪ 블록의 작업이 반환 failed되면 rescue섹션은 오류를 복구하기 위해 작업을 실행
▪ 블록 구문의 실패가 있을 때만 Rescue 섹션이 실행되며, always 섹션은 항상 실행
▪ 블록에서 오류가 발생하고 rescure 작업이 성공하면 Ansible은 실행에 대한 원래 작업의 실패
상태를 되돌리고 원래 작업이 성공한 것처럼 재생을 계속 실행