Search

Ansible

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
복사