728x90

운영체제를 구분하여 한 번에 설치


include_tasks란?

- 각 리눅스에 필요한 태스크를 정의한 yml 파일을 호출하여 실행

- 구조적인 태스크 관리가 가능함

 

include_tasks를 사용하는 이유

- 불필요하게 실행되는 태스크들을 관리하기 위해서

 => when을 사용하여 자동으로 노드의 종류를 구분하여 설치하는 경우 CentOS 태스크에서는 우분투의 태스크가 불필요하게 실행되고, Ubuntu 태스크에서는 CentOS의 태스크가 불필요하게 실행되므로 include_tasks를 이용

 

include_tasks를 사용하지 않고 웹 서버 설치 (nginx, apache)

CentOS 태스크가 실행될 때 > Ubuntu 노드들에 불필요한 태스크가 실행되는 것을 확인할 수 있음

 

 

Ubuntu 태스크가 실행될 때 > CentOS 노드들에 불필요한 태스크가 실행되는 것을 확인할 수 있음

 

 

include_tasks를 사용하여 웹 서버 설치 (nginx, apache)

1) CentOS.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.nginx.com dest=/usr/share/nginx/html/ mode=0644
- name: start nginx web server
  service: name=nginx state=started

 

2) Ubuntu.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.com dest=/usr/share/nginx/html/ 
           mode=0644 validate_certs=no

 

3) nginx_install_w_include_tasks.yml

---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
    - name: nginx for CentOS
      include_tasks: CentOS.yml
      when: ansible_distribution == 'CentOS'
    
    - name: nginx for Ubuntu
      include_tasks: Ubuntu.yml
      when: ansible_distribution == 'Ubuntu'

 

4) 설치

[vagrant@ansible-server install]$ anp nginx_install_w_include_tasks.yml

 

CentOS 태스크가 실행될 때 > include를 사용하여 작성한 CentOS.yml 파일을 호출함 > CentOS 노드들에서만 태스크가 실행 됨

 

 

Ubuntu 태스크가 실행될 때 > include를 사용하여 작성한 Ubuntu.yml 파일을 호출함 > Ubuntu 노드들에서만 태스크가 실행 됨

 

 

웹 브라우저에서 확인

CentOS 노드로 접속 172.30.1.101

 

 

Ubuntu 노드로 접속 172.30.1.201

 

 

설치한 웹 서버 삭제

1) CentOS_remove.yml

- name: remove epel-release
  action: "{{ ansible_pkg_mgr }} name=epel-release state=absent"
- name: remove nginx web server
  action: "{{ ansible_pkg_mgr }} name=nginx state=absent"

 

2) Ubuntu_remove.yml

  1 - name: remove nginx web server
  2   action: "{{ ansible_pkg_mgr }} name=nginx state=absent autoremove=yes"

 

3) nginx_remove_w_include_tasks.yml

  1 ---
  2 - name: Remove nginx on the nodes
  3   hosts: nodes
  4   become: yes
  5
  6   tasks:
  7     - name: nginx for CentOS
  8       include_tasks: CentOS_remove.yml
  9       when: ansible_distribution == 'CentOS'
 10
 11     - name: nginx for Ubuntu
 12       include_tasks: Ubuntu_remove.yml
 13       when: ansible_distribution == 'Ubuntu'
 14
~

 

4) 삭제

[vagrant@ansible-server remove]$ anp nginx_remove_w_include_tasks.yml

728x90

+ Recent posts