2017년 10월 27일 금요일

[Ansible] 조건별로 nginx를 "한방에" 설치하기













지난번에 [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의 조건에 맞으면 불러서 사용하게 되는 것입니다.

결과는 이렇게 나옵니다.




어떤가요? 재밌을꺼 같죠? 이 걸 잘 활용하면 코드를 효율적으로 사용하고 구조화해서 보기 좋게, 그리고 관리 하게 쉽게 할수 있답니다. :)

혹시...

이렇다면 ~~ 다 이 글을 제대로 이해하게 못 쓴 제 잘못이니 :) 저에게 돌을 던져 주세요~!
그럼 돌아오는 주말 즐겁게 보내세요~!



2 개의 댓글:

  1. udemy 강의도 잘들었고 도움 많이 받아갑니다~

    답글삭제
    답글
    1. 좋은 말씀 감사드립니다.~^^ 다음 강의는 더 잘 만들어 볼께요.

      삭제

 
Copyright © . 엔지니어를 위한 파이썬 및 기술 블로그 - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger