Ansible: Playbook 재사용하기

Ansible에서 다중 플레이북 및 롤 (Role)을 이용하여 Playbook 재사용하기

Ansible에서 다중 플레이북 및 롤(Role)을 이용하는 방법에 관한 내용을 설명드리겠습니다. 다양한 플레이북과 롤을 활용하여 배포 작업을 최적화하는 방법을 알아보겠습니다.

playbook 재사용하기

1. 플레이북이란?

Ansible 플레이북은 여러 개의 호스트에 대해 순차적으로 실행되는 작업 목록을 정의하는 YAML 파일입니다. 하나의 플레이북에서 여러 개의 서버에 대한 다양한 작업을 수행할 수 있습니다. 주요 구성 요소로는 호스트, 태스크, 변수 등이 있습니다.

2. Role이란?

Role은 유사한 역할을 수행하는 태스크와 변수의 집합입니다. 플레이북에서 롤을 정의함으로써 코드의 재사용과 모듈화를 향상시킬 수 있습니다. 롤은 프로젝트에 따라 필요한 설정과 작업을 특정 폴더 구조에 담아 구성할 수 있으며, 플레이북에서는 롤을 호출하여 그 역할을 수행하게 할 수 있습니다.

3. 다중 플레이북 구성하기

플레이북에서 다른 플레이북을 호출하는 “include” 또는 “import” 문을 사용하여 다중 플레이북을 구성할 수 있습니다. 이렇게 하면 작업을 더 잘 세분화하고 코드의 재사용성을 높일 수 있습니다. 다중 플레이북을 활용하면 한 번에 실행할 때 여러 규칙에 따라 다른 작업을 수행하도록 구성할 수 있습니다.

- include: first_playbook.yml
- include: second_playbook.yml 

동적으로 설정하는 방법은 include 방법(include_tasks, include_role 등)을 사용해야하며, 정적으로 설정하는 방법은 import 방법(import_playbookm import tasks 등)을 사용하면 됩니다.

동적 방식이란 Playbook 실행 시 불러온 작업들은 그 작업을 시작할 때 분석하여 처리됩니다.
예를 들어 shell 모듈을 사용한 Playbook을 include 하였을 경우 그 playbook이 실행될 때 오류나 실행 등 그 작업을 시작할 때 분석하게 됩니다.
그러므로 Playbook이 정상적으로 실행되어도 include한 Playbook이 오류가 발생할 경우 include한 task에서 실행이 중단됩니다.

정적 방식이란 Playbook을 실행하는 처음 순간에 모든 Import한 Playbook을 불러와 분석하게 됩니다.
그래서 Import 한 Playbook에 구문 오류 등 발생할 경우 Playbook은 실행이 중단됩니다.

4. 롤을 이용한 작업 분리

란 롤(role)은 작업을 분리하고 코드를 모듈화하는 데 사용됩니다. 롤은 필요한 작업들과 변수들을 올바른 디렉터리 구조에 담아 구성하여, 플레이북에서 간단하게 참조하고 호출할 수 있도록 만듭니다. 롤을 사용하면 작업을 재사용하고 관리하기 쉽게 만들 수 있습니다.

 roles:
  - role: nginx
  - role: mysql 

5. 변수와 태스크 활용하기

변수 및 태스크를 활용하여 작업간의 종속성이나 값을 제어할 수 있습니다. 변수는 플레이북과 롤에 설정될 수 있으며, 태스크는 플레이북 내에서 일련의 작업을 정의하는 데 사용됩니다. Ansible 제어기에서 태스크를 정의 하여 각 호스트에 배포할 수 있습니다.

 - name: Install dependencies
  apt:
    name: "{{ item }}"
    loop:
    - dependency1
    - dependency2 

6. 실습 예제

아래 예제에서는 Nginx를 설치하고 구성하는 작업을 플레이북 및 롤을 활용하여 수행합니다. 플레이북은 Nginx 롤을 호출하고, 롤의 tasks에서 설치 및 설정을 수행하게 됩니다.

---
- name: Setup Nginx
  hosts: web_servers
  roles:
  - role: nginx
    vars:
      nginx_domain: example.com
      nginx_port: 80 
$ cat /roles/nginx/tasks/main.yml
---
- name: Install Nginx
  apt:
    name: nginx
    state: present
- name: Configure Nginx
  template:
    src: templates/nginx.conf.j2
    dest: /etc/nginx/sites-available/example.conf
    notify: Restart Nginx 

7. 결론

이번 글에서는 다중 플레이북 및 롤(Role)을 이용하는 방법에 관한 사용 방법에 대해 간략히 살펴보았습니다.

Leave a Comment