Products
Ansible 이란 ?
- Provision & configuration management tool
- Python Github project 중 상위 랭킹 (6위)
- Enterprise 버전은 따로 존재하며 ansible 오픈 소스에 UI 와 일부 utility 추가한 상용 버전
- 오픈 소스 버전 (GPL)
- 해커 뉴스 분석을 보면 ansible이 많이 Mention 되어지고 있음
Ansible을 선택 하는 이유
- SSH 통신, 빠른 provision 이 가능합니다.
- 추후 상용 환경에서 사용할 때 agent 기반이면 방화벽 이슈, agent 데몬 관리라는 불편한 점이 존재합니다. (agent 방식의 장점도 물론 존재합니다. 확장성, 대규모 provision을 할 경우 매우 효과적입니다. 대신 서버와 통신하는 부분이 고도화되기 때문에 빠르고 간단한 provision을 할 수 없습니다.
- 자동 배포 환경이 쉽습니다.
- 개발 가능성이 높은 오픈소스 입니다.
- 멱등성을 제공합니다.
- 멱등성(idempotent)이란 ?
- 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 멱등성 이라고 합니다.
- Ansible 툴에서의 멱등성이란 ?
- 여러 번 ansible 툴을 사용하더라도 동일한 결과값을 나올 수 있도록 제공되는 형태여야 합니다.
매번 다른 결과가 나오거나 에러가 나온다면 비 멱등성하다고 할수 있습니다.
Ansible 툴의 거의 대부분의 모듈은 멱등성을 제공합니다. 또한 멱등성을 제공하기 위해서 조건절을 제공하고 있습니다.
예를 들면, 처음 ansible 스크립트를 실행후 다시 실행을 하면 상황에 따라서는 파일이 append가 될 수 있습니다.
그러나 멱등성의 원칙은 언제나 실행은 해도 결과가 동일하게 나옵니다. 또한 파일/디렉터리를 생성 또는 삭제하는 ‘create’ , ‘remove:’
같은 ansible 모듈을 실행 할 때 ‘when;’ 조건절을 이용할수 있습니다. 대부분의 ansible 모듈이 멱등성을 보장한다는 의미는 상태를 파악할 수 있다는 의미를 가지게 됩니다.
Ansible의 기본개념
Ansible의 환경설정, 배포를 가능케 하는 언어입니다.
리모트 서버에 접속해서 무언가를 시행시키는 정책을 기술합니다.
Yaml 문법으로 정책이 기술되어 있으며 좀 더 고급 단계에서는 로드밸런서를 모니터링하는 복잡한 환경에서 사용할 수 있도록 합니다. 각 playbook은 하나 또는 하나 이상의 ‘play’를 두게 됩니다. Play의 목적은 여러 호스트들에 잘 정의된 ‘role’과 ‘task’를 매핑하는 역할을 합니다.
Task는 ansible 모듈의 호출을 의미합니다. Role을 좀 더 편하게 관리하기 위해서 미리 정의된 yaml 파일을 include을 하는 것이 가능 합니다.
또한 host inventory 파일에 정의한 서버 그룹별로 각각 나누어 provision 할 수 있도록 할 수 있습니다. 서버당 디렉터리를 나누어서 각각의 설정 정보가 정의된 파일을 읽어 설치하게 합니다.

참조 :http://docs.ansible.com/ansible/playbooks.html
Inverntory
리모트 서버에 대한 meta 데이터를 기술하는 파일입니다.
Ansible에서는 inventory 파일에는 yaml을 적용하지 않았습니다. 기본 파일은 /etc/ansible/hosts를 읽게 하거나,
따로 inventory 파일을 만들고 옵션을 주어 동작하게 할수 있습니다.
만약 고정 ip를 가지고 있고 gosts 파일 안에 들어가 있지 않는 서버가 있다면 설정 파일을 만들수 있고 테스트 환경을 만들때
유용합니다.