본문 바로가기
IT Knowledge/Ansible

Ansible Role 개요 및 사용법

by Seok. 2021. 7. 31.
반응형

Ansible role() Playbook(플레이북) 여러 파일로 분할하는 메커니즘이다.

 

여러 파일로 분할함으로써 플레이북을 간단하게 작성할 있고, 재사용이 쉬워 진다.

 

[Role Default Path]

Default path : /etc/ansible/roles

 

Default Path 재정의 방법

Ansible.cfg 파일 수정

[default]
roles_path = ~/ansible_roles

 

[Role 구조]

역할들을 정의하고, 이들을 Directory별로 분리한다.

Example

Directory 설명
Roles/example/tasks/main.yml 테스크
Roles/example/files/ 호스트에 업로드할 파일
Roles/example/templates/ Jinja2 템플릿 파일
Roles/example/handlers/main.yml 핸들러
Roles/example/vars/main.yml 재정의 없는 변수
Roles/example/defaults/main.yml 재정의 가능한 기본 변수
Roles/example/meta/main.yml 롤에 대한 의존정보

 

 

[Role 장점]

프로젝트를 관리하기 쉽다.

 => 분할 함으로써, 여러 관리자가 동시에 개발이 편하다.

 => 컨텐츠를 그룹화 하여 다른 사용자와 공유가 쉽다

Role 대한 소스를 가져올 있다.

 => Public Ropository : ansible galaxy 사이트(https://galaxy.ansible.com/)

 


[Role 사용법 예시]

(ex. mezzanine-across-hosts.yml)

- Name: deploy postgres on vagrant
  Hosts: db
  Vars_files:
   - secret.yml
  Roles:
   - role: database
     database_name: "{{ mezzanine_proj_name }}"
     database_user: "{{ mezzanine_proj_name }}"
 
- Name: deploy mezzanine on vagrant
  Hosts: web
  Vars_files:
   - secret.yml
  Roles:
   - role: mezzanine
     database_host:"{{ hostvars.db.ansible_eth1.ipv4.address }}"
     live_hostname: 192.168.33.10.xip.io
     domains:
      - 192.168.33.10.xip.io
      - www.192.168.33.10.xip.io

 

[사전테스크 & 사후테스크]

이전에 실행되는 태스크 목록 : pre-tasks

 이후 실행되는 태스크 목록 : post-tasks

 

Ex. 사전에 apt 캐시 업데이트 & 사후에 slack 채널에 알림 발송

- Name: deploy mezzanine on vagrant
  Hosts: web
  Vars_files:
   - secret.yml
  Pre_tasks:
   - name: update the apt cache
     apt: update_cache=yes
  Roles:
   - role: mezzanine
     database_host:"{{ hostvars.db.ansible_eth1.ipv4.address }}"
     live_hostname: 192.168.33.10.xip.io
     domains:
      - 192.168.33.10.xip.io
      - www.192.168.33.10.xip.io
  Post_tasks:
   - name: notify slack
     local_action: >
       slack
       domain=xxx.slack.com
       token={{ slack_token }}
       msg="web server {{ inventory_hostname }} configured"

 

반응형

댓글