Skip to main content

8- Ansible Role

이번엔 ansible role기반으로 배포절차를 만들어 보려고 합니다.

배포범위가 많아지면 하나의 플레이북으로 관리하기 힘들기 때문에 role이라는 이름으로 역활을 나누어서 배포할 수 있습니다.

 

  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