Ansible

Ansible Role 및 galaxy 활용하기

Joon0464 2021. 7. 25. 16:42

Role

  • 바로 사용이 가능하다.
  •  원하는 작업을 검색하여 롤을 선택하고 해당 롤을 적용하여 시스템에 원하는 기능이 동작한다.

롤의 구조

  • handlers = 핸들러가 담기는 디렉터리
  • defaults = 디폴트 인자가 들어가는 디렉터리
  • vars = 인자가 정의되는 디렉터리
  • files = 배포될 파일들이 위치하는 디렉터리
  • template = 배포에 사용될 템플릿들이 들어가는 디렉터리
  • meta = 다른 롤과 의존성이 있는 경우에 해당 롤을 명시
  • tasks = 지금까지 진행했던 기본 테스크(task)를 넣는 공간

실습

role의 구조

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를 검색하고 설치하는 기능을 제공해주는 도구로 이를 활용하면 특정 서비스를 빠르고 쉽게 구축이 가능하다.

https://galaxy.ansible.com/

 

Ansible Galaxy

 

galaxy.ansible.com

1. 사용할 Role 검색

위 링크의 메인 화면에서 role을 검색하기 위해 Search 버튼을 클릭한다.
검색할 role 이름을 입력하고 filter를 확장하여 Download Count와 Roles로 필터링하여 검색한다.
이번 글에서 설치해볼 nginx role이다.

# ansible-galaxy install jdauphant.nginx

설치가 되면 /home/vagrant/.ansible/roles/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