Ansible Role 작성 방법
Ansible 의 role(롤) 은 Playbook을 여러 파일로 분할하는 개념이다.
즉 자주 재사용 되는 특정 동작을 role 로 작성 해놓으면 재사용을 통해 손쉽게 플레이북을 만들 수 있다.
ansible 에서는 role 을 작성하기 위한 directory 구조와 동작을 지원하는 모듈 개념이 있다. 작성 관련은 공식 문서에 자세히 안내하고 있어서 사용을 원하는 동작이나 이해가 안되는 부분은 공식 문서에서 참고 할 수 있다.
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_reuse_roles.html
공식 문서에는 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 모듈이다. 정말 다양한 동작을 할 수 있는데 기본적인 내용을 가지고 예시를 들어보려고 한다.
---
- name: make_dir
file:
path: /usr/lib/home
state: directory
when: user_home.stat.exists == false
앞에서 우리는 user_home 에 PATH 경로를 넣었었다. 만약 해당 경로에 디렉토리가 존재하지 않는다면 path 에 담긴 디렉토리를 생성하라는 의미를 가지고 있다.
---
- name: create_symlink
file:
src: /usr/lib/home/src_link
dest: /usr/bin/dest_link
state: link
이런식으로 src 를 가리키는 dest 심볼릭 링크를 생성하는 것도 가능하다.
copy
---
- name: file_copy_test
copy:
src: "../files/test/test.sh"
dest: "/etc/profile.d/test.sh"
앞에서 Files 디렉토리에는 Role 에서 사용하는 파일이 들어 있다고 하였는데, src 에서 해당 파일을 지정한 뒤, dest 에 원하는 경로를 넣어서 파일 복사를 할 수 있다.
정말 많은 동작을 할 수 있다. unarcive 모듈을 사용하여 압축을 해제할 수 있으며, command 명령어를 사용하여 단순 명령어를 수행할 수도 있다. 관련 정보는 공식 문서를 참고하거나 구글링을 해도 손쉽게 예제 파일이 나오기 때문에 원하는 자동화 내용이 있다면 role 파일로 작성해서 자동화를 구축해보면 좋을 것 같다.
'⇥ DevOps Tech 🙋🏻♀️ > ✏️ Ansible' 카테고리의 다른 글
Ansible 변수 사용 , 우선순위 정리 (61) | 2023.11.27 |
---|---|
Ansible Role 을 이용한 노드 설치 자동화 (59) | 2023.10.20 |
Ansible Tower (AWX) 설치 방법 (0) | 2023.10.17 |
Ansible Playbook (0) | 2022.10.06 |
Ansible 사용 방법 (4) | 2022.09.26 |
댓글
이 글 공유하기
다른 글
-
Ansible 변수 사용 , 우선순위 정리
Ansible 변수 사용 , 우선순위 정리
2023.11.27 -
Ansible Role 을 이용한 노드 설치 자동화
Ansible Role 을 이용한 노드 설치 자동화
2023.10.20 -
Ansible Tower (AWX) 설치 방법
Ansible Tower (AWX) 설치 방법
2023.10.17 -
Ansible Playbook
Ansible Playbook
2022.10.06