728x90

when 조건을 사용한 nginx 설치


when 조건 사용

- when 조건을 사용하면, 코드가 스스로 앤서블 노드의 운영체제를 파악하고 조건에 맞는 패키지 관리자를 호출하여 nginx를 설치함

- facts에서 제공하는 ansible_pkg_mgransible_distribution 인자 값을 사용하여 운영체제 정보 확인

 

 

 

1. nginx_install_w_when.yml 파일 실행

CentOS는 CentOS에 해당하는 태스크를 수행하고, 우분투는 우분투에 해당하는 태스크를 수행하는 것을 확인할 수 있음

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

  tasks:  
    - name: install epel-release for CentOS
      action: "{{ ansible_pkg_mgr }} name=epel-release state=latest"
      when: ansible_distribution == 'CentOS'
	  
    - name: install nginx web server for CentOS
      action: "{{ ansible_pkg_mgr }} name=nginx state=present"
      when: ansible_distribution == 'CentOS'

    - name: upload default index.html for web server
      get_url: url=https://www.nginx.com dest=/usr/share/nginx/html/ mode=0644
      when: ansible_distribution == 'CentOS'
	  
    - name: start nginx web server
      service: name=nginx state=started
      when: ansible_distribution == 'CentOS'
	  
    - name: install nginx web server for Ubuntu
      action: "{{ ansible_pkg_mgr }} name=nginx state=present update_cache=yes"
      when: ansible_distribution == 'Ubuntu'

    - 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
      when: ansible_distribution == 'Ubuntu'

 

2. 주의: 우분투 버전 및 nginx.com의 설정에 따라 에러가 발생할 수 있음

  => get_url의 url=https://www.nginx.com을 url=http://www.apache.com으로 변경

 

 

3. url 수정 부분

 27     - name: upload default index.html for web server
 28       get_url: url=https://www.apache.com dest=/usr/share/nginx/html/
 29                mode=0644 validate_certs=no
 30       when: ansible_distribution == 'Ubuntu'

 

4. 정상 실행 확인

 

CentOS가 설치된 노드

 

Ubuntu가 설치된 노드

 

5. 설치한 nginx 삭제

nginx_remove_w_when.yml 파일 실행

[vagrant@ansible-server ~]$ anp nginx_remove_w_when.yml
---
- name: Remove nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
    - name: remove epel-release for CentOS
      action: "{{ ansible_pkg_mgr }} name=epel-release state=absent"
      when: ansible_distribution == 'CentOS'
	  
    - name: remove nginx web server for CentOS
      action: "{{ ansible_pkg_mgr }} name=nginx state=absent"
      when: ansible_distribution == 'CentOS'
  
    - name: remove nginx web server
      action: "{{ ansible_pkg_mgr }} name=nginx state=absent autoremove=yes"
      when: ansible_distribution == 'Ubuntu'

 

728x90

+ Recent posts