인벤토리 란?
정적 인벤토리
- 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 |
---|