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

playbook-play-role구조를 나타낸 자료

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

 



Playbook을 이용한 managed node 관리

  1. manage node를 관리하기 위한 코드들을 체계적으로 관리하기 위해 프로젝트 형식으로 디렉토리 조직화
    • Ansible project : managed node 환경구성을 위해 필요한 파일들의 집합
    • group_vars : 공통변수 저장파일 저장 디렉토리
    • hosts : 인벤토리 파일 저장 디렉토리
    • playbooks : playbook 파일 저장 디렉토리
    • roles : role 파일저장 디렉토리
  2. 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 변수

  1. 변수(variable)란 값을 저장하는 메모리영역, Ansible에서도 변수를 사용할 수 있다.
  2. Ansible은 프로그래밍 언어는 아니지만 일부 프로그래밍 언어의 특징을 갖고있다.
  3. 가장 중요한 특징 중 하나는 변수 대체(variable substitution)이다.
  4. Play 변수 정의는 vars섹션(vars:)에 변수이름과 값을 정의한다. play에서 사용가능한 변수이며 key:value 형식으로 정의한다.
  5. 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로 출력한 것을 확인한다.