반응형

Playbook 이란 ?

사용자가 원하는 작업 미리 작성해 놓은 파일
각각의 동작을 커맨드로 수행했어야 하는데 playbook 작성해 놓으면 지정해논 타겟에 해당 내용을 한번에 실행할 있음

# 양식

# Yml 파일 작성
---
# playbook 이름
- name: Add an ansible hosts			 
# playbook 이 수행할 host
  hosts: localhost		 		 		 
  
# 작업  
  tasks:							 
    - name: Add an ansible hosts # task 의 이름
      blockinfile:               # 작업 지시
        path: /etc/ansible/hosts # 작업할 경로
        block: |                     
          [mygroup]
          172.17.0.5

위 내용은 하나의 예시 파일이다.
Tasks 에는 수행하고자 하는 동작을 기술하는데 파일에 특정 블럭을 만들고 내용을 추가하도록 작성되어 있다.
해당 예제 파일을 수행해보자.

 

- 수행 전 hosts 파일

# cat /etc/ansible/hosts
[devops]
172.17.0.3
172.17.0.4

 

- 수행 내용

# ansible-playbook first-playbook.yml

PLAY [Add an ansible hosts] ****************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Add an ansible hosts] ****************************************************
changed: [localhost]

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

ansible-playbook command 를 이용해서 first-playbook.yml 파일을 수행했다.

playbook 의 이름이 출력된 후 task를 수행하는데 Add an ansible hosts 가 수행됨을 보여주고 hosts 파일이 변경되었기 때문에 changed=1 로 표시되고 있다.

 

- 수행 결과

# cat /etc/ansible/hosts
[devops]
172.17.0.3
172.17.0.4
# BEGIN ANSIBLE MANAGED BLOCK
[mygroup]
172.17.0.5
# END ANSIBLE MANAGED BLOCK

ANSIBLE MANAGED BLOCK 으로 표시되며 지정된 동작이 수행되었다.

이처럼 다양한 동작을 playbook 을 사용해서 작성할 수 있다.

 

playbook-sample1.yml

---
- name: Ansible Copy Example Local to Remote
  hosts: devops
  tasks:
   - name: copying file with playbook
     copy:
       src: ~/sample.txt
       dest: /tmp
       owner: root
       mode: 0644

파일을 복사해서 붙여넣는 copy task 예제이다. 

 

# ansible-playbook playbook-sample1.yml

PLAY [Ansible Copy Example Local to Remote] ************************************

TASK [Gathering Facts] *********************************************************
ok: [172.17.0.4]
ok: [172.17.0.3]

TASK [copying file with playbook] **********************************************
changed: [172.17.0.4]
changed: [172.17.0.3]

PLAY RECAP *********************************************************************
172.17.0.3                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.4                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

지정한 hosts 그룹들에서 동작이 수행되며, copying file with playbook TASK가 수행되었다.

현재 경로에 존재하는 sample.txt 파일이 /tmp 경로로 복사되었다.

 

playbook-sample2.yml

---
- name: Download Tomcat9 from tomcat.apache.org
  hosts: devops
  tasks:
   - name: Create a Directory /opt/tomcat9
     file:
       path: /opt/tomcat9
       state: directory
       mode: 0755
   - name: Download Tomcat using get_url
     get_url:
       url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz
       dest: /opt/tomcat9
       mode: 0755
       checksum: sha512:https://downloads.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz.sha512

/opt/tomcat9 디렉토리를 생성하고 해당 디렉토리에 tomcat 파일을 홈페이지에서 다운로드 받는 playbook 예제이다.

 

# ansible-playbook playbook-sample2.yml

PLAY [Download Tomcat9 from tomcat.apache.org] *********************************

TASK [Gathering Facts] *********************************************************
ok: [172.17.0.4]
ok: [172.17.0.3]

TASK [Create a Directory /opt/tomcat9] *****************************************
changed: [172.17.0.3]
changed: [172.17.0.4]

TASK [Download Tomcat using get_url] *******************************************
changed: [172.17.0.3]
changed: [172.17.0.4]

PLAY RECAP *********************************************************************
172.17.0.3                 : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.4                 : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Create a Directory TASK 와 Download Tomcat using get_url TASK 가 정상적으로 수행되었다.

 

이처럼 원하는 동작들을 playbook 으로 작성해놓으면 언제든 ansible 을 통해 수행하여 동작을 코드로써 관리할 수 있게 된다.

반응형

'⇥ DevOps Tech 🙋🏻‍♀️ > ✏️ Ansible' 카테고리의 다른 글

Ansible Role 을 이용한 노드 설치 자동화  (59) 2023.10.20
Ansible Role 작성 방법  (0) 2023.10.18
Ansible Tower (AWX) 설치 방법  (0) 2023.10.17
Ansible 사용 방법  (4) 2022.09.26
Ansible 입문  (1) 2022.09.26