Ansible Playbook - Role 사용법

Role 사용법

우리는 이전 시간에 nginx를 설치하는 yaml, jinja2 template, vars를 이미 정의했었다.

---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
  - name: nginx for Any Linux
    include_tasks: "\{\ lnx_name \}\}.yml"
  - name: Check nginx config
    command: "nginx -t"
    register: nginx
  - debug: msg="\{\{ nginx.stedrr_lines \}\}"

  - name: Check nginx service
    debug: msg="\{\{lookup('template','ins_chk.j2').split('\n')\}\}"

  handlers:
  - name: Restart nginx web server
    service: name=nginx state=restarted

tasks는 구조화되어있으며, handlers도 정의되어있는 것을 확인할 수 있다.

\{\% if ansible_distribution == 'Ubuntu' \%\}
  [ OS : Ubunt ]
    >> 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
    >> systemctl status nginx
\{\% else \%\}
    >> service nginx status(* Gernally)
\{\% endif \%\}

위의 j2 템플릿도 이미 구현을 했었다.

vars:
  lnx_name: "\{\{ 'Ubuntu' if ansible_distribution == 'Ubuntu' else 'CentOS' if ansible_distribution == 'CentOS' else 'Just Linux'\}\}"

전역 변수 또한 vars로 선언해두었다.

위의 각각의 파일들을 이전 시간에 살펴본 구조 폴더의 이름의 아래에 role 형식의 맞게 구성해서 집어넣으면 role을 만들 수 있다.

해당 기능이 필요하다면 해당 디렉터리 (vars,handlers 등 외 7가지) 아래에 main.yml로 정의한다.

이렇게 구성된 role은 아래와 같이 호출할 수 있다.

---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes // 특정 사용자로 전환할 때 사용

  roles:
    - { role: ./roles/ngix }

의문

우리는 지금까지 role을 사용하는 방법에 대해서 알아보았다.

그렇다면 왜 굳이 이렇게 role을 만들고 사용해야하는 것일까? 라는 근본적인 질문을 하게 될지도 모른다.

사실 role을 사용하는 가장 큰 이유는 다른 사람이 이미 정의한 role을 그대로 가져다 사용할 수 있다는 기능이 있기 때문이다.

Reference

인프런 조훈님 강의 - 앤서블을 깊이있게 활용하기



© 2022. by minkuk

Powered by minkuk