Playbook 제어
- 순차 구조 - 명령이 기술된 순서로 순차적으로 수행하는 구조
- 선택 구조 - 조건에 따라 명령의 실행순서를 변경할 수 있는 구조
- 반복 구조 - 특정 명령을 일정 횟수동안 반복해서 수행하는 구조
반복문
- Task를 반복해서 동작시킬때 반복문을 이용한다.
- 모듈의 키워드로 사용하며 with_* 와 loop 키워드를 사용한다.
- with_item
- with_nested
- with_sequence
- 패키지 관련 모듈은 반복문을 사용하지 않는것을 권장한다.
- 반복문에서 제공되는 목록을 참조하는 변수명은 항상 item을 사용한다.
목록을 참조하는 변수명은 item을 사용한다.
조건문(선택문)
- Task가 특정조건에만 작업을 수행하도록 구성할때 이용한다.
- 조건문에 변수를 참조할때는 "{{변수명}}" 형식을 따르지 않고 바로 변수명 으로 쓴다.
- when 키워드를 사용하며, 조건에 대한 표현식은 테스트문 또는 필터로 사용한다
- 테스트문
- 테스트문은 표현식을 평가하고 True/False로 변환한다.
- when을 사용해서 변수 테스트를 한다.
- 필터
- when: 변수|(자료형) <조건 연산자> 값
- 변수 | (자료형) 표현은 변수형 변환을 의미하고, | 다음에는 형변환을 원하는 자료형을 기입한다.
- 조건 연산자로는 >, <, >=, <=, ==, != 사용할 수 있다.
Include
- playbook에서 다른 playbook들을 읽어들일 때 사용한다.
- playbook을 모듈화 시켜 관리의 편의성을 높인다.
- import
- role, task, playbook 등을 playbook에 정적으로 포함시킨다.
- Ansible은 읽어들인 파일이나 role등을 최상위 playbook에서 작업이 실행되기 전에 처리한다. 따라서, import된 playbook은 최상위 playbook이 되어 다른 task에 영향을 받지 않는다.
- import_playbook: myPlaybook.yml(import할 파일명) 형식으로 쓴다.
- include
- role, task, playbook 등을 playbook에 동적으로 포함시킨다.
- include된 콘텐츠는 최상위 playbook의 작업결과에 영향을 받는다.
- 최상위 playbook의 실행 결과에따라 실행되거나 안될수도 있다.
- include: myPlaybook.yml(include할 파일명) 형식으로 쓴다.
Handler
- handler는 함수(function)와 비슷한 성격으로 단위기능을 실행한다.
- 반복되는 동작(task)에 대하여 별도의 handler로 정의해둔다.
- notify 키워드를 사용해서 task에서 호출한다.
- handler는 이름으로 호출되므로, notify에 기술된 handler이름이 실제 handler섹션에 정의된 handler이름과 같아야 한다.
- 동일한 handler에 대해서 여러번 호출되어도 한번만 실행된다.
- 변수 사용시 include_var 모듈을 사용한다.
- listen key를 handler task에 부여하면 notify 할때 listen에 부여한 이름으로 호출하면 listen key가 정의된 handler가 모두 동작한다.
Roles
- roles는 include의 확장개념으로, 역할에따라 roles폴더에 필요한 파일들을 별도로 생성하여 사용한다.
- role에서 다른 role을 포함할 수 있고, 변수 전달도 가능하다.
- 역할에 따른 role을 작성하여 관리함으로서, 관리의 편의성과 재사용성을 높일수 있다.
- role 관리방법
- 1. roles 이름의 폴더 생성
- 2. roles 폴더 아래에 폴더 생성 (files, handlers, tasks, templates, vars, meta)
- 3. playbook에 적용하고 싶은 role을 roles섹션에 추가하여 사용한다.