본문 바로가기

DevOps/Ansible

[Ansible] Ansible 실습 - Playbook

https://holywat2r.tistory.com/162

 

[Linux] Ansible 실습 - AD-HOC와 모듈 사용법

https://docs.ansible.com/ansible/2.9/user_guide/intro_adhoc.html Introduction to ad-hoc commands — Ansible Documentation An Ansible ad-hoc command uses the /usr/bin/ansible command-line tool to aut..

holywat2r.tistory.com

# 앞선 실습으로 모듈사용법까지 알아보았다

# 이번 게시물에서는 playbook에 대해서 알아보자


PLAYBOOK 개념

  • 명령어를 하나씩 입력하며 대상별로 작업을 실행할 수 있다. 그런데 한계가 있기에 복잡한 작업(여러작업)을 반복하는데 있어서 어렵다. 할 수는 있지만 불편하고 어렵다.
  • 이러한 단점을 완화할 수 있게 일반적으로 플레이북이라는 작업내용을 파일 형태로 만들어서 저장하여 사용하는 방식을 사용한다.
  • 필요할 때 값만 수정하면 되기에 재사용성에 유리하고 여러개의 작업을 나열할 수 있으니 한번에 복잡한 작업을 수행하기 좋은 방식. 실행할 때에는 작업제어 부분에서 동기식, 비동기식 방식으로 실행을 할 수 있다.
  • YAML 언어를 사용하고 플레이라는 단위를 사용한다
  • 문서의 시작과 끝을 악속 ---(시작) ... (끝) . 사용하지 않아도 무방하다
  • 리스트 형식으로 플레이북을 작성할텐데 리스트마다 대시와 공백으로 한다 (- name)
  • 즉, 대시기호와 공백이 함께 나오면 하나의 작업(플레이)라고 생각하면 된다.

YAML 언어를 사용하기 위한 세팅

  • 홈 디렉토리에서 .vimrc 수정
ls -a ~

  • 자동 세팅을 위한 설정이다.
vim ~/.vimrc

syntax on
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab autoindent

# yaml 형식의 파일을 사용할 때만 값을 자동으로 세팅하겠다 (확장자)

# ts 들여쓰기를 스페이스바 2번으로 수정

# sts 줄바꿈을 했을대도 스페이스바 2번인것처럼 바꿔주면서 줄을 맞춰준다

# sw는 삭제시 2개씩 삭제

  • 이후 연습을 해보자
vim test.yml

# yml 파일 = yaml파일 . 잘 적용이 되었다.


플레이북 테스트

  • 테스트 디렉토리를 생성하고 내용을 추가해보자
mkdir playbook_test
cd playbook_test
vim playbook.yaml

---
- name: test playbook 1st
  hosts: all
  tests:
    - name:
      command:
      copy:
      	src
      	dest
  
...

# hosts 나 tasks 는 하나일수도 있지만 여러개일 수 있기 때문에 s가 붙는다.

# name은 어떤일이 있어도 하나이기 때문에 name이다

# name : 작업에 대한 명칭이기에 아무거나 써도 무방

# hosts : 인벤토리 파일에서 어떤 대상을 지정할 것인가? <패턴>

# tasks : 모듈을 작성할 것. 바로 뒤에 쓰지 않고 줄을 바꿔 모듈을 여러개 나열할 것이다. 여러개의 모듈이 나올거기때문에 들여쓰기 후 대시 기호를 사용

# command 와 copy는 모듈이다.


플레이북 실습 1 Copy

  • Copy 모듈을 사용하여 컨트롤러의 /etc/hosts 파일을 host2번으로 옮겨보자.

host2번의 /etc/hosts 파일이다.

---
- name: test playbook 1st
  hosts: host2
  tasks:
    - name:
      copy:
      	src: /etc/hosts
      	dest: /etc/hosts
  
...

 

# Controller 노드의 /etc/hosts 파일이 host2번의 /etc/hosts로 옮겨짐으 볼 수 있다.

 


플레이북 실습 2 lineinfile

  • 파일에 한줄을 추가하는 lineinfile을 실행해보자
  • host3로 접속하여 /etc/hosts 파일을 확인해보자

 

host3의 /etc/hosts 파일이다

---
- name: line in file test
  hosts: host3
  task:
    - name: lineinfile modules
      lineinfile:
        path: /etc/hosts
        line: 10.0.2.10 controller
...

# host의 /etc/hosts 파일에 한줄 추가됨을 볼 수 있다.

# 나머지도 기입해보자

---
- name: line in file test
  hosts: host1
  task:
    - name: lineinfile modules
      lineinfile:
        path: /etc/hosts
        line: 10.0.2.21 host1
        
    - name: lineinfile modules
      lineinfile:
        path: /etc/hosts
        line: 10.0.2.21 host1

    - name: lineinfile modules
      lineinfile:
        path: /etc/hosts
        line: 10.0.2.22 host2

    - name: lineinfile modules
      lineinfile:
        path: /etc/hosts
        line: 10.0.2.23 host3

    - name: lineinfile modules
      lineinfile:
        path: /etc/hosts
        line: 10.0.2.24 host4
    
...

# module에서 ok 1개 change 4개다. controller 정보는 앞서 기입했으므로 ok가 뜬것이도. 나머지는 새롭게 기입이 되었기 때문에 changed가 뜬다.

# 이처럼 Lineinfile 모듈은 파일에 한 줄씩 추가를 할 수 있다.


플레이북 실습 3 blockinfile

  • block단위로 라인을 추가하는 blockinfile 모듈을 실습해보자
  • ssh host4를 통해 /etc/hosts 파일을 확인해보자

  • 컨트롤러 노드에서 아래와같이 플레이북을 작성
---
- name: block test
  hosts: host1
  tasks:
    - name: blockinfile modules
      blockinfile:
        path: /etc/hosts
        block: |
          10.0.2.10 controller
          10.0.2.21 host1
          10.0.2.22 host2
          10.0.2.23 host3
          10.0.2.24 host4