[Ansible] 09. Roles
카테고리: ANSIBLE
태그: ansible
[Ansible] 09. Roles
🔔 자세한 모듈 내용은 아래 문서를 참고
모듈 내용 : https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#modules
예제 Github : https://github.com/revenge1005/Ansible_study
🔔 Roles
-
Ansible에서는 “Role”을 사용하여 Ansible 코드를 더 쉽게 재사용하는 방법을 제공한다.
-
Role은 인프라를 프로비저닝하고, 애플리케이션을 배포하는 등의 모든 작업에 대해 변수, 파일, 템플릿 등의 기타 리소스들을 표준화된 디렉토리 구조로 패키징한다.
-
즉, Role은 쉬운 공유, 휴대성 및 재사용을 위해 특정 구조로 배열된 yaml 작업파일 및 지원 항목들의 모음이라고 할 수 있다.
🔔 Roles의 구성요소
-
Role은 하위 디렉토리 및 파일의 표준화된 구조에 의해 정의된다.
-
최상위 디렉토리는 role 자체의 이름으로 정의하며, 그 아래의 파일들은 tasks, handler 등 role에서 각 파일의 목적에 따라 이름이 지정된 하위 디렉토리로 구성된다.

| 구분 | 설명 |
|---|---|
| defaults | 이 디렉터리의 main.yml 파일에는 role에 사용될 때 덮어쓸 수 있는 role 변수의 기본값을 설정 이러한 변수는 우선순위가 낮으며 플레이북에서 변경하고 사용자가 지정할 수 있다. 이러한 변수는 role을 사용하는 플레이북을 작성하는 사람에게 할 일을 정확하게 사용자 지정하거나 제어할 방법을 제공하기 위한 것으로, default 변수는 해당 값을 재정의하려는 경우에만 사용한다. |
| file | 이 디렉터리에서는 정적 파일을 두는 곳 |
| handlers | 이 디렉터리의 main.yml 파일에는 role의 핸들러를 정의 |
| meta | 이 디렉터리의 main.yml 파일에는 role의 메타데이터 정보가 작성됨 제작자, 회사, 라이센스 정보 등 role에 필요한 dependency 정보들을 기입한다. |
| tasks | 이 디렉터리의 main.yml 파일에는 role의 task들을 정의한 내용이 포함 |
| templates | 이 디렉터리에는 role에서 참조하는 jinia2 템플릿이 들어 있다. |
| tests | 이 디렉터리에는 role을 테스트하는데 사용할 수 있는 인벤토리와 test.yml 플레이북이 포함 |
| vars | 이 디렉터리의 main.yml 파일은 role의 변수 값을 정의 종종 이러한 변수는 role 내에서 내부 목적으로 사용된다. 이러한 변수는 우선 순위가 높으며, 플레이북에서 사용될 때 변경되지 않는다. var 변수의 의도는 role의 내부 기능에 의해 사용되는 변수를 정의하도록 하는 것이다. |
🔔 ansible role 사용법
---
- host: all
roles:
- role01
- role02
-
이렇게 지정한 role01, role02의 디렉토리에서 tasks, heandlers, vars 등 모든 내용들을 불러와서 해당 role을 실행한다.
-
role에서 cp, script, template 또는 import_task, include_task 등은 절대경로/상대경로, 이름이 없는 관련 파일, 템플릿 또는 작업 파일을 참조할 수 있다.
-
ansible은 files, templates, tasks 하위 디렉토리에서 이러한 각각의 항목들을 찾는다.
(1) role이 포함된 playbook에서 실행 순서 제어하기
-
role이 포함된 playbook에서 실행 순서를 제어하기 위해 2가지 지시자를 사용한다.
-
pre_tasks에 나열된 작업은 모든 role, 일반 tasks가 실행되기 전에 제일 먼저 실행된다.
-
post_tasks는 이러한 작업은 pre_tasks, tasks, roles가 모두 실행된 후에 마지막에 실행된다.
-
(2) playbook에 role 포함하기
-
include_role : role을 동적으로 포함 (ansible 2.3 version에서 추가된 기능)
-
import_role : role을 동적으로 포함 (ansible 2.3 version에서 추가된 기능)
---
- name: execute a role as a task
hosts: web.example.com
tasks:
- name: a normal task
debug:
msg: 'first task'
- name: a task to include role2 here
include_role: role2
🔔 Role 폴더 생성 명령
$ ansible-galaxy init roles
- Role roles was created successfully
$ tree
.
└── roles
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
🔔 Role 예시 (WEB 서버 구성)
아래와 같이 구성하였고, 예제의 자세한 내용은 Git에서 확인
https://github.com/revenge1005/Ansible_study/tree/master/02.%20Ansible%20Tutorial%20-%202/Ansible%20Tutorial%202%20-%2009.%20Roles
# tree
.
├── ansible.cfg
├── inventory
├── playbook.yml
└── roles
└── web_servers
├── README.md
├── defaults
│ └── main.yml
├── files
│ └── MyWebSite
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ └── 4.png
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ └── index.j2
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
11 directories, 16 files

댓글 남기기