Search
moon
sun

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