본문 바로가기
IT 잡지식/DevOps

[Ansible] Ansible Playbook

by 쯀리♥️ 2023. 9. 21.

 

안녕하세요, 쯀리입니다.

오늘은 Ansible Playbook이라는 것을 알아보고 Ansible의 가장 큰 특징인 멱등성을 알아보겠습니다. 

 


 

Playbook이란

https://www.redhat.com/ko/topics/automation/what-is-an-ansible-playbook

 

Ansible Playbook(앤서블 플레이북)이란? 개념, 예시, 사용방법

앤서블 플레이북이란 호스트에서 실행되는 자동화 태스크의 IT 작업을 뜻하는 프레임워크이며, Ansible 인벤토리를 구성하는 호스트 세트, 그룹 또는 분류에서 실행됩니다.

www.redhat.com

 

Playbook 이란: 자동화 작업의 청사진이며, 이 자동화 작업은 사람의 개입 없이 실행되는 복잡한 IT 작업

 

언제 사용을 할까요? 

설치, 파일전송, 서비스 재시작 시에

다수의 서버에 반복 작업을 처리하는 경우

 

first-playbook.yml 파일을 생성해주겠습니다. 

---
  - name: Add an ansible hosts
    hosts: localhost            
    tasks:
      - name: Add a ansible hosts     # 실행할 작업 이름
        blockinfile:				  # 파일에 block을 추가한다
          path: /etc/ansible/hosts    # 어느 파일에 설정해줄 것인가? 
          block: |					  # | 하이픈은 필수 입니다! 
            [mygroup]				  # 실행 서버 그룹을 추가해주겠습니다.
            172.17.0.6				  # 현재 사용하지 않는 서버의 IP 주소

 

 

첫번째 playbook이 생성되었으면 실행해주겠습니다. 

 

ansible-playbook [생성한 playbook.yml 파일]

ansible-playbook first-playbook.yml

 

 

 

mygroup이 추가되었는지 확인 해보겠습니다.

cat /etc/ansible/hosts

 


멱등성(idempotent)

멱등성이란?

연산을 여러번 적용하더라도 결과가 달라지지 않는 성질, 

연산을 여러번 반복하더라도 한번만 수행된 것과 같은 성질

 

직접 예시로 보여드리겠습니다. 

예를들어 임의로 서버를 hosts 파일에 추가해주겠습니다. 

echo -e "[mytest]\n172.17.0.6"

 

이것을 /etc/ansible/hosts 파일에 추가해보겠습니다. 

echo -e "[mytest]\n172.17.0.6" >> /etc/ansible/hosts

 

 

동일하게 서버가 똑같이 추가되는 것을 확인 할 수 있습니다.

 

다시 처음과 동일한 환경에서 ansible-playbook으로 실행해보겠습니다. 

 

ansible-playbook first-playbook.yml

 

mygroup이 추가되는 것을 확인 할 수 있습니다. 

 

다시 한번 동일한 명령어를 실행해보겠습니다.

 

이미 추가된 내용은 파일 내부에 추가 되지 않는 것을 확인 할 수 있습니다. 

 


실습

1. playbook을 이용해서 devops 서버에만 파일을 복사하기

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

test 파일을 playbook-test로 복사하기

 

더보기

 

vi playbook-sample1.yml
ansible-playbook playbook-sample1.yml

 

 

 

 

2. Tomcat 9.xx 설치

       url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz
       dest: /opt/tomcat-9
       mode: 0755
       checksum: sha512:{{ tomcat_checksum_value.stdout }}"
~                                                                                                                                                   
"playbook-sample2.yml" 22L, 863C
---
- name: Download Tomcat9 from tomcat.apache.org
  hosts: all
  tasks:
   - name: Create a Directory /opt/tomcat9
     file:
       path: /opt/tomcat-9
       state: directory
       mode: 0755
   - name: Download the Tomcat checksum
     get_url:
       url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz.sha512
       dest: /opt/tomcat-9/apache-tomcat-9.0.74.tar.gz.sha512
   - name: Register the checksum value
     shell: cat /opt/tomcat-9/apache-tomcat-9.0.74.tar.gz.sha512 | grep apache-tomcat-9.0.74.tar.gz | awk '{ print $1 }'
     register: tomcat_checksum_value
   - name: Download Tomcat using get_url
     get_url:
       url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz
       dest: /opt/tomcat-9
       mode: 0755
       checksum: sha512:{{ tomcat_checksum_value.stdout }}"

 

해설▼

더보기

tomcat9가 설치되어있는지 확인해보겠습니다.

 ls /opt/tomcat9

 

vi playbook-sample2.yml

ansible-playbook playbook-sample2.yml

 

 

 


오늘은 Ansible Playbook이라는 것을 알아보았습니다.

 

다음시간에는 Jenkins를 이용해 Ansible에 연동해 보겠습니다. 

 


참조

Jenkins를 이용한 CI/CD Pipeline구축