✔️ 정적 인벤토리
인벤토리란 ? ansible로 관리할 host들의 정보를 가지는 파일
기본 인벤토리 파일 : /etc/ansible/hosts
기본 인벤토리 파일은 사용하지 않는다.
인벤토리 파일을 사용할 때 기본 위치에 있는 인벤토리 파일이 아니면 -i 옵션을 사용한다.
✔️ 인벤토리 파일 포맷
포맷 : ini, yaml
Unix에는 (.) 확장자라는 개념이 없다.
Windows에서는 [파일명].확장자 형식이지만 Unix에서는 확장자 개념이 없이 전체가 파일명이다.
그래도 관습적으로 ini를 붙이는 것이며 Unix는 파일명 뒤에 붙는 확장자에 따라 작동 방식을 구별하지 않는다.
ini 형식의 예
key=value
[Section]
key=value
key
mail.example.com
[webservers] # 인벤토리 파일에 관리 노드만 지정할 수 있는 것이 아닌 그룹을 지정할 수도 있다.
foo.example.com # webservers라고 하는 group에 포함되는 것
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
✔️ 인벤토리 그룹
[ ] : 인벤토리 그룹
그룹 내의 모든 호스트에게 작업을 실행하고 싶다면 playbook 명령 실행 시 group을 명명하면 된다.
하나의 노드는 하나의 그룹에만 속해야 한다 ? False !
→ 하나의 노드가 여러개의 그룹에 들어갈 수 있다. 노드와 그룹은 1:1 매칭 관계가 아니다.
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:
Nested Group - 그룹을 포함하는 그룹이며 그룹 간에 부모, 자식 관계를 갖는다.
일반적으로 yaml 파일 형식을 사용하는 것 보다는 ini 형식을 사용하는 것이 가독성이 좋다.
기본 그룹 - 그룹 정의와 상관 없이 정해지는 그룹
- all - default로 속하는 그룹 (인벤토리 파일 전체에 공통적으로 작업을 진행할 때 사용)
- ungrouped - 그룹이 없는 호스트
mail.example.com
[webservers] # 인벤토리 파일에 관리 노드만 지정할 수 있는 것이 아닌 그룹을 지정할 수도 있다.
foo.example.com # webservers라고 하는 group에 포함되는 것
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
mail.example.com은 all이자 ungrouped 이며
webservers와 dbservers의 하위 호스트들은 all 그룹에 속하지만 그룹을 가진다.
따라서 모든 호스트들은 기본적으로 2개의 그룹을 가지게 된다.
주의
인벤토리 생성 방식은
간결하게 !!!!!!
그룹을 생성할 때 그룹에 호스트를 분류할 때 고려해야 할 것
- what - 무엇을 위한 그룹이냐
- where - 어디서 사용되는 그룹이냐
- when - 언제 사용되는 그룹이냐
✔️ 호스트에 범위 추가하기
비슷한 패턴의 호스트가 많을 경우 범위를 사용해 쉽게 Inventory 파일에 나열할 수 있다.
# INI File
[webservers]
www[01:50].example.com
192.168.100.[10:19]
# YAML File
webservers:
hosts:
www[01:50].example.com:
여기에 추가로 증가하는 수를 지정할 수 있다.
www01.example.com 다음 www03.example.com 으로 증가할 것이다.
# INI File
[webservers]
www[01:50:2].example.com
# YAML File
webservers:
hosts:
www[01:50:2].example.com:
알파벳으로도 범위를 지정할 수 있다.
db-[a:f].example.com
✔️ 인벤토리에 변수 추가
인벤토리의 특정 호스트 또는 그룹과 관련된 변수 값을 저장할 수 있다.
인벤토리 변수
[webservers]
www[01:50].example.com A=100 B=200
192.168.100.[10:19]
# INI File
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
# YAML File
atlanta:
hosts:
host1:
http_port: 80
maxRequestsPerChild: 808
host2:
http_port: 303
maxRequestsPerChild: 909
인벤토리 그룹 변수
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
# YAML File
atlanta:
hosts:
host1:
host2:
vars:
ntp_server: ntp.atlanta.example.com
proxy: proxy.atlanta.example.com
인벤토리에 별칭 추가
# INI File
jumper ansible_port=5555 ansible_host=192.0.2.50
# YAML File
hosts:
jumper:
ansible_port: 5555
ansible_host: 192.0.2.50
192.0.2.50의 호스트에 5555번을 사용하는 호스트에 대해서 jumper라는 별칭을 지었다.
중첩 그룹
INI의 경우 :children 접미사, YAML의 children: 항목을 사용하여 그룹의 그룹을 만들 수 있다.
이 그룹의 그룹에 vars: 또는 :vars 를 사용하여 그룹의 그룹에 대한 그룹 변수를 적용할 수 있다.
[atlanta]
host1
host2
[raleigh] # raleigh의 그룹
host2
host3
[southeast:children] # children이 붙으면 그룹명이 들어와야 한다.
atlanta # southeast 밑에 atlanta, raleigh 그룹이 있다.
raleigh
[southeast:vars]
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2
[usa:children]
southeast
northeast
southwest
northwest
# YAML File
all:
children:
usa:
children:
southeast:
children:
atlanta:
hosts:
host1:
host2:
raleigh:
hosts:
host2:
host3:
vars:
some_server: foo.southeast.example.com
halon_system_timeout: 30
self_destruct_countdown: 60
escape_pods: 2
northeast:
northwest:
southwest:
✔️ 인벤토리 파일 확인
생성한 인벤토리 파일 계층 구조 확인
ansible-inventory -i <INVENTORY_FILE> --graph
JSON 형식 및 호스트/그룹 변수
ansible-inventory -i <INVENTORY_FILE> --list
호스트에 설정된 변수 확인
ansible-inventory -i <INVENTORY_FILE> --host <HOST>
호스트 매칭 확인
ansible <HOST_PATTERN> -i <INVENTORY_FILE> --list-hosts
'DevOps > Ansible' 카테고리의 다른 글
[Ansible] Ad-hoc 명령어로만 Wordpress 배포하기 (0) | 2022.04.15 |
---|---|
[Ansible] module, ad-hoc, playbook, yaml 포맷 (0) | 2022.04.15 |
[Ansible] 관리 노드 접속 방법, 권한 상승과 관리 구성 파일 (0) | 2022.04.14 |
[Ansible] Ansible의 기본 개념과 구성 요소 (0) | 2022.04.14 |
Ansible을 이용해 AWS ec2 인스턴스에 Apache 설치하기 (0) | 2022.04.13 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!