# 8- Ansible Role
이번엔 ansible role기반으로 배포절차를 만들어 보려고 합니다.
배포범위가 많아지면 하나의 플레이북으로 관리하기 힘들기 때문에 role이라는 이름으로 역활을 나누어서 배포할 수 있습니다.
[](http://igoni.kr/uploads/images/gallery/2025-06/02Dimage.png)
|
perplexity에서 생성한 AI이미지 |
1. playbook디렉토리에 roles 하위 디렉토리별로 수행해야할 역활을 기재해주시면 되고요....
2. role기반의 디렉토리 구조는 다음과 같습니다.
```
$> tree -d -L 4
./
├── main.yml
└── roles
├── os
│ └── linux
│ ├── setup
│ │ ├── tasks
│ │ │ ├── centos6.yml
│ │ │ ├── centos7.yml
│ │ │ ├── main.yml
│ │ │ └── rocky8.yml
│ │ └── templates
│ │ ├── ntp.conf.j2
│ │ └── resolv.conf.j2
│ └── kernel_tune
│ └── tasks
│ └── main.yml
└── software
├──apache
│ ├── tasks
│ │ ├── main.yml
│ ├── templates
│ │ ├── apache_logrotate.j2
│ │ ├── apache_systemd.j2
│ │ └── apache.conf.j2
│ └── vars
│ └── vars.yml
└── nginx
├── tasks
│ ├── main.yml
├── templates
│ ├── nginx_logrotate.j2
│ ├── nginx_systemd.j2
│ └── nginx.conf.j2
└── vars
└── vars.yml
```
1. 세부디렉토리 정보는 다음과 같습니다.
1. main.yml --> 배포하는 yml파일
2. roles --> role 디렉토리
3. roles/os/linux/setup/task/ --> OS프로비져닝 하기 위한 플레이북 (default는 해당경로의 main.yml 파일을 실행)
4. roles/os/linux/setup/templates/ --> 해당 role에 templates 배포할떄 사용하는 디렉토리
5. roles/os/linux/setup/vars/ --> 해당 role에 정의할 외부변수 저장용 디렉토리
3. main.yml 파일내용은 다음과 같이 작성합니다.
```
$> cat main.yml
---
- name: Setup
hosts: "{{ target_hosts | default('all') }}"
gather_facts: yes
serial: "3"
become: yes
roles:
- { role: os/linux/setup, tags: [ setup ] } #Linux초기 설치 Role template
- { role: os/linux/tune, tags: [ tune ] } #nfs 서버 구성 후 마운트 template
- { role: software/apache, tags: [ apache ] } #로그백업 스크립트 배포 template
- { role: software/nginx, tags: [ nginx ] } # VCS구동을 위한 배포 Template
```
4. role을 실행할때는 job\_tag라는 옵션(-t)으로 분리해서 사용하면 됩니다.
nginx를 설치하기 위한 절차는 다음과 같이 사용하면 됩니다.
```
$>ansible-playbook -i host main.yml -t nginx
```