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
인프런 조훈님 강의 - 앤서블을 깊이있게 활용하기