공식 문서:
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_reuse_roles.html
[ Roles ]
Roles는 알려진 파일 구조를 기반으로 관련된 변수, 파일, 작업, 핸들러 및 기타 Ansible 자산을 자동으로 로드할 수 있게 한다.
콘텐츠를 roles로 그룹화해면 쉽게 재사용하고 다른 사용자들과 공유할 수 있다.
Roles 디렉터리 구조
roles/
common/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
handlers/ #
main.yml # <-- handlers file
templates/ # <-- files for use with the template resource
ntp.conf.j2 # <------- templates end in .j2
files/ #
bar.txt # <-- files for use with the copy resource
foo.sh # <-- script files for use with the script resource
vars/ #
main.yml # <-- variables associated with this role
defaults/ #
main.yml # <-- default lower priority variables for this role
meta/ #
main.yml # <-- role dependencies
library/ # roles can also include custom modules
module_utils/ # roles can also include custom module_utils
lookup_plugins/ # or other types of plugins, like lookup in this case
webtier/ # same kind of structure as "common" was above, done for the webtier role
monitoring/ # ""
fooapp/ # ""
main.yml
- 역할의 주요 구성 요소들을 정의
- 역할 내의 특정 부분에 해당하는 설정 정보를 포함
tasks/main.yml
- 역할이 실행하는 주요 작업 목록
handlers/main.yml
- 이 역할 내부 또는 외부에서 사용될 수 있는 핸들러
library/my_module.py
- 이 역할에서 사용될 수 있는 모듈
defaults/main.yml
- 역할에 대한 기본 변수
- 사용 가능한 모든 변수 중에서 가장 낮은 우선 순위를 가짐
- 인벤토리 변수를 포함한 다른 변수에 의해 쉽게 재정의 될 수 있음
vars/main.yml
- 역할에 대한 기타 변수
files/main.yml
- 역할이 배포하는 파일
templates/main.yml
- 역할이 배포하는 템플릿
meta/main.yml
- 역할에 대한 메타데이터
- 역할 의존성 및 플랫폼 지원과 같은 선택적 Galaxy 메타데이터를 포함
[ ansible-galaxy ]
다양한 Roles와 Collection 관련 작업을 수행.
[ 예제 : apache 웹 서버 만들기]
폴더 및 앤서블 설정파일 생성
# Role과 Inventory 폴더 생성
mkdir roles inventory
# 앤서블 설정파일과 호스트파일 생성
touch ansible.cfg inventory/inventory.ini
inventory.ini 및 ansible.cfg 내용:
# /inventory/inventory.ini
[web_servers]
web web_host=192.168.77.114 web_user=ubuntu
# /ansible.cfg
[defaults]
inventory = inventory.ini # inventory 파일 지정
roles_path = ~/ansible_test/roles # role을 찾을 디렉토리 경로 설정
role 생성
ansible-galaxy init roles/web_server
role 디렉토리 생성 결과:
role 구성(tasks 디렉토리의 main.yaml 파일)
# roles/web_server/tasks/main.yml
---
- name: Install web server # Apache 웹 서버 설치
ansible.builtin.package:
name: apache2
state: present
- name: Start web server # Apache 웹 서버 시작
ansible.builtin.service:
name: apache2
state: started
playbook 작성
# vi roles/web_server.yaml
---
- name: Configure Web Servers
become: true
hosts: web_servers
roles:
- web_server
playbook 실행
# ansible-playbook -i <인벤토리 파일> <플레이북 파일>
ansible-playbook -i inventory/inventory.ini roles/web_server.yaml
호스트 서버에서 결과 확인:
'Ansible' 카테고리의 다른 글
Ansible Missing sudo password (0) | 2024.01.30 |
---|---|
Ansible Roles ②Tasks(Apache 설치 유무에 따라 자동 설치/삭제) (0) | 2024.01.15 |
Ansible.Builtin 모듈 (0) | 2024.01.12 |
Ansible 구성요소 (0) | 2024.01.11 |