[ansible] playbook 개념/작성/예시

반응형

 

ansible.cfg 설정값

[defaults]
inventory = ./inventory

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = true

 

playbook 작성

예시1

---
- name: check user
  hosts: webserver1
  tasks:
    - name: ansible exists with UID 1005
      user:
        name: ansible
        uid: 1005
        state: present

...

1. 문서 시작 마커인 3개의 대시(---)로 구성된 줄로 시작하며, 문서 종료 마커인 3개의 점(...)으로 끝난다. (종료 마커는 생략 가능)

2. 플레이의 첫 번째 키는 name 속성이며, 임의의 문자열과 플레이를 레이블로 연결하는 역할. 즉, 플레이의 용도를 나타냄. 생략이 가능하지만 플레이북을 설명하는데 도움이 되므로 사용하는 것이 좋으며, 플레이북에 여러 개의 플레이(tasks)가 포함된 경우 구분하는데 유용

3. 플레이의 두 번째 키는 hosts 속성이며, 플레이의 작업을 실행할 대상 호스트를 지정한다. hosts 특성은 인벤토리에 있는 호스트 또는 그룹의 이름과 같은 패턴을 값으로 사용

4. 플레이 마지막인 세 번째 키는 tasks 속성이며, 이 플레이를 위해 실행할 작업 목록을 지정한다. 이 예제에는 특정 인수를 사용하여 user 모듈을 실행하는 단일 작업이 있음(ansible이 존재하고 UID가 1005인지 확인)

이 플레이북의 유일한 작업(task)에는 2개의 키가 있다.
4-1. name은 작업의 목적을 설명하는 옵션 레이블이다. 자동화 프로세스 각 단계의 목적을 쉽게 알아볼 수 있도록 모든 작업에는 이름을 지정하는 것이 좋다.

4-2. user는 이 작업에 대해 실행할 모듈이다. 이 모듈의 인수는 해당 모듈의 하위인 키-값의 쌍 컬렉션 형태로 전달된다. (name, uid, state)


예시2

ansible은 탑다운 순서로 실행되기 때문에 작업이 여러 개가 있는 플레이북에서 플레이와 작업이 나열되는 순서가 중요

tasks:
  - name: web server is enabled
    service:
      name: httpd
      enabled: true

  - name: NTP server is enabled
    service:
      name: chronyd
      enabled: true

  - name: Postfix is enabled
    service:
      name: postfix
      enabled: true

 

playbook 실행 전 구문 확인 방법

[ansible@ansible playbook]$ ansible-playbook --syntax-check webserver_install.yml 

playbook: webserver_install.yml

--syntax-check 옵션으로 playbook 파일의 구문 오류를 검사할 수 있다. 
정상이라면 위와 같이 playbook: (playbook 파일명)이 출력되며
이상이 있다면 해당 line 및 column 그리고 오류 내용을 출력해 준다.


playbook 실행

아래와 같은 플레이북을 실행해 보자

[ansible@ansible playbook]$ cat webserver_install.yml 
---
- name: play to setup web server
  hosts: web
  tasks:
    - name: latest httpd version installed
      yum:
        name: httpd
        state: lastest

...

 

[ansible@ansible playbook]$ ansible-playbook webserver_install.yml 
BECOME password: 

PLAY [play to setup web server] **********************************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
ok: [webserver1]
ok: [webserver2]

TASK [latest httpd version installed] ****************************************************************************************************************************************************************************
changed: [webserver1]
changed: [webserver2]

PLAY RECAP *******************************************************************************************************************************************************************************************************
webserver1                 : ok=2     changed=1   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
webserver2                 : ok=2     changed=1   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

여기서 확인할 사항은 latest httpd version installed 작업이 changed인지 ok인지를 봐야 한다. 
changed라면 현재 httpd가 web 그룹 내 관리 호스트 서버에 설치되지 않았거나 또는 최신 버전이 아니었기 때문에 변화가 일어났다, 즉 작업이 수행되었다는 뜻
ok라면 최신 버전의 httpd가 이미 설치되어 있어 변화가 일어나지 않았다는 뜻

 

 

 

그렇다면 현재 결과값이 changed이기에 최신 버전의 httpd 설치 작업이 수행되었다.
만약 다시 한번 작업을 돌리면 이미 최신 버전의 httpd가 설치되어 있기에 변화가 안 일어날 테니 ok로 나올 것인가?

 

해보자!

[ansible@ansible playbook]$ ansible-playbook webserver_install.yml 
BECOME password: 

PLAY [play to setup web server] **********************************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
ok: [webserver1]
ok: [webserver2]

TASK [latest httpd version installed] ****************************************************************************************************************************************************************************
ok: [webserver2]
ok: [webserver1]

PLAY RECAP *******************************************************************************************************************************************************************************************************
webserver1                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
webserver2                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

예상한 대로 모든 작업이 ok 상태이며, 변경 사항이 없다. (테스트 끝!)

반응형

댓글

Designed by JB FACTORY