Cloud/Ansible
Ansible) Playbook 1편
Adım Kim
2022. 9. 22. 20:45
Playbook 이란?
- 인벤토리에 정의된 managed node에서 무엇을 해야할 것인지 (서버구성정보)를 정의한 내용
- 자동화 절차를 기술한 코드 파일이다.
- YAML 포맷으로 표현
- 설정이나 프로세스에 대한 모델 정의를 표현한 최소한의 문법으로 구성
- Playbook의 목표는 managed node 그룹을 잘 정의된 Ansible내에서 Task로 불리는 역할(role)에 매핑해 주는것
Playbook 파일
- 파일명에 대한 특별한 규칙은 없다.
- 임의의 이름으로 playbook파일을 작성하고 확장자는 .yml 부여
Playbook 실행
ansible-playbook [옵션] <playbook 파일명>
- -i <인벤토리 파일명> - 사용자가 지정한 위치의 인벤토리 파일 사용
- -e <추가변수> - 추가변수지정, key=value 형식
Playbook 구조


- playbook은 play들의 집합으로 playbook-play-tasks 구조를 갖는다.
- playbook의 play는 managed node에 적용할 여러 작업코드의 집합으로,
일괄적으로 수행할 작업단위(task)의 모음이다 - task는 실제 수행할 작업내용이다.
Playbook 코드 구조

- --- : Playbook 문서의 시작부분, 맨위에 작성한다.
- 타깃 부분 : play에 대한 공통정보와 필수정보를 입력하는 부분, 실행장비와 사용자 정보 등을 작성한다.
- 변수 부분 : play 전체에서 사용하는 변수목록 부분으로, 변수 사용시 기술한다
- 태스크 부분 : play의 task목록으로 필수적으로 작성하는 부분, 실제 수행할 모듈을 작성한다.
Playbook 코드 구조별 사용법
[타깃 부분]
- name attribute : play가 어떤 목적을 가지는지 설명하는 내용, playbook 실행시 출력되며 생략이 가능하다.
- host attribute : play가 적용될 managed node에 대한 이름, 인벤토리 파일에 정의된 이름을 사용한다.
- become attribute : play 차원에서 관리자 권한상승 유무를 명시한다.
- become_user attribute : play차원에서 관리자 권한을 갖는 사용자를 명시한다
- gather_facts attribute : managed node에 대한 정보(fact) 수집 유무확인한다.
기본값은 ture로 설정되어있다.
[변수 부분]
- vars attribute : key(변수이름):value(값)로 변수를 정의한다.
- vars_files attribute : 변수를 가지고 있는 외부파일을 기술한다.
[테스크 부분]
- name attribute : managed node에서 수행할 모듈을 명시한다. 그 아래로 모듈, 파라미터 등을 설정한다.
Role

- role은 불필요하거나 중복되는 소스를 제거하고 자주 사용하는 기능을 재사용하기 위해 사용하는 task 코드 집합
- 프로그래밍 언어에서 함수(function)을 모아 놓은 파일인 라이브러리라고 생각할 수 있다.
- YAML 형식으로 작성된다.
Playbook을 이용한 managed node 관리

- manage node를 관리하기 위한 코드들을 체계적으로 관리하기 위해 프로젝트 형식으로 디렉토리 조직화
- Ansible project : managed node 환경구성을 위해 필요한 파일들의 집합
- group_vars : 공통변수 저장파일 저장 디렉토리
- hosts : 인벤토리 파일 저장 디렉토리
- playbooks : playbook 파일 저장 디렉토리
- roles : role 파일저장 디렉토리
- playbook 구성을 효과적으로 관리하기 위한 방법 예시 : https://github.com/ansible/ansible-examples
GitHub - ansible/ansible-examples: A few starter examples of ansible playbooks, to show features and how they work together. Se
A few starter examples of ansible playbooks, to show features and how they work together. See http://galaxy.ansible.com for example roles from the Ansible community for deploying many popular appl...
github.com
Play 변수

- 변수(variable)란 값을 저장하는 메모리영역, Ansible에서도 변수를 사용할 수 있다.
- Ansible은 프로그래밍 언어는 아니지만 일부 프로그래밍 언어의 특징을 갖고있다.
- 가장 중요한 특징 중 하나는 변수 대체(variable substitution)이다.
- Play 변수 정의는 vars섹션(vars:)에 변수이름과 값을 정의한다. play에서 사용가능한 변수이며 key:value 형식으로 정의한다.
- vars_files섹션(vars_files:)을 이용하면 변수로 구성된 파일을 지정할 수 있다. 중요정보가 포함된 변수는 vars_files섹션을 사용해서 분리관리 하는것이 좋다.
변수 내용 출력 방법

- debug 모듈을 사용하면 변수내용을 출력할 수 있다.
- debug 모듈의 msg 파라미터로 변수 내용을 출력하며, "{{변수명}}" 형식으로 작성한다.
Task 결과 변수 저장 방법

- 모듈을 호출할 때 register 파라미터를 사용하면, 결과값의 변수를 지정할 수 있다.
- 모듈과 register는 같은 열에 위치한다
Facts
- manage node에 대한 정보
- Ansible Playbook을 실행할때 첫번째로 수행하는 Task가 managed node의 정보를 갖는 fact를 수집하는 Task이다.
- Ansible fact를 수집할때, managed node에 대한 모든 종류의 세부정보를 쿼리(Query)라 하며, 이 정보는 ansible_facts 변수에 저장된다.
- gather_facts attribute를 사용하면 팩트수집 유무를 결정할 수 있다. (설정하지 않으면 기본값인 true값이 적용)
Facts 정보 확인 / ansible_fact 변수 접근방법
[Facts 정보 확인]

# 전체 팩트정보 확인
ansible [host패턴] -m setup -i [hosts파일 경로]
#특정 key 팩트정보 확인
ansible [host패턴] -m setup -a "filter=[하위 facts key]" -i [hosts파일 경로]
[ansible_fact 변수 접근방법]


- ansible_fact 변수의 특정 key에 접근하려면 "{{ansible_fact['key이름']}}"을 입력한다.
- 해당 Playbook을 실행시켰을때, gather_facts에서 가져온 managed node의 정보에서 user_id를 msg로 출력한 것을 확인한다.