8- Ansible Role
이번엔 ansible role기반으로 배포절차를 만들어 보려고 합니다.
배포범위가 많아지면 하나의 플레이북으로 관리하기 힘들기 때문에 role이라는 이름으로 역활을 나누어서 배포할 수 있습니다.
- playbook디렉토리에 roles 하위 디렉토리별로 수행해야할 역활을 기재해주시면 되고요....
- 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
- 세부디렉토리 정보는 다음과 같습니다.
- main.yml --> 배포하는 yml파일
- roles --> role 디렉토리
- roles/os/linux/setup/task/ --> OS프로비져닝 하기 위한 플레이북 (default는 해당경로의 main.yml 파일을 실행)
- roles/os/linux/setup/templates/ --> 해당 role에 templates 배포할떄 사용하는 디렉토리
- roles/os/linux/setup/vars/ --> 해당 role에 정의할 외부변수 저장용 디렉토리
- 세부디렉토리 정보는 다음과 같습니다.
- 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
- role을 실행할때는 job_tag라는 옵션(-t)으로 분리해서 사용하면 됩니다.
nginx를 설치하기 위한 절차는 다음과 같이 사용하면 됩니다.
$>ansible-playbook -i host main.yml -t nginx