네트워크 캠퍼스/3차 프로젝트
엔서블 플레이북 사용하기
gayeon_
2024. 8. 26. 16:52
엔서블 플레이북
- Ansible 플레이북(Playbook)은 자동화 작업을 정의하고 실행하는 방법을 제공하는 YAML 기반의 파일이다.
- 플레이북은 여러 호스트에 걸쳐 복잡한 작업들을 실행하기 위해 사용되며 단순 명령의 실행보다는 더 구조화되고 유연한 자동화 시나리오를 지원한다.
플레이(Play)
- 플레이북은 여러 개의 "플레이"(play)로 구성된다. 각 플레이는 특정 호스트에 대한 작업을 정의한다.
- 플레이는 어떤 호스트에서 어떤 작업을 실행할지 지정하는 기본 단위다.
- 한 플레이에서 여러 작업을 순서대로 실행할 수 있다.
태스크(Task)
- 각 플레이는 여러 개의 태스크로 구성된다.
- 태스크는 실제로 실행될 작업을 나타내며 주로 특정 Ansible 모듈을 호출한다.
- 태스크는 각 호스트에서 순차적으로 실행되며 상태를 변경하는 작업을 포함할 수 있다.
호스트(Hosts)
- 플레이는 특정 호스트 그룹 또는 호스트에 대해 실행된다.
- ex) [webservers] 또는 [dbservers]와 같은 호스트 그룹에 작업을 적용할 수 있다.
- 호스트는 Ansible 인벤토리 파일에 정의된다.
변수(Variables)
- 플레이북에서 변수를 사용하여 동적인 값을 설정할 수 있다.
- 변수를 통해 값을 재사용하거나 호스트마다 다른 값을 설정할 수 있다.
핸들러(Handlers)
- 특정 조건이 충족될 때만 실행되는 작업이다.
- ex) 웹 서버 구성을 변경한 후에만 Apache를 재시작해야 할 때 핸들러를 사용할 수 있다.
조건문(Conditionals)
- 특정 조건에 따라 작업을 수행할지 말지를 결정할 수 있다.
- ex) 특정 패키지가 이미 설치된 경우 설치 작업을 건너뛸 수 있다.
루프(Loops)
- 반복 작업을 수행할 수 있도록 도와준다.
- ex) 여러 패키지를 한 번에 설치하는 등의 작업에 사용된다.
first-playbook.yml
---
- name: Add an ansible hosts
hosts: localhost
tasks:
- name: Add a ansible hosts
blockinfile:
path: /etc/ansible/hosts
block: |
[newtarget]
타겟 서버의 ip
Ansible의 인벤토리 파일(/etc/ansible/hosts)에 새로운 호스트 그룹을 추가하는 플레이북 코드다.
위 명령어로 플레이북을 실행하고 호스트 목록을 출력하면 newtarget이 추가된 것을 볼 수 있다.
플레이북 실행 명령을 몇번을 실행해도 newtarget 그룹은 중복되어 추가되지 않는다. (멱등성)
이제 타겟 서버로 파일을 복사하는 playbook을 작성할 것이다.
이전 게시글에서 만든 hello.txt를 보낼 것이다.
타겟 서버에서 hello.txt를 지우고
- 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
master 서버의 playbook을 위와 같이 작성한다.
실행한 모습
두 타겟 서버에 hello.txt가 전송되었다.