네트워크 캠퍼스/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가 전송되었다.