Ansible role 기반 Playbook 작성

leesj·2021년 9월 23일
0
post-custom-banner

Why role?
단일 playbook을 만들면 playbook 이 늘어남에 따라 중복되는 내용이 작성된 playbook 이 많아지며 재사용성이 떨어지게 된다.
(만일 동일한 기능을 수행하는 playbook 이지만 리눅스 종류별 작업 내용이 조금씩 다른 경우, role 을 사용해야 가독성도 좋아지며 재사용성이 향상됨)

Role 의 기본 Directory 구조

  • 최상위 Directory roles 는 Ansible 의 규칙이며 playbook 을 읽고 실행할때 참조할 대상이라는 의미.
$ tree roles
roles
└── docker
    ├── README.md
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    ├── templates
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml

각 Directory 별 역할

files

  • 각 managed 서버에 배포할 파일의 위치
  • 설치에 필요한 파일이 위치하는 디렉터리

handelrs

  • linux service 를 처리하기 위해 사용
  • 리눅스 마다 상이한 서비스 명등을 처리하기 위한 디렉터리
  • main.yml 에 작성

tasks

  • playerbook 의 tasks 와 동일

defaults

  • 기본 변수 설정

vars

  • 작업 수행 시 사용할 변수 정의

templates

  • managed 서버에 배포할 템플릿 파일의 위치

meta

  • roles 에 대한 정보, 호환 버전 등 메타 데이터 정의

Ansible galaxy install(Mac)

  • Ansible 를 설치하여 함께 Install 되는 ansible-galaxy clinet command 를 사용
$ brew install ansible
  • 위와 같은 디렉터리 구조는 ansible-galaxy 커맨드를 통해 생성 하여 초기화 하거나 기존 galaxy 상에서 checkout 가능
// Initialization
$ ansible-galaxy init [ROLE_NAME]
$ ansible-galaxy install [ROLE_NAME]
$ ansible-galaxy install --roles-path [ROLE_DIR] [ROLE_NAME]

role 의 실행

  • role 의 실행을 위해서는 playbook 이 필요하며 playbook 내에 아래와 같이 role 을 지정
$ cat playbooks/install_docker.yml
---
- name: install docker daemon
  hosts: all
  become: yes
roles:
    - role: ../roles/docker

Ansible galaxy command

  • role 검색
$ ansible-galaxy search
// ex
$ ansible-galaxy search 'redis' --platforms 'EL' --galaxy-tags 'security''
  • role 세부정보
$ ansible-galaxy info [ROLE_NAME]
  • 특정 role 을 다운받아 설치
  • 기본 디렉터리는 ~/.ansible/roles 이나 -p 옵션으로 지정 가능
  • -c : ignore certs : SSL certificate를 무시한다.
$ ansible-galaxy install -p [PATH] [ROLE_NAME]
  • 설치된 role 의 list 확인
  • -p: 특정 디렉터리 지정
$ ansible-galaxy list -p [DIR_PATH]

참고자료

post-custom-banner

0개의 댓글