이전 글
이전 포스팅에서 우리는 Ansible의 기본 명령어인 -m 옵션을 활용해서 여러 모듈을 사용했다.
하지만, 실제로는 -m 옵션을 주기보다는 Ansible Playbook를 사용한다.
이번 포스팅에서는 Ansible Playbook이 무엇이고 어떻게 활용하는지에 관해 알아본다.
Ansible Playbook
Ansible Playbook은 사용자가 원하는 파일을 미리 작성해 놓은 파일을 말한다.
즉, 우리가 앞서 모듈을 통해 한 줄씩 실행했던 것을 모아서 미리 파일을 만들어놓는 것이다.
ex) 설치, 파일 전송, 서비스 재시작...
ex) 다수의 서버에 반복 작업을 처리하는 경우
우리는 Ansible에서 제공하는 playbook을 통해 여러 작업이 가능하다.
Ansible Playbook 예제 프로그램
---
- name: Add an ansible hosts
hosts: localhost
tasks:
- name: Add an ansible hosts
blockinfile:
path: /etc/ansible/hosts
block: |
[mygroup]
172.17.0.5
- name: Ansible Playbook의 이름을 정한다.
- hosts: 작성한 Playbook이 적용될 그룹 및 IP를 입력한다.
- tasks: Playbook에서 이루어질 작업들을 작성하는 곳이다. (위의 예시에서는 한 가지 작업만이 존재)
- name: 작업의 이름을 정한다.
- blockinfile: 파일에 특정 block을 추가하는 작업을 한다.
Ansible Playbook 실행
ansible-playbook first-playbook.yml
실제로 vi /etc/ansible/hosts로 접근하면 아래와 같이 추가된 것을 확인할 수 있다.
당연하게도 ansible-playbook 명령어 지정시 -i 옵션을 사용해서 개별 hosts를 선택할 수도 있다.
위 처럼 우리는 ansible-playbook를 사용하면 Ansible를 활용하여 여러 호스트에 쉽게 다양한 작업들을 명령할 수 있다.
근데 여기서 중요한 점이 하나있다.
우리는 이전 포스트에서 Ansible은 멱등성의 특징이 있다고 했다.
그렇다면 위의 Playbook을 한번더 실행하면 어떻게 될까?
Ansible이 갖는 멱등성에 의해 반복 작업에도 추가되지 않은 것을 확인할 수 있다.
다른 예시를 한개 더 알아보자.
Ansible Playbook를 활용하여 Tomcat 서버 설치
---
- 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.91/bin/apache-tomcat-9.0.91.tar.gz
dest: /opt/tomcat9
mode: 0755
checksum: sha512:https://downloads.apache.org/tomcat/tomcat-9/v9.0.91/bin/apache-tomcat-9.0.91.tar.gz.sha512
- https://tomcat.apache.org/download-90.cgi <- 최신 버전 확인
- name: Playbook의 이름
- hosts: devops 그룹을 지정한다.
- tasks: 실행할 작업들
- 작업1: /opt/tomcat9 경로에 디렉토리를 하나 생성한다.
- 권한은 0755이다.
- 작업2: Tomcat 파일을 get_url 모듈을 사용해서 다운로드 받아온다.
- 작업1: /opt/tomcat9 경로에 디렉토리를 하나 생성한다.
Ansible Playbook 실행
ansible-playbook {Playbook 이름}
정상적으로 Tomcat 파일이 다운로드 되어 Playbook이 실행되는 것을 확인할 수 있다.
정리
우리는 이번 포스팅에서 -m 옵션으로 모듈을 지정하는 방법대신 Playbook을 활용해서 호스트에게 일련의 작업을 시켰다.
Playbook을 활용하면 일일이 스크립트 코드를 작성하는 것이 아닌 저장되어 있는 Playbook를 사용하기만 하면 된다.
그래서, 우리는 다음 포스팅에서 이 Playbook을 활용하여 Jenkins에서 Ansible 서버로 명령을 내리는 것으로
Jenkins를 활용해 여러 호스트들을 조작해볼 것이다.
참고
'Infra > Jenkins' 카테고리의 다른 글
[Jenkins] Jenkins의 여러 Pipeline 작업 (0) | 2024.07.31 |
---|---|
[Jenkins] Jenkins + Ansible 연동하기 (0) | 2024.07.31 |
[Jenkins] Ansible 기본 명령어 (0) | 2024.07.30 |
[Jenkins] Docker 컨테이너로 Ansible 실행하기 (0) | 2024.07.21 |
[Jenkins] IaC와 Ansible이란? (0) | 2024.07.20 |