Devops/Ansible

Ansible Roles

BabyTT 2019. 4. 12. 10:26

아래는 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번 이상 실행하게 하고 싶을 경우

  1. 각 role 선언에 다른 변수를 넣는다.
  2. 각 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