역할
공식 문서: https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html#playbooks-reuse-roles
역할 생성 → 통합 → 플레이북
통일화 된 구조
역할은 roles 디렉토리를 사용한다.
ansible-galaxy init common --init-path roles 명령어로 역할 디렉토리 구조를 생성한다.
[vagrant@controller 10_role]$ mkdir roles
[vagrant@controller 10_role]$ ansible-galaxy init common --init-path roles
- Role common was created successfully
[vagrant@controller 10_role]$ tree
.
└── roles
└── common
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
10 directories, 8 files
roles/common: 역할의 이름. 즉, common 자체가 역할의 이름이다.
roles/tasks/main.yml : 작업이 위치한다.
roles/handlers/main.yml: 핸들러 작업이 위치한다.
roles/tests/inventory: 역할을 테스트하기 위한 인벤토리, 단위 테스트하기 위한 인벤토리
roles/tests/test.yml: 역할을 테스트하기 위한 플레이북, 단위 테스트하기 위한 플레이북
roles/defaults/main.yml: 기본 역할 변수(우선순위가 매우 낮다.)
roles/vars/main.yml: 역할 변수(우선순위가 매우 높다.)
roles/files/: 파일 관련 모듈의 src: 파라미터에서 참조하는 파일의 위치
src 에 정의된 a.txt 파일을 자동으로 roles/files/a.txt 에서 찾는다.
- copy:
src: a.txt
roles/templates/: 템플릿 모듈의 src: 파라미터에서 참조하는 파일의 위치
src 에 정의된 a.j2 파일을 자동으로 roles/templates/a.j2 에서 찾는다.
- templates:
src: a.j2
roles/meta/main.yml: 역할을 설명하고 있는 파일
- 역할의 버전
- 역할의 이름
- 역할을 만든 사람
- 역할이 적용되는 플랫폼(리눅스 배포판)
- 역할의 의존성을 정의
플레이에서 작업 실행 순서
# Play
- hosts: # 관리 노드
pre_tasks: # 관리 노드에서 실행할 작업
tasks: # 관리 노드에서 실행할 작업
roles: # 역할 별로 정의한 작업을 실행
post_tasks: # 관리 노드에서 실행할 작업
pre_tasks → tasks → roles → post_tasks 순으로 실행된다.
핸들러까지 포함한 정확한 실행 순서는 다음과 같다.
- pre_tasks
- pre_tasks 의 handlers
- roles
- roles 의 handlers
- post_tasks
- post_tasks 의 handlers
ansible-galaxy
공식 문서: https://galaxy.ansible.com/
- 역할
- 컬렉션: 역할 + 3rd Party 모듈
- 번들: RedHat OpenShift
역할 목록 확인
ansible-galaxy list
역할 찾기
ansible-galaxy search 역할이름
역할 정보 확인
ansible-galaxy info geerlingguy.elasticsearch
역할 다운로드
ansible-galaxy install geerlingguy.elasticsearch
역할 삭제하기
ansible-galaxy remove geerlingguy.elasticsearch