# 8- Ansible Role 이번엔 ansible role기반으로 배포절차를 만들어 보려고 합니다. 배포범위가 많아지면 하나의 플레이북으로 관리하기 힘들기 때문에 role이라는 이름으로 역활을 나누어서 배포할 수 있습니다.
[![image.png](http://igoni.kr/uploads/images/gallery/2025-06/scaled-1680-/02Dimage.png)](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 ```