본문 바로가기

로컬 환경 구성/로컬 개발환경 구성

7. Ansible Playbook 사용하기

# Ansible Playbook 사용하기

- Ansible Playbook은 사용자가 원하는 내용을 미리 작성해 놓는 파일이라고 볼 수 있다.

이전에는 1개의 명령어를 각각 실행하는 구조 였다면, play 북은 미리 작성해 놓고 사용한다는 의미로 생각하면 된다.

- Playbool.yml 파일을 활용하여 새로운 hosts를 추가해보자. hosts의 ip는 172.17.0.5 이다.

파일명 : first-playbook.yml

파일의 내용

---
  - name: Add an ansible hosts
    hosts: localhost
    tasks:
      - name: Add a ansible hosts
        blockinfile:
          path: /etc/ansible/hosts
          block: |
            [mygroup]
            172.17.0.5

- 실행 명령어

ansible-playbook first-playbook.yml

[root@ansible-server /]# ansible-playbook first-playbook.yml

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

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

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

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

- 정상적으로 추가가 되었는지 hosts 파일을 확인하면 아래와 같다.

기존에 존재하지 않았던 # BEGIN ANSIBLE MANAGED BLOCK 의 내용으 추가된것을 확인 할 수 있다.

[devops]
172.17.0.3
172.17.0.4
# BEGIN ANSIBLE MANAGED BLOCK
[mygroup]
172.17.0.5
# END ANSIBLE MANAGED BLOCK

# Ansible playbook을 활용한 파일 복사

일단 파일명은 playbook-sample.yml 파일로 지정한다.

그리고 아래와 같이 내용을입력한다. 그리고 playbook-sample.yml 파일이 있는 경로에 sample.txt파일이 존재하지 않으면 vi명령어를 활용하여 새로 생성한다.

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

- 그리고 실행한다. 결과는 아래와 같다.

[root@ansible-server /]# ansible-playbook playbook-sample.yml

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

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

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

- 172.17.0.4번 서버에 가서 /tmp 폴더를 확인해보면 아래와 같이 sample.txt 파일이 존재하는것을 확인 할 수 있다.

[root@docker-server tmp]# ls -l
total 20
-rwx------ 1 root root 701 Sep 15  2021 ks-script-4luisyla
-rwx------ 1 root root 671 Sep 15  2021 ks-script-o23i7rc2
-rwx------ 1 root root 291 Sep 15  2021 ks-script-x6ei4wuu
-rw-r--r-- 1 root root  25 May  9 06:56 sample.txt
-rw-r--r-- 1 root root  16 May  9 05:44 test
[root@docker-server tmp]# hostname -i
172.18.0.1 172.17.0.4

- 파일 다운로드 후 복사하는 예제 수행하기

파일을 생성한다. playbook-sample-download.yml

파일의 내용은 아래와 같다. 몇가지 에러를 수정한 코드는 아래와 같다. 마지막의 tomcat url은 변경이 잘 되므로 

---
- name: Download Tomcat9 from tomcat.apache.org
  hosts: all
  tasks:
   - name: Create a Directory /opt/tomcat-9
     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 }}"

- 파일 실행

실행 명령어 : ansible-playbook playbook-sample-download.yml

- 실행 결과

[root@ansible-server /]# ansible-playbook playbook-sample-download.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/tomcat-9] *********************************************************************************************************************
changed: [172.17.0.4]
changed: [172.17.0.3]

TASK [Download the Tomcat checksum] *************************************************************************************************************************
changed: [172.17.0.4]
changed: [172.17.0.3]

TASK [Register the checksum value] **************************************************************************************************************************
changed: [172.17.0.3]
changed: [172.17.0.4]

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

PLAY RECAP **************************************************************************************************************************************************
172.17.0.3                 : ok=5    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.4                 : ok=5    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

- 대상 서버인 172.17.0.4에 들어가서 cd /opt/tomcat9 으로 이동하면 아래와 같이 정상적으로 파일이 존재하는것을 확인 할 수 있다.

[root@docker-server tomcat9]# ls -l
total 4
-rw-r--r-- 1 root root 156 May  9 07:40 apache-tomcat-9.0.8.tar.gz.sha512

- 다운로드 받은 작업 및 압축 해제 tomcat 설치 등 여러가지 작업을 ansible을 활용하여 진행 할 수 있다.

 

- 끝 -