[Ansible] Ansible 인벤토리

Fabro·2021년 9월 7일
0
post-thumbnail

Ansible 인벤토리

매니지드 노드의 목록을 가지고 있는 인벤토리가 없으면 앤서블로 작업이 불가능하다. 따라서, 반드시 인벤토리가 존재 해야한다.

인벤토리

  • Ansible에서 관리할 호스트 목록을 정의
  • 단일 호스트 및 그룹 단위로 관리(중첩 그룹 지원)
  • 정적/동적 인벤토리 지원
  • /etc/ansible/hosts가 기본 인벤토리지만 직접 사용하지 않음
  • 인벤토리의 위치는 설정 파일이 지정
  • 설정 파일에 지정한 위치가 아닌 다른 인벤토리의 위치를 지정하고 싶으면 -i 옵션 사용

정적 인벤토리

  • 직접 인벤토리를 작성하는 것
  • INI 파일이나 YAML 파일 형식으로 구성
  • 일반적으로 INI 형식을 많이 사용(작성하기 쉽고 유연함)
  • 호스트 그룹 사용시 []로 그룹 이름 지정
  • 기본 그룹으로 all / ungrounded 제공
  • :children 접미사를 이용해 중첩 그룹 지정 가능
  • 범위 지정 방식으로 간편한 구성 가능
  • --list-hosts 옵션으로 확인 가능

정적 인벤토리에 호스트 설정하기

INI 파일의 형식

[ ] 를 이용해 용도별로 그룹을 지정할 수 있으며, 특정 서버는 여러 그룹에 속할 수 있고, 모든 서버는 all 그룹에 속해있다.

YAML 파일의 형식

all 밑에 children이라는 지시어를 이용해 그룹들을 만들어준다.

범위 지정을 이용한 호스트 설정

만약 web 그룹으로 묶으려는 매니지드 노드들이 host1~4까지 있다면 어떻게 선언할 수 있을까??

vi inventory

[web]
host1
host2
host3
host4

물론 이렇게 하는 방법도 있지만 간결하게 작성하는걸 좋아하니까 범위 지정을 이용해 간결하게 작성해 보자!

vi inventory

[web]
host[1..4]

이렇게 작성하면 단 한줄로 똑같은 결과를 낼 수 있다!!!

하위 그룹을 이용한 호스트 설정

[web]
host1
host2

[db]
host3
host4

인벤토리에 호스트들의 그룹이 이렇게 묶어져 있다할 때 web 그룹과 db 그룹을 linux 그룹으로 중복해서 묶고 싶다면 어떻게 해야할까??

[web]
host1
host2

[db]
host3
host4

[linux]
host[1..4]

물론 아까 공부한 범위 지정을 이용해 web과 db에 있는 호스트들을 묶을 수도 있지만, 하위 그룹을 이용해 설정 할 수도 있다.

[linux:children]
web
db

이렇게 지정하면 중첩 그룹으로 설정한 결과와 똑같은 결과가 나타난다.

--list-hosts

인벤토리에 호스트 설정을 마치면 ad-hoc의 ansible --list-hosts ~ 명령어로 인벤토리가 잘 작동하는지 확인하자

ansible --list-hosts -i inventory localhost	# inventory에 localhost라는 호스트가 존재하는지 확인

ansible --list-hosts -i inventory web		# web그룹의 호스트들을 출력

ansible --list-hosts -i inventory all		# 인벤토리에 있는 모든 호스트들 출력

ansible --list-hosts -i inventory ungrouped	# 그룹이 없는 호스트 출력

ansible --list-hosts -i inventory 'web db'	# web 그룹과 db 그룹의 호스트 출력

ansible --list-hosts -i inventory 'web:&db'	# web 그룹과 db 그룹 모두에 포함된 호스트 출력(and)

ansible --list-hosts -i inventory 'linux:!db'	# linux 그룹에 속하고 db 그룹에 속하지 않는 호스트 출력(not)

이렇게 출력되면 된다!!


References

profile
엔지니어 유망주의 곡괭이질

0개의 댓글