Ansible Command의 가장 큰 특징은 멱등성을 가진다는 점이다.
멱등성이란 같은 설정(명령)을 여러 번 적용하더라도 결과가 달라지지 않는 성질이다.
예를 들어보자.
메모장에 글을 입력하고 복사 붙여 넣기를 수행해보자. 이 경우에는 복사한 글이 계속해서 뒤에 기록될 것이다.
즉 같은 명령을 여러 번 적용했을 때 결과도 달라지므로 멱등성을 가지지 않는다.
우리가 선풍기를 끄고 싶다고 생각해보자. 이때 "중지" 버튼을 한 번 누르든 계속해서 연타하든 똑같이 "선풍기가 꺼진다"라는 결과물이 얻어진다. 이 경우 같은 명령(중지 버튼을 누름)을 여러 번 반복해도 결과는 같으므로(선풍기가 꺼짐) 멱등성을 가지는 행위라고 볼 수 있겠다.
이전에 설명했듯 Ansible은 CM Tool로써 변동이 많고 빌드 작업이 자주 일어나는 개발 환경에서 많이 활용되는 Tool이다.
이 때문에 빌드 과정마다 개발자가 의도하지 않은 중복 작업이 일어나지 않게 하기 위해서 멱등성을 가지도록 설계되었다.
ansible [group name] -m [사용할 Module name] -i [Remote Host IP Address를 기록한 파일]
Ansible에서 Module은 Ansible에서 사용하는 "명령어" 라고도 이해할 수 있다.
Ansible은 다양한 Command를 제어하기 위한 작은 프로그램인 Module을 활용하여 내가 원하는 작업을 Ansible 측에서 수행할 수 있도록 지원한다.
이전에 말했듯 ansible Command Option 중 "-m [Module Name]"을 통해 내가 원하는 모듈을 활용할 수 있다.
즉, Anisble은 Module을 통해 멱등성이 보장되는 다양한 기능을 제공한다.
이전에 Ansible은 자체 DSL Script가 아닌 YAML 파일을 통해 서버 설정 값을 적용한다고 언급했다.
그리고 Ansible에서 서버 설정 값을 기록한 YAML 파일을 "Ansible Playbook"이라고 한다.
Ansible Playbook은 사용자(or 개발자)가 원하는 명령 및 동작들을 미리 YAML 파일을 통해 작성해 놓은 것이다.
Ansible Playbook에는 여러 개의 명령들을 동시에 입력할 수 있기 때문에 1개의 Ansible Playbook에 여러 개의 명령어(혹은 동작)를 기입해 한 번에 여러 개의 작업을 처리할 수도 있다.