앤서블(Ansible) 인벤토리

Donghyun Kim·2023년 3월 8일
0
post-thumbnail

인벤토리

앤서블 컨트롤러 노드 서버가 명령을 전달할 원격 서버들의 목록을 작성해놓는 곳으로 앤서블을 이용하여 작업을 진행할 서버의 정보와 작업 내용, 작업에 사용할 변수 정보 등을 저장해두는 곳을 인벤토리라고 한다.

  • Ansible에서 관리할 호스트 목록을 정의
  • 단일 호스트 및 그룹 단위로 관리(중첩 그룹 지원)
  • 정적/동적 인벤토리 지원
  • /etc/ansible/hosts가 기본 인벤토리지만 직접 사용하지 않음
  • 인벤토리의 위치는 설정 파일이 지정
  • 설정 파일에 지정한 위치가 아닌 다른 인벤토리의 위치를 지정하고 싶으면 -i 옵션 사용
  • 매니지드 노드의 목록을 가지고 있는 인벤토리가 없으면 앤서블로 작업이 불가능하다. 따라서, 앤서블을 사용하려면 반드시 인벤토리가 존재 해야한다.

정적 인벤토리

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

인벤토리 작성법

INI 파일 형식

mail.example.com

[webservers]
foo.example.com 
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com

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

YAML 파일 형식

all:
  hosts:
    mail.example.com:
  children:
    webservers:
      hosts:
        foo.example.com:
        bar.example.com:
    dbservers:
      hosts:
        one.example.com:
        two.example.com:
        three.example.com:

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

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

사용 방법

파라미터 전달

-i 옵션으로 인벤토리 파일을 지정할 수 있다.

ansible-playbook -i inventory.yaml

cfg 파일 설정

cfg 파일에 inventory 옵션에 파일 경로를 지정하면 됩니다. 인벤토리 파일은 콤마를 이용하여 여러 개를 지정할 수 도있다

[default]
inventory = inventory.yaml,common.yaml

인벤토리 설정 확인

인벤토리에 호스트 설정을 마치면 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)

출력 결과

참고자료

profile
"Hello World"

0개의 댓글