지난번에 [Ansible] 조건별로 nginx 설치하기 를 통해서
데비안 계열(우분투)를 골라서 설치하는 방법을 알아보았었죠오~!!
그러면 HPC나 WEB server나 이런 저런 목적으로 노드들 안에 여러가지의 운영체제들이 섞여 있는 경우라면 어떻게 할까요?
여러가지 버전을 만들어서 우분투 버전, 센트 버전, 레드햇 버전등을 다 만들어야 할까요?
만드는건 그렇다고 치고...여러개를 실행하려면 답답해 보이지 않을까요?
그리고 더 큰 문제는 지난번에 쓴 when 조건은 task단위로 동작하기 때문에...그동안 nginx를 설치하기 위해 여러 개들의 task를 쓴 것마다 다 넣어줘야 한다는 ...모질이 같은...단점이 발생합니다.
어떻게 해결하고 싶어지지 않나요?
... 아니 저만 그런가요...--;;;
하하하;;;
생각해 보면 말이죠 컴터는 트리(Tree)라는 구조를 정말 많이 좋아합니다.
저희가 주로 쓰고 있는 윈도우도 트리 구조를 가지고 있죠
왜 이런 얘기를 하냐면요..
nginx_main.yml에서 다른 yml을 부르면 되는, 즉 트리 구조를 만들면 이런 문제가 해결되거든요
..yml에서 다른 yml을 불러서 거기서 조건에 맞는 부분을 실행하면 됩니다.
이때 사용되는 기능이 include_tasks라는 기능입니다. (구 include)
소스 코드를 볼까요?
[ nginx_main.yml ]
1 2 3 4 5 6 7 8 9 10 11 12 13 | ---
- 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'
|
[ CentOS.yml ]
1 2 3 4 5 6 7 8 | - 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.nginx.com dest=/usr/share/nginx/html/ mode=0644 - name: Start nginx web server service: name=nginx state=started |
[ Ubuntu.yml ]
1 2 3 4 | - 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.nginx.com dest=/usr/share/nginx/html/ mode=0644 validate_certs=no |
위의 코드는 nginx_main에서 CentOS와 Ubuntu의 조건에 맞으면 불러서 사용하게 되는 것입니다.
결과는 이렇게 나옵니다.
어떤가요? 재밌을꺼 같죠? 이 걸 잘 활용하면 코드를 효율적으로 사용하고 구조화해서 보기 좋게, 그리고 관리 하게 쉽게 할수 있답니다. :)
혹시...
이렇다면 ~~ 다 이 글을 제대로 이해하게 못 쓴 제 잘못이니 :) 저에게 돌을 던져 주세요~!
그럼 돌아오는 주말 즐겁게 보내세요~!
udemy 강의도 잘들었고 도움 많이 받아갑니다~
답글삭제좋은 말씀 감사드립니다.~^^ 다음 강의는 더 잘 만들어 볼께요.
삭제