Ansible / / 2024. 1. 15. 14:04

Ansible Roles ①개념(+ Ansible로 Apache 설치)

반응형

공식 문서:

https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_reuse_roles.html

 

Roles — Ansible Documentation

The classic (original) way to use roles is with the roles option for a given play: When you use the roles option at the play level, Ansible treats the roles as static imports and processes them during playbook parsing. Ansible executes each play in this or

docs.ansible.com

 

 

 


 

 

 

[ 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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유