같은 범위의 비교대상은 Puppet, Chef, Saltstack이 대표적이다.
Ansible은 IaC (Infrastructure as Code)를 지향하는 자동화 관리 도구로 오픈 소스 기반으로 제작되었다.
Ansible을 구동하는 모듈 및 라이브러리는 Python을 기반으로 하며, YAML 포맷을 기반으로 플레이북을 실행시켜서 원하는 자동화를 구현하거나, Ad hoc 모드로 모듈을 실행시켜 상태를 조회해 볼 수 있다.
또한 기존 Chef/Puppet 처럼 기존에 알려진 IaC 솔루션들이 Target Host들에 Agent를 반드시 설치해야 하는 것과 비교해서, Ansible은 SSH를 기반으로 Target Host에 Agentless방식으로 자동화를 구성 관리한다.
이러한 동작방식은 기존의 Pull방식에서 , Agentless 기반의 Push 방식으로 동작하기 때문에 설치와 구성관리가 편리한 장점을 가지고 있다.
2개의 주요 컴포넌트는 Ansible Controller와 Ansbile Target이다.
컨트롤러는 Target에 대해 어떤 구성을 내려 보낼지에 대한 Task들을 정의한다.
YAML, ini 파일형식 모두 지원한다.
각 그룹에 대한 환경변수를 별도로 지정하려면 디렉토리 내부에 환경변수와 인벤토리 파일을 분리해서 지정해 주면 좀 더 체계화된 관리가 가능하다.
Ansible은 Python Code를 호출해서 실행하는 방식이다. 따라서 많은 모듈이 설치되어 있는 것을 확인 할 수 있다.
이러한 이유로 Ansible은 제공되는 모듈에 따라 Python version 에 따라 일부 종속성이 생기며, 기본 Python이 설치되어 있어야 한다.
Ansible Target에 구성정보를 내리거나, 정보를 가져올 때 사용할 수 있는 2가지 방법이 있다.
하나는 Playbook기반으로 Task를 정의하는 것이고, 다른 하나는 Adhoc 기반으로 단일 Task를 모듈과 함께 사용하는 방법이 있다.
여러 Task를 수행하거나, 서로 다른 역할을 기반으로 Config를 Target에 전달할 때는 , Playbook을 통해 별도 플레이북을 만들어서 사용하면 유용하다
Adhoc은 단일 모듈과 Task를 수행하는 일로 단순 작업이나 정보를 Gathering 할 때 사용하는 것이 유용하다.
Playbook은 YAML로 구성되어야 한다.
# Restart_Firewalld_Service.yml Playbook을 실행합니다.
Ansible-playbook --check --inventory=hosts Restart_Firewalld_Service.yml
#설명
--check : test로 수행합니다. 실제 작업이 수행되지 않습니다
--inventory=hosts : 작업 대상 서버의 목록이 들어 있는 파일의 위치입니다
Restart_Firewalld_Service.yml : 해당 playbook 파일을 실행합니다
!! 실행 user가 대상 서버들에 접속할 수 있도록 SSH pub key가 배포되어 있어야 하고, 실행하는 서버에 private key를 가지고 있어야 합니다. 옵션으로 SSH Key위치를 지정하거나 패스워드를 입력받을 수 있습니다.
!! 권한 변경을 위한 become이나 실행할 Inventory group 정보는 Playbook 내부에 정의되므로 별도로 옵션을 줄 필요는 없습니다