Ansible 플레이북(Playbook)이란?
자동화 작업을 정의하고 실행하는 방법을 제공하는 YAML 기반의 파일이다.
플레이북은 여러 호스트에 걸쳐 복잡한 작업들을 실행하기 위해 사용되며, 단순 명령의 실행보다는 더 구조화되고 유연한 자동화 시나리오를 지원한다.
Ansible 플레이북의 구조
---
- name: Web server setup and configuration
hosts: webservers
become: yes
tasks:
- name: Install Apache
apt:
name: apache2
state: present
- name: Start Apache service
service:
name: apache2
state: started
- name: Web server setup and configuration
플레이 이름 - "webservers"라는 호스트 그룹에 대한 작업을 정의함 - hosts: webservers
플레이가 적용될 호스트 그룹을 정의, 인벤토리 파일에서 "webservers" 그룹에 속한 모든 서버에서 이 작업이 실행됨 - become: yes
권한 상승이 필요하다는 것을 나타냄 - sudo를 사용하여 루트 권한으로 명령이 실행됨 - tasks:
플레이에서 실행할 작업 목록을 정의. 각 태스크는 순차적으로 실행됨 - name: Install Apache
첫 번째 태스크의 이름. Apache 웹 서버 패키지를 설치하기 위한 apt 모듈을 사용함 - name: Start Apache service
두 번째 태스크는 Apache 서비스를 시작하는 작업을 정의. service 모듈을 사용하여 서비스를 관리함.
핸들러 사용 예시
---
- name: Web server setup
hosts: webservers
become: yes
tasks:
- name: Install Apache
apt:
name: apache2
state: present
- name: Modify Apache config
copy:
src: /local/path/to/config
dest: /etc/apache2/apache2.conf
notify: Restart Apache
handlers:
- name: Restart Apache
service:
name: apache2
state: restarted
`notify: Restart Apache` : 해당 태스크가 실행되면, 핸들러가 호출되어 Apache가 재시작된다.
`handlers: ` : 핸들러 블록에서 서비스 재시작 작업이 정의된다.
실습 진행해보기
nano first-playbook.yml
# 내용 입력
---
- name: Add an ansible hosts
hosts: localhost
tasks:
- name: Add a ansible hosts
blockinfile:
path: /etc/ansible/hosts
block: |
[newtarget]
192.168.0.52
우선 ansible 서버에서 멱등성이 적용되는지 여부를 확인해보자.
# 플레이북 실행
sudo ansible-playbook first-playbook.yml
실행하면 호스트 주소가 localhost이니 자기 자신 내부에서 실행해서 해당 파일을 추가해주고,
`cat`으로 확인 시 newtarget이 추가된 것을 볼 수 있다.
이 상태에서 플레이북 실행 명령어를 몇 번 더 실행해도 newtarget 그룹은 하나만이 추가된 상태를 유지하고, 이를 멱등성이라고 부른다.
target 그룹을 타겟으로하여 파일을 복사하는 playbook을 사용해보자.
우선 방금 전 만든 hello.txt 파일을 삭제하고 second playbook을 작성해주자.
nano second-playbook.yml
# 내용 작성
- name: Ansible Copy Example to target
hosts: target
tasks:
- name: copy file with playbook
copy:
src: ~/hello.txt
dest: /home/ubuntu/tmp
owner: ubuntu
mode: 0644
# 플레이북 실행
sudo ansible-playbook second-playbook.yml
위 이미지처럼 권한 문제가 발생하는데, `sudo`로 입력 시 가끔 public key가 ubntu 계정만을 타겟으로 잡힌 경우가 있어 안될 수 있다.
`sudo`를 빼고 입력하면 성공적으로 파일이 전송된 것을 확인할 수 있다.
'🌥️Cloud Study🌥️ > IaC' 카테고리의 다른 글
[ Ansible ] Jenkins와 Ansible 연동 후 플레이북 실행 (0) | 2024.08.23 |
---|---|
[ Ansible ] Ansible Galaxy로 원하는 롤, 콜렉션 찾기 (1) | 2024.08.23 |
[ Ansible ] Ansible 모듈 사용해보기 (1) | 2024.08.22 |
[ Ansible ] Ansible 개요 및 환경설정 (0) | 2024.08.22 |