Ansible은 Python module 및 ssh를 사용하여 원격 호스트에 명령을 수행할 수 있도록 도와주는 CM(Configuration Management) 도구입니다.
테라폼과 함께 가장 인기 있는 오픈소스 IT자동화 도구로, IT업무를 코드 기반으로 작성하여 환경이 다르더라도 동일하게 적용될 수 있도록 돕는 역할을 합니다. 2015년 10월 레드햇이 인수하여 개발하고 관리하고 있습니다.
Inventory (인벤토리)
인벤토리는 Ansible이 자동화를 대상으로 하는 관리 관리 호스트를 지정해둔 파일입니다.
•
.ini 파일 형식을 기본으로 사용하고 Yaml을 포함한 다양한 파일 형식도 사용할 수 있습니다.
•
인벤토리 파일은 다양한 종류의 형식과 그룹을 지원합니다.
1.
호스트명 IP
가장 일반적인 방식으로 호스트명 또는 IP주소가 한줄에 하나씩 있는 형태입니다.
# 1.IP를 이용한 방식
10.10.1.11
10.10.1.12
10.10.1.13
# 2.호스트명을 이용한 방식
tnode1
tnode2
# inventory 검증 : -i 특정 인벤토리 지정
ansible-inventory -i ./inventory --list | jq
Shell
복사
2.
그룹
그룹을 지어 사용하는 목적에 따라 작업을 처리할 수 있습니다.
:children 이라는 단어를 추가하여 호스트 그룹에 기존에 정의한 호스트 그룹을 포함할 수도 있습니다.
[webservers]
web1.example.com
web2.example.com
[db-servers]
db01.example.com
db02.example.com
[datacenter:children]
webservers
dbservers
Shell
복사
3.
범위를 사용한 호스트 사양 간소화
쿠버네티스 워커노드나 성질이 같은 여러 대의 노드일 경우 [start:end] 범위를 지정하여 인벤토리를 간소화 할 수 있습니다. 숫자 또는 영문자로 범위를 지정할 수 있으며, 대괄호 사이에 시작 구문과 종료 구문을 포함합니다.
[webservers]
web[1:2].example.com
[db-servers]
db[01:02].example.com
# inventory 검증 : -i 특정 인벤토리 지정
ansible-inventory -i ./inventory --list | jq
[WARNING]: Invalid characters were found in group names but not replaced, use
-vvvv to see details
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped",
"webservers",
"db-servers"
]
},
"db-servers": {
"hosts": [
"db01.example.com",
"db02.example.com"
]
},
"webservers": {
"hosts": [
"web1.example.com",
"web2.example.com"
]
}
}
Shell
복사
Ansible 명령어
•
모든 호스트 ping 테스트
ansible all -m ping
Shell
복사
•
특정 그룹 ping 테스트
ansible webservers -m ping
Shell
복사
•
임시 명령 실행
ansible all -m command -a "uptime"
ansible all -m shell -a "df -h"
Shell
복사
•
패키지 설치
ansible all -m yum -a "name=nginx state=present"
Shell
복사

