Search
Duplicate
📒

[Ansible] 03-1. Role과 Content Collections을 활용한 플레이북

상태
완료
수업
Ansible
주제
4 more properties
참고

Ansible Roles와 컨텐츠 컬렉션을 활용한 플레이북 구현

NOTE
Ansible Roles는 Ansible 플레이북을 구조화하고, 재사용 가능하고 유지관리하기 쉽게 만드는 방법입니다. Role 특정 기능을 수행하기 위한 일련의 작업, 파일, 변수, 핸들러 등을 포함하는 폴더 구조입니다.
Ansible Role의 폴더구조
tasks: Role의 작업을 정의합니다.
handlers: Role의 핸들러를 정의합니다.
template: jinja2 템플릿 파일을 저장합니다.
files: Role에서 사용하는 파일을 저장합니다.
vars: Role의 변수 값을 정의합니다.
defaults: Role의 기본 변수 값을 정의합니다.
meta: Role의 메타데이터를 정의합니다.

장점

콘텐츠를 그룹화하여 코드를 다른 사용자와 쉽게 공유할 수 있다.
웹 서버, 데이터베이스 서버 또는 깃 레포와 같은 시스템 유형의 필수요소 정의
대규모 프로젝트 관리가 수월해짐
다른 사용자와 동시에 개발 가능
잘 작성한 롤은 앤서블 갤럭시를 통해 공유하거나 가져올 수 있음

롤을 이용한 플레이북 개발

NOTE
Ansible Roles을 활용해서 파일을 생성하는 예제를 작성합니다.
# 명령어 도움말 ansible-galaxy role -h # my-role 생성 ansible-galaxy role init my-role
Bash
복사
ansible role 초기화 코드

my-role 구조

- name: 디렉토리 존재확인 file: path: "{{ target_directory }}" state: directory - name: 파일 내용추가 copy: dest: "{{ target_directory }}/{{ file_name }}" content: "{{ file_content }}" notify: 알림
YAML
복사
task/main.yml
--- - name: 알림 debug: msg: "File {{ target_directory }}/{{ file_name }}에 새로운 내용이 추가되었다."
YAML
복사
handler/main.yml
--- target_directory: /root/bh/ansible file_name: test1.log file_content: "Ansible Role 테스트"
YAML
복사
vars/main.yml
--- target_directory: /tmp/ansible_role_example file_name: hello.txt file_content: "Hello, Ansible Role!"
YAML
복사
defaults/main.yml

Role 실행

Role을 작성해도 이전과 같이 ansible-palybook 명령어로 실행할수는 없다. Role을 실행시키기 위해서는 Role 호출하는 플레이북이 필요하며, 플레이북에서 Role 추가하는건 2가지 방식이 있다.
--- - hosts: all gather_facts: no roles: - my-role
YAML
복사
정적추가 방식
정적추가 방식은 roles영역에 명시적으로 추가하는 방법이며, Role이 플레이북의 실행 흐름에 따라 순차적으로 실행되어야할 때 사용합니다.
--- - hosts: all gather_facts: no tasks: - name: Role 동적추가 include_role: name: my-role when: {{ 조건변수 }}
YAML
복사
동적추가 방식
동적 추가 방식은 플레이북 도중 특정 조건에 따라 Role을 추가하는 방식입니다. 특정 조건이 만족되어야만 Role을 실행시킬 수 있습니다.

특수 작업 섹션(pre_tasks, post_tasks)

NOTE
pre_taskspost_tasksroles영역과 자주 사용되는 특수 영역이며, tasks와 유사하지만 pre_tasks는 role보다 먼저, post_taskstasks에서 핸들러가 동작한 이후 실행됩니다.
--- - hosts: all gather_facts: no # task 작업이전 pre_tasks: - name: pre_task 실행 debug: msg: "pre_task 실행" roles: - my-role tasks: - name: task 실행 debug: msg: "task 실행" notify: handler 실행 # task 작업이후 post_tasks: - name: post_tasks 실행 debug: msg: "post_tasks 실행" # task 성공하면 실행 handlers: - name: handler 실행 debug: msg: "handler 실행"
YAML
복사

Ansible 갤럭시

NOTE
ansible-galaxy role search postgresql --platforms ubuntu ansible-galaxy role install -p roles buluma.postgres
YAML
복사

Ansible 콘텐츠 컬렉션

NOTE
Ansible 콘첸크 콜렉션은 Ansible의 모듈, 플러그인, 역할 등을 쉽게 패키징하고 공유할 수 있게 해줍니다. 특히 재사용 가능하고 버전 관리가 가능한 컴포넌트로 Ansible의 자동화 작업을 더 구조적이고 효율적으로 관리할 수 있습니다.
ansible-galaxy collection install ansible.builtin
YAML
복사