1. include_tasks를 사용하지 않고 nginx를 노드에 설치
---
- name: Install nginx on the nodes
hosts: nodes
become: yes
tasks:
- name: Install nginx web server
action : "{{ ansible_pkg_mgr }} name=nginx state=present update_cache=yes"
when : ansible_distribution == 'Ubuntu'
- name: Install nginx web server2-1
action : "{{ ansible_pkg_mgr }} name=epel-release state=latest"
when : ansible_distribution == 'CentOS'
- name: Install nginx web server2-2
action : "{{ ansible_pkg_mgr }} name=nginx state=present"
when : ansible_distribution == 'CentOS'
플레이북을 작성하여 nginx를 각 운영체제에 맞게 설치하도록 설정한 코드이다.
# ansible-playbook sim_nginx_install_w_when.yml
플레이북을 통해 nginx 설치를 진행한다.
2. include_tasks를 포함하여 플레이북 다시 작성
include_tasks를 사용하여 구조적으로 플레이북을 작성하면 코드의 내용이 길어지면 추후의 내용을 확인하고 수정하기 어려워지기 때문이다.
---
- name: Install nginx on the nodes
hosts: nodes
become: yes
tasks:
- name: nginx for Ubuntu
include_tasks: Ubuntu.yml
when: ansible_distribution == 'Ubuntu'
- name: nginx for CentOS
include_tasks: CentOS.yml
when: ansible_distribution == 'CentOS'
include_tasks 와 when을 사용하여 노드의 운영체제가 Ubuntu인 경우에는 Ubuntu.yml을 CentOS인 경우에는 CentOS.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
Ubuntu.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
- name: Start nginx web server
service: name=nginx state=started
CentOS.yml을 위와 같이 작성한다.
# ansible-playbook sim_nginx_install_w_when.yml
플레이북 구성을 시작하면 각 운영체제에 맞게 nginx가 구성되기 시작한다. 각 운영체제에 맞는 설치는 진행하고 맞지 않는 설치는 skip되어 넘어간다. 설치는 각 운영체제에 맞는 설치파일이 동작하여 설치가 진행된다.
3. if를 활용
---
- name: Install nginx on the nodes
hosts: nodes
become: yes
vars:
lnx_name: "{{ 'Ubuntu' if ansible_distribution == 'Ubuntu'
else 'CentOS' if ansible_distribution == 'CentOS'
else 'Just Linux' }}"
tasks:
- name: nginx for Any Linux
include_tasks: "{{ lnx_name }}.yml"
vars를 이용하여 lnx_name이라는 변수를 생성한다. lnx_name의 값은 if를 사용하여 운영체제가 Ubuntu일 때는 Ubuntu로 CentOS일 경우에는 CentOS로 그 이외의 운영체제는 Just Linux로 할당된다.
tasks에 lnx_name 변수와 include_tasks를 이용하여 특정 운영체제마다 원하는 설치파일이 동작하도록 설정되어있다.
ansible-playbook nginx__install_w_if.yml
해당 플레이북을 동작시키면 설치가 각 운영체제에 맞게 진행된다. 더 이상 skip이라는 문구가 없이 설치가 진행되어 task가 낭비되지 않고 더 빠르게 설치가 진행된다.
'Ansible' 카테고리의 다른 글
Ansible Handler & Vars (0) | 2021.07.23 |
---|---|
기존에 작성한 Playbook을 짜임새 있게 재구성하기 (0) | 2021.07.22 |
Ansible FACT(s) 활용 (0) | 2021.07.21 |
Ansible 구성 authorized_keys 등록 자동화 (0) | 2021.07.21 |
Ansible 서버 Known_hosts에 node 등록 자동화 (0) | 2021.07.21 |