앤서블의 진정한 능력은 스크립팅 능력에 있다.
앤서블에서 스크립트를 플레이북 이라고 부르는데, YAML 파일에서 표현된다.
(앤서블은 표준 YAML파서를 사용한다)
플레이북(playbook) = 플레이(play) 들의 모음
모든 플레이 = 호스트(Host) + 테스크(Task)
(누구(Host)에게 무슨 작업(Task)을 할것인가!)
플레이북은 크게 3개의 부분으로 나뉜다.
- 타깃 부분 : 실행 장비, 어떤사용자 등
- 변수 부분 : 사용 가능한 변수 정의
- 태스크 부분 : 실행하고 싶은 액션
[타깃 부분]
줄의 처음은 대시( - ) 로 시작해야 한다.
플레이가 실행될 장비는 hosts의 값으로 설정
앤시블 플레이북에 장비에 연결할 사용자가 누구인지 알린다.
[변수 부분]
전체 플레이에 적용할 변수를 정의 하는 부분.
이후 유지보수를 쉽게 할 수 있도록 변수를 설정할 수 있다.
인벤토리에서 설정한 팩트가 override 될 수 있다.
vars_files 지시자를 사용해서 외부 YAML 파일에서도 읽어들일 수 있다.
Ex) vars_files:
/conf/data-SYD.yml
/conf/cluster-sql.yml
대화형으로 사용자에게 변수의 값을 입력받을 수도 있다.
Ex) vars_prompt:
- name: 'https_passphrase'
prompt: 'Key Passphrase'
private: yes
Http_passpharse는 입력된 데이터가 저장될 곳.
사용자는 key passphrase로 입력할 것.
Private: yes로 사용자가 입력할 때 암호값을 스크린으로 출력하지 않는다.
내장변수
플레이북에서 항상 사용 가능한 일부 변수를 정의한다.
매개변수 | 설명 |
Hostvars | 키 : 호스트이름 / 값 : 변수이름 |
Inventory_hostname | 현재 호스트의 전체 도메인 이름(ex. Myhost.example.com) |
Inventory_hostname_short | 도메인이 없는 호스트 이름(ex. Myhost) |
Group_name | 현재 호스트가 구성원으로 있는 모든 그룹 리스트 |
Group | 그룹의 구성원인 호스트 리스트 {"all" : […], "web" : […], "group1" : […]} |
Ansible_check_mode | 체크모드에서 실행중일때 true |
Ansible_play_batch | 일괄 배치중인 인벤토리 호스트 이름 리스트 |
Ansible_play_host | 현재 플레이에서 동작중인 모든 인벤토리 호스트 이름 리스트 |
Ansible_version | 앤서블 버전 정보 |
[태스크 부분]
원하는 순서대로 수행할 액션 목록을 포함하는 부분이다.
Name : 어떤 플레이 인지 설명(제목 or 설명 으로 보면 된다.)
Become : true 인경우, 루트(root) 사용자가 되어 작업을 실행한다.
* 모듈
앤서블에 의해 패키징된 액션
(앤서블에는 2000개 이상의 모듈이 포함되어 있다. )
Apt / shell / register / msg / copy / file / service / template …
플레이북 실행하기
$ansible-playbook example.yaml
플레이북 실행 결과.
Task : [example] ***********************************
Change : [testserver]
Ok : [testserver]
Change는 호스트 값의 상태와 매개변수의 차이가 있으니, 변경 적용하는 액션을 했다!
OK는 호스트 값과 매개변수의 상태가 동일하다. 따라서 아무 액션도 하지 않는다!
[플레이북 예시]
(ex. OS 버전 확인)
(Ex. Become이 정말 root 로 실행되는가? 확인. )
결과 확인
'IT Knowledge > IaC' 카테고리의 다른 글
Ansible Playbook Handler 사용법 유의사항 (1) | 2021.07.26 |
---|---|
Ansible Playbook YAML 작성방법 (0) | 2021.07.26 |
Ansible 설정 파일(Hosts, ansible.cfg) (0) | 2021.07.22 |
Ansible-Vault 사용하기 (0) | 2021.04.27 |
Ansible 사용법(모듈) (0) | 2021.04.25 |
댓글