Role
- 바로 사용이 가능하다.
- 원하는 작업을 검색하여 롤을 선택하고 해당 롤을 적용하여 시스템에 원하는 기능이 동작한다.
롤의 구조
- handlers = 핸들러가 담기는 디렉터리
- defaults = 디폴트 인자가 들어가는 디렉터리
- vars = 인자가 정의되는 디렉터리
- files = 배포될 파일들이 위치하는 디렉터리
- template = 배포에 사용될 템플릿들이 들어가는 디렉터리
- meta = 다른 롤과 의존성이 있는 경우에 해당 롤을 명시
- tasks = 지금까지 진행했던 기본 테스크(task)를 넣는 공간
실습
nginx 설치 플레이북
# vi nginx_install_w_roles.yml
---
- name: Install nginx on the nodes
hosts: nodes
become: yes
roles:
- { role: ./roles/nginx }
handlers
vi handlers/main.yml
---
- name: Restart nginx web server
service: name=nginx state=restarted
tasks
vi tasks/main.yml
---
- name: nginx for Any Linux
include_tasks: "{{ lnx_name }}.yml"
- name: Check nginx config
include_tasks: chk_ngx_cfg.yml
- name: Check nginx service
debug: msg="{{lookup('template','ins_chk.j2').split('\n')}}"
vi /tasks/chk_ngx_cfg.yml
- command: "nginx -t"
register: nginx
- debug: msg="{{ nginx.stderr_lines }}"
vi tasks/CentOS.yml
- name: install epel-release
action : "{{ ansible_pkg_mgr }} name=epel-release state=latest"
- name: install nginx web server
action : "{{ ansible_pkg_mgr }} name=nginx state=present"
- name: Upload default index.html for web server
get_url: url=https://www.apache.org dest=/usr/share/nginx/html/ mode=0644
notify:
- Restart nginx web server
vi tasks/Ubuntu.yml
- name: Install nginx web server
action : "{{ ansible_pkg_mgr }} name=nginx state=present update_cache=yes"
- name: Upload default index.html for web server
get_url: url=https://www.apache.org dest=/usr/share/nginx/html/ mode=0644 validate_certs=no
notify:
- Restart nginx web server
vars
vi vars/main.yml
---
lnx_name: "{{ 'Ubuntu' if ansible_distribution == 'Ubuntu'
else 'CentOS' if ansible_distribution == 'CentOS'
else 'Just Linux' }}"
template
vi template/ins_chk.j2
{% if ansible_distribution == 'Ubuntu' %}
[ OS : Ubuntu ]
>> dpkg -l | grep nginx
OR
>> service nginx status
{% elif ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' %}
[ OS : CentOS ver7 ]
>> yum list installed | grep nginx
OR
>> systemctl status nginx
{% elif ansible_distribution == 'CentOS' and ansible_distribution_major_version < '7' %}
[ OS : CentOS ver6 ]
>> yum list installed | grep nginx
OR
>> service nginx status
{% else %}
>> service nginx status (* Gernally)
{% endif %}
플레이북 실행
ansible-playbook nginx_install_w_roles.yml
Ansible Galaxy 활용하기
Ansible Galaxy는 다른 사람들이 만든 Roles를 검색하고 설치하는 기능을 제공해주는 도구로 이를 활용하면 특정 서비스를 빠르고 쉽게 구축이 가능하다.
1. 사용할 Role 검색
# ansible-galaxy install jdauphant.nginx
# vi jdauphant.nginx.yml
---
- name: Install nginx on the nodes by jdauphant
hosts: nodes
become: yes
roles:
- role: jdauphant.nginx
roles를 위와같이 설정하면 이전에 galaxy를 통해 설치된 nginx roles가 설치된다.
# ansible-playbook jdauphant.nginx.yml
'Ansible' 카테고리의 다른 글
Vagrant와 Ansible을 활용한 부하 분산이 가능한 웹 서버 구성 (0) | 2021.07.28 |
---|---|
Ansible Template 활용하기 (0) | 2021.07.24 |
Ansible Handler & Vars (0) | 2021.07.23 |
기존에 작성한 Playbook을 짜임새 있게 재구성하기 (0) | 2021.07.22 |
include_tasks와 if를 활용한 nginx 설치 플레이북 작성 (0) | 2021.07.22 |