매니지드 노드의 목록을 가지고 있는 인벤토리가 없으면 앤서블로 작업이 불가능하다. 따라서, 반드시 인벤토리가 존재 해야한다.
[ ] 를 이용해 용도별로 그룹을 지정할 수 있으며, 특정 서버는 여러 그룹에 속할 수 있고, 모든 서버는 all 그룹에 속해있다.
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
이렇게 지정하면 중첩 그룹으로 설정한 결과와 똑같은 결과가 나타난다.
인벤토리에 호스트 설정을 마치면 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)
이렇게 출력되면 된다!!