오랜만 입니다~~!
일주일에 한개는 올려야 하는데....하하하;;; 바빴네요 ㅠㅠ
(이런거 아닙니다 진짜 아닙니다 -_-;)
이번에 다룰 주제는 ~~!
그룹 내에서 조건으로 구분해서 설치하기 입니다.
이게 무슨 얘기냐면....
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개를 껐어요.
돈 벌어서 메모리 사야 할까봐요 ㅠㅠ
(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 개의 댓글:
댓글 쓰기