Ansible Playbook - 템플릿 응용

템플릿은 src에서 jinja2를 읽고 dest로 쓰는 것 밖에 못할까

이번에는 ins_chk.j2라는 파일을 만들어볼 것이다.

이름에서도 알 수 있듯이 체크를 위한 용도라는 것을 알 수 있다.

centOS와 ubuntu 운영체제의 경우 같은 리눅스 계열 운영체제이지만 내부 명령어가 다른 것을 알 수 있다.

패키지 설치에 centOS는 yum을, ubuntu는 apt를 사용하는 것 처럼 말이다.

이처럼 배포가 완료된 후 해당 노드의 os의 종류를 체크해서 “이 OS에는 이러한 명령어를 써야해” 라고 명시해둔다면 사용자들에게 도움이 될 것이다.

---
- 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

lookup이라는 기능을 사용하여 템플릿을 찾고, split을 사용하여 개행 문자로 나누는 것을 알 수 있고 debug message로 화면에 출력하는 것을 알 수 있다.

\{\% 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 \%\}

이 내용은 yaml에서도 구현이 가능하나 템플릿으로 따로 만들어둠으로써 Playbook에서 이 템플릿을 호출하여 재사용이 가능하게 하였다.

http://jinja.quantprogramming.com/

위의 사이트에서 jinja2 템플릿의 결과를 미리 볼 수 있다.

Reference

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



© 2022. by minkuk

Powered by minkuk