Ansible/02. Ansible 기본

[Ansible] 인벤토리(Inventory) 란?

Jaden Park 2021. 7. 20. 20:56

인벤토리 란?

정적 인벤토리

  • INI 형식
  • YAML 형식

동적 인벤토리

인벤토리 확인

패턴


 

인벤토리 란?

Ansible은 인프라에 존재하는 여러 호스트를 관리합니다.

이런 호스트의 목록 또는 그룹을 지정하는 파일인벤토리 입니다.

인벤토리가 정의되면 패턴을 사용하여 Ansible 을 실행할 노드 또는 그룹을 선택할 수 있습니다.

 

 

기본 인벤토리 파일은 /etc/ansible/hosts 이며, -i 옵션을 사용하여 다른 인벤토리 파일을 지정할 수 있습니다.

또한, 여러 인벤토리 파일을 동시에 지정하거나 클라우드 또는 CMDB에서 동적으로 관리 노드를 가져올 수 있습니다.

 

인벤토리 파일은 일반적으로 INI 파일 형식을 가지고 있으며, YAML 형식으로 지정할 수 있습니다.

 

 


 

정적 인벤토리

 

정적 인벤토리는 사용자가 직접 INI 또는 YAML 형식으로 파일을 작성합니다.

 

 

INI 형식 예

# INI 형식


## 기본그룹

### [all] 이 생략됌
mail.example.com
192.168.56.51

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

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


## 여러 그룹에 속한 호스트

[east]
foo.example.com
one.example.com
two.example.com

[west]
bar.example.com
three.example.com


## 중첩 그룹을 이용한 인벤토리 단순화

[prod:children]
east

[test:children]
west

 

YAML 형식 예

# YAML 형식

all:
  hosts:
    mail.example.com:
    192.168.56.51:
  children:
    webservers:
      hosts:
        foo.example.com:
        bar.exmaple.com:
    deservers:
      hosts:
        one.example.com:
        two.example.com:
        three.example.com:
    west:
      hosts:
        bar.example.com:
        three.example.com:
    prod:
      children:
        east:
    test:
      children:
        west:

 

 

기본 그룹

all 모든 호스트 포함
ungrouped 그룹에 속하지 않는 모든 호스트 포함

 

여러 그룹에 속한 호스트

각 호스트는 하나 이상의 그룹에 속할 수 있습니다.

 

 

중첩 그룹을 이용한 인벤토리 단순화

 

호스트 범위

# INI 형식
[webservers]
www[01:50].example.com

# YAML 형식
...
  webservers:
    hosts:
      www[01:50].example.com:

 

호스트 범위 지정 시 스트라이드(시퀀스 번호 증가)를 지정할 수 있습니다.

파이썬 슬라이싱의 개념과 유사합니다.

# INI 형식
[webservers]
www[01:50:2].example.com

# YAML 형식
...
  webservers:
    hosts:
      www[01:50:2].example.com:

 

알파벳 범위도 지정이 가능합니다

# INI 형식
[databases]
db-[a:f].example.com

# YAML 형식
...
  databases:
    hosts:
      db-[a:f].example.com:

 

동적 인벤토리

가상화, 클라우드 및 컨테이너 환경과 같이 시간이 지남에 따라 관리 노드의 변화가 많은 경우 정적 인벤토리로 호스트를 관리하는 것은 어려운 일입니다. 클라우드 공급자, LDAP 및 CMDB 등 동적 외부 인벤토리 시스템에서 호스트의 목록을 동적으로 가져올 수 있습니다.

 

동적 인벤토리는 2가지 연결 방법을 지원합니다.

  • 인벤토리 플러그인
  • 인벤토리 스크립트

 

동적 인벤토리 플러그인

다음은 AWS EC2 인스턴스의 목록을 가져오는 AWS EC2 동적 인벤토리 플러그인 사용법 입니다.

 

Python용 AWS SDK boto3 패키지 설치

sudo apt install -y python3-boto3

 

인벤토리 구성 파일

# aws ec2 ansible dynamic inventory plugin
plugin: aws_ec2

# set aws_access_key and secret_key.
aws_access_key: <PUT IN YOUR AWS ACCESS KEY>
aws_secret_key: <PUT IN YOUR AWS SECRET KEY>

# set the regions.
regions:
  - <PUT IN YOUR AWS REGIONS>

인벤토리 구성 파일명 끝은 반드시 _aws_ec2.(yml | yaml) 이여야 합니다.

 

 

AWS EC2 동적 인벤토리 플러그인 테스트

ansible-inventory -i test_aws_ec2.yaml --graph

@all:
  |--@aws_ec2:
  |  |--ec2-34-204-0-109.compute-1.amazonaws.com
...

 

 

동적 인벤토리 스크립트

AWS EC2 인스턴스의 목록을 가져오는 AWS EC2 동적 인벤토리 스크립트 사용법 입니다.

 

 

Python용 AWS SDK boto 패키지 설치

sudo apt install -y python3-boto

 

스크립트 다운로드

wget https://raw.githubusercontent.com/ansible/ansible/stable-2.9/contrib/inventory/ec2.py

wget https://raw.githubusercontent.com/ansible/ansible/stable-2.9/contrib/inventory/ec2.ini

 

스크립트 파일에 실행 권한이 부여 (반드시 필요)

chmod +x ec2.py

 

 

AWS 자격증명 환경 변수 설정

export AWS_ACCESS_KEY_ID='AK123'
export AWS_SECRET_ACCESS_KEY='abc123'

 

 

테스트 스크립트

./ec2.py --list

 

 

인벤토리 스크립트 사용

ansible -i ec2.py all --list-hosts

 

참고

가능하면 인벤토리 스크립트보다 인벤토리 플러그인 사용을 권장합니다.

동적 인벤토리 스크립트 소스

Working with dynamic inventory - Ansible Docu

 

 

인벤토리 플러그인 목록 확인

ansible-doc -t inventory -l
ansible-doc -t inventory <plugin name>

 

인벤토리 확인

인벤토리 확인은 ansible 또는 ansible-inventory 명령으로 확인할 수 있습니다.

기본 인벤토리 파일이 아닌 경우 -i 또는 --inventory 옵션을 사용할 수 있습니다.

 

ansible all --list-hosts

ansible webservers --list-hosts

ansible foo.example --list-hosts

ansible-inventory --list

ansbile-inventory --host foo.example.com

ansible-inventory --graph

 

 


 

패턴

 

Ad-hoc 명령 또는 플레이북을 실행할 때 작업을 실행할 관리 노드 또는 그룹을 지정할 때 패턴을 이용해 관리 노드를 선택합니다.

 

패턴은 단일 호스트, IP 주소, 인벤토리 그룹을 참조할 수 있고 집합, 와일드 카드, 정규화 표현식 등 사용이 가능합니다.

 

패턴 사용

Ad-hoc 명령

ansible <pattern> <options>

 

플레이북

- hosts: <pattern>
...

 

일반적인 패턴

설명 패턴
모든 호스트 all 또는 *
단일 호스트 host1
여러 호스트 host1:host2 또는 host1,host2
단일 그룹 webservers
여러 그룹 webservers:dbservers
제외 그룹 webservers:!west
교차 그룹 webservers:&east

 

여러 패턴 혼합

webservers:dbservers:&east:!west

 

와일드카드 패턴

192.0.₩*
₩*.example.com
₩*.com

one*.com:dbservers

 

정규화 표현식 패턴

~(web|db).*₩.example₩.com

'Ansible > 02. Ansible 기본' 카테고리의 다른 글

[Ansible] 구성 파일 ansible.cfg  (1) 2021.07.21