아래는 https://docs.ansible.com/ansible/2.4/playbooks_reuse_roles.html#embedding-modules-and-plugins-in-roles 다음 페이지를 참조하였음.
Role은 특정 vars_files, tasks, handler를 파일 구조에 맞게 자동으로 가져온다.
Role로 Grouping 되어 있으면 공유가 쉬운 장점이 있다.
Role 디렉토리 구조
Role은 다음 디렉토리를 꼭 포함해야 하며, 사용하지 않으면 포함하지 않아도 된다.
사용할 경우 각 디렉토리(defaults, handlers, meta, tasks) 에 main.yml 파일은 꼭 포함되어야 한다.
- tasks : role에 의해 실행되는 main task list
- handlers : 해당 role 또는 role 밖에서 사용되는 handler를 포함
- defaults : 해당 role을 위한 default 변수들
- vars : role을 위한 변수들
- files : role에 의해 배포되는 파일들
- templates : role에 의해 배포되는 templates
- meta : role을 위해 필요한 meta data 정의
Role은 모듈과 다른 plugin을 포함할 수 있다. (참조. Embedding Modules and Plugins In Roles)
Role 사용
roles: 하위에 선언된 role에 (여기서 common은 role 이름 중 하나로 예제임)
- roles/common/tasks/main.yml 이 있으면 play에 포함됨. tasks 뿐만 아니라 handlers, vars, defaults의 main.yml이 있을 경우도 동일
- roles/common/meta/main.yml 에 의존성이 포함된 list가 있다면 role list에 포함 됨
playbook은 다음 순서대로 실행 됨
- pre_tasks
- 지금까지 실행하면서 트리거 된 handlers 가 실행 됨
- roles에 나열 된 role이 실행 됨. meta/main.yml에 선언된 role이 맨 처음 선언 됨.
- tasks
- 지금까지 실행하면서 트리거 된 handlers 가 실행 됨
- post_tasks
- 지금까지 실행하면서 트리거 된 handlers 가 실행 됨
! tasks 실행 시 tags를 사용한다면 pre_tasks, post_tasks, role 에도 사용해야 한다. (특히 monitoring outage window control 이나 load balacing을 위해 사용할 경우)
tasks 에서 import_role(static)/ include role(dynamic) (ansible 2.4부터)
playbook parsing할 때 import는 static으로 간주된다.
Role 중복과 실행
두 번 선언해도 1번만 실행
1번 이상 실행하게 하고 싶을 경우
- 각 role 선언에 다른 변수를 넣는다.
- 각 role의 meta/main.yml 에 allow_duplicates: true 를 추가한다.
Role에 Module이나 Plugin 추가
tasks와 handler에 필요한 library 디렉토리를 추가하고 필요한 module을 직접 추가할 수 있다.
module은 role 안에서 사용될 수도 있다.
Role 검색 경로
playbook과 관련된 roles/ 디렉토리
Defualt는 /etc/ansible/roles
'Devops > Ansible' 카테고리의 다른 글
병렬 백업과 복원을 위한 async 작업 (0) | 2022.08.30 |
---|---|
MSSQL 별칭 관리 (0) | 2022.08.30 |
[Ansible] SQL Server Uninstall (0) | 2019.10.11 |
Windows에서 Ansible 사용하기 (0) | 2019.06.25 |
Ansible : Public Key 자동 배포 (0) | 2019.04.12 |