2017년 10월 17일 화요일

[Ansible] 조건별로 nginx 설치하기


오랜만 입니다~~!
일주일에 한개는 올려야 하는데....하하하;;; 바빴네요 ㅠㅠ
(이런거 아닙니다 진짜 아닙니다 -_-;)



이번에 다룰 주제는 ~~!
그룹 내에서 조건으로 구분해서 설치하기 입니다.

이게 무슨 얘기냐면....
web server를 위한 노드들이 있다고 생각해 봅시다.
그런데, 특정 OS 버그가 있을수 있기 때문에, 다양성을 추구하는 목적 및 테스트 bed라 섞어서 쓴다고 해 봅시다..
즉 우분투와 레드햇 계열을 동시에 사용하고 있다고  했을때,
그룹을 구분해서 우분투 계열과 레드햇 계열로 쪼개서 hosts에 입력하면 되겠지만 말이지요...

web, prod, test를 하는 목적에 또 여기서 OS 별로 쪼개면 엄청 귀찮게 되거든요..
따라서 해당 부분을 자동으로 구분하도록 코드를 입력해 주면 편리하게 이용이 가능합니다.~!!

우선 단순하게 구현하는 것부터 ~~!!


1
2
3
4
5
6
7
8
9
---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
    - name: install nginx web server
      action : "{{ ansible_pkg_mgr }} name=nginx state=present"
      when : ansible_os_family == 'Debian'

해당 코드는 우분투 그러니까....
데비안 계열만 인식해서 >>> ansible_os_family == 'Debian' 
그중에서 데비안에서 쓰는 apt를 추출해서 {{ ansible_pkg_mgr }}
nginx를 설치하는 것 입니다.
(package라는 모듈을 쓰면 더 간단하게 되기도 하지만 일단 이걸로 실습해 봅니다아~)

여기서 이게 가능한 것은 when이라는 조건과 ansible_os_family와 ansible_pkg_mgr이라는 변수를 쓸수가 있었다는 거죠

결과를 보면...다음과 같죠~!


여기서 빨강색은 인자를 수집할때는 가상머신이 꺼져 있어서 그런 것입니다~!




현재 상태가 이렇거든요..메모리 부족으로... 4개를 껐어요.
돈 벌어서 메모리 사야 할까봐요 ㅠㅠ




여하튼 깔끔하게 우분투에만 nginx가 설치 되었습니다.~
(101-105까지거든요~)

그럼 인자값이 있는 변수를 어떻게 알아냈을까요?
(저만 궁금한가요...ㅠㅠ?)



그건 말이죠오오~!
ansible -m setup <노드이름>을 입력하면 명령 수행시에 얻어오는 인자들을 보여줍니다.
인자 값 샘플

거기서 아래와 같이 두가지 방법으로 인자 값을 받아서 사용할수 있는데요

[ jin_ipv4.yml ]

1
2
3
4
5
---
- hosts: localhost
  tasks:
    - debug: msg={{ ansible_default_ipv4.address }}
    - debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']

debug를 쓴거는 내용을 확인하려고 쓴거고...중요한건

{{ ansible_default_ipv4.address }}
or
[inventory_hostname]['ansible_default_ipv4']['address']

이 구문이 되는 거죠 (파이썬의 dict에 익숙하시면 아주 보기 편....;; 할텐데요.)

아..아니아니 이게 아니라..




그러니 포기하지 말고, 본인의 상상력을 발휘해서 좀 더 동적으로 동작하는 코드를 만들어 내 봅시다 :)

참 결과는요..이렇게 나옵니다. 여기 IP는 기본으로 vagrant의 nat ip 입니다앙~!



이걸 더 보기 좋게 만드는 것을 다음에 해볼께요~!!
이걸 알아두면 롤(Role)도 쉬워요 아...마..도요?
하하하;;;

추가 정보
앤서블 Family로 받아오는 OS 정보 입니당~!
(고로 vmware와 windows는 이걸로 안되는다는거죠;; 추후에 아마 추가될꺼에요 nxos는 어떻게 될지 모르겠네요 ...왠지 redhat으로 될 것만 같은 느낌이...드네용)

# A list with OS Family members
OS_FAMILY = dict(
    RedHat = 'RedHat', Fedora = 'RedHat', CentOS = 'RedHat', Scientific = 'RedHat',
    SLC = 'RedHat', Ascendos = 'RedHat', CloudLinux = 'RedHat', PSBM = 'RedHat',
    OracleLinux = 'RedHat', OVS = 'RedHat', OEL = 'RedHat', Amazon = 'RedHat',
    XenServer = 'RedHat', Ubuntu = 'Debian', Debian = 'Debian', Raspbian = 'Debian', Slackware = 'Slackware', SLES = 'Suse',
    SLED = 'Suse', openSUSE = 'Suse', SuSE = 'Suse', SLES_SAP = 'Suse', Gentoo = 'Gentoo', Funtoo = 'Gentoo',
    Archlinux = 'Archlinux', Manjaro = 'Archlinux', Mandriva = 'Mandrake', Mandrake = 'Mandrake',
    Solaris = 'Solaris', Nexenta = 'Solaris', OmniOS = 'Solaris', OpenIndiana = 'Solaris',
    SmartOS = 'Solaris', AIX = 'AIX', Alpine = 'Alpine', MacOSX = 'Darwin',
    FreeBSD = 'FreeBSD', HPUX = 'HP-UX'
)
https://groups.google.com/forum/#!topic/ansible-project/OZPu-b17n_w







0 개의 댓글:

댓글 쓰기

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