공식 문서에는 Role 관련 디렉토리를 위와 같이 안내하고 있는데, 별로 중요하진 않고 하다보면 대충 어떤 디렉토리인지 감이 온다. 간단히 정리해보면 아래 표와 같다.
directory name
역할
tasks/main.yml
role 이 실행하는 주요 작업 목록
handlers/main.yml
role 내 외부에서 사용될 수 있는 핸들러
library/my_module.py
이 role 에서 사용할 수 있는 모듈
defaults/main.yml
role 의 기본 변수
vars/main.yml
role 이 사용하는 기타 변수
files /
role 에서 사용하는 파일
templates /
role 이 배포하는 템플릿
meta/main.yml
메타데이터
role 작성 기본 모듈 예시
보통 role 에서는 어떤 작업을 하는지 생각해보면 간단하다. 파일을 이동시키고, 압축을 풀고, 디렉토리가 없으면 생성하고, 이러한 명령들이 모여서 role이 되고 role 이 모여서 playbook 이 된다. 물론 복잡하게 들어가면 jinja template 을 활용하고 특정 변수마다 다른 설정 파일을 적용하여 사용할 수 있도록 할 수 있다. 추후에 다룰 예정이고 우선은 간단한 적업 예시만 확인해보면 아래와 같다.
include_vars
---
- include_vars:
dir: "vars"
앞에서 vars 디렉토리에 대해 설명했었다. role 에서 사용하는 변수를 가지고 있는 부분이라고 작성했는데, 해당 디렉토리 안에는 role 에서 사용하게 될 변수들이 작성 되어있다.
apple : "banana"
very : "good"
예를들어 vars 내부에 이러한 변수 파일을 만들어 놓았다면 role 에서 apple, very 변수를 사용할 수 있도록 해주는 것이다.
include_tasks
---
- include_tasks: "task.yml"
include_vars 와 비슷한 개념으로 task.yml 에 작성한 task 들을 포함하겠다는 의미이다. main.yml 에 작성하게 된다면 include_tasks 가 작동하여 task.yml 을 수행하게 된다.
register
---
- name: User Home directory
stat: path=/usr/lib/home/directory
register: user_home
코딩에서 사용하는 변수 할당과 비슷한 개념이다. user_home 변수에 /usr/home/directory 경로를 넣는 것이며, 이후 task 에서 user_home 변수를 사용할 수 있다. 해당 경로에 디렉토리가 존재하는지 검사 등을 하여 자동화와 멱등성을 유지할 수 있게 된다.
file
가장 중요한 file 모듈이다. 정말 다양한 동작을 할 수 있는데 기본적인 내용을 가지고 예시를 들어보려고 한다.
앞에서 Files 디렉토리에는 Role 에서 사용하는 파일이 들어 있다고 하였는데, src 에서 해당 파일을 지정한 뒤, dest 에 원하는 경로를 넣어서 파일 복사를 할 수 있다.
정말 많은 동작을 할 수 있다. unarcive 모듈을 사용하여 압축을 해제할 수 있으며, command 명령어를 사용하여 단순 명령어를 수행할 수도 있다. 관련 정보는 공식 문서를 참고하거나 구글링을 해도 손쉽게 예제 파일이 나오기 때문에 원하는 자동화 내용이 있다면 role 파일로 작성해서 자동화를 구축해보면 좋을 것 같다.