ENCORE CLOUD ARCHITECTURE TIL 4/6 Ansible Playbook

신민창·2021년 4월 6일
0

TIL

목록 보기
36/46

Playbook

Ansible로 실행할 내용을 작성하는 문서=Code
ad-hoc 명령과 달리 여러 가지 수행할 내용을 하나의 플레이북에 저장

구조
플레이북 파일
플레이(1개 이상)
작업
모듈(1개 이상)

YAML 문법을 사용하여 작성하여야 함

확장자를 .yaml 또는 .yml
--- : 문서의 시작을 의미하는 마커
… : 문서의 마지막을 의미하는 마커
들여쓰기로 구조를 작성 : Ansible에서는 일반적으로 공백 2칸으로 한 단계를 지정
vi 편집기에서 편리하게 yaml 작성을 하기 위한 설정
~/.vimrc
syntax on
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 et ai nu

et: expand tab. 탭 입력시 공백으로 변환
ai : auto indent. 자동 들여쓰기
nu : 줄 수 표시
목록 사용 가능(리스트)
목록의 아이템의 하나의 대시, 공백 뒤에 아이템 목록을 표시
- 목록의 아이템1
- 목록의 아이템2
- 목록의 아이템3
- …
각 항목의 값을 입력할 경우 ‘:’ 뒤에 입력
반드시 항목의 이름 뒤에 붙여서 : 작성
: 뒤에 공백 한 칸 추가

기본적으로 플레이북에 포함되는 항목

play의 이름(설명): name 항목으로 플레이의 이름을 표시 
hosts: 플레이를 적용할 대상
tasks: 이 플레이를 통해 실행할 작업의 목록
내부에는 작업의 목록이 표시
name으로 작업에 대한 설명 추가

예시

  ---
  - name: My first play
    hosts: managed1.example.local
    tasks:
      - name: user testuser must exist
        user:
          name: testuser
          state: present
      - name: ping test
        ping:
  ...

플레이북 실행

$ ansible-playbook <플레이북 파일이름> [옵션]

ansible 명령과 동일한 옵션 사용가능 : --become 등

플레이북 실행 시 구체적인 실행내용 확인

-v : v의 개수를 1~4개 사용하여 구체적인 정도를 지정
Gathering Facts : 플레이북 실행 시 자동으로 처음에 실행되는 대상 시스템 정보 수집단계
Play Recap : 실행 통계. ok(정상), changed(변경), failed(실패)
--syntax-check : 플레이북 파일 내 구조적인 오류 탐지. 내용상의 결함은 찾지 못함
-C, --check : 예행연습. 실제 대상에 변경을 가하지 않으면서 동작 여부 확인

다중 플레이

하나의 플레이북 내에 두 개 이상의 플레이를 지정
각 플레이는 동일한 들여쓰기 단계를 준수하여 작성
각 플레이의 구조는 동일하며, 플레이마다 각각 대상을 지정할 수 있음 (hosts)

---
- name: My first play
  hosts: managed1.example.local
  tasks:
    - name: user testuser must exist
      user:
        name: testuser
        state: present

- name: My second play
  hosts: managed2.example.local
  tasks:
    - name: user testuser2 must exist
      user:
        name: testuser2
        state: present
...

플레이북 내에서 플레이 별 설정

플레이 별로 개별적인 옵션을 지정 가능 (become, become_method, become_user, remote_user…)

---
- name: My first play
  hosts: managed1.example.local
  become: true
  tasks:
    - name: user testuser must exist
      user:
        name: testuser
        state: present

- name: My second play
  hosts: managed2.example.local
  become: false
  tasks:
    - name: ping test
      ping:
...
---
- name: My first play
  hosts: managed1.example.local
  tasks:
    - name: user testuser must exist
      user:
        name: testuser
        state: present
      become: true
    - name: user testuser must exist
      user:
        name: testuser2
        state: present

- name: My second play
  hosts: managed2.example.local
  become: false
  tasks:
    - name: ping test
      ping:
...

0개의 댓글