이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Ansible

05. Ansible Role

이쿠우우 2021. 12. 13. 17:00
반응형

 

Ansible Role 

 

Ansible Role 이란?

Ansible에서는 "Role"을 사용하여 일반적인 방식으로 
ansible 코드를 더 쉽게 재사용하는 방법을 제공함. 
role은 인프라를 프로비저닝하고, 애플리케이션을 배포하는 등의 모든 작업에 대해 
변수, 파일, 템플릿 등의 기타 리소스들을 표준화된 디렉토리 구조로 패키징함. 
다시 정리하면, 
role은 쉬운 공유, 휴대성 및 재사용을 위해 특정 구조로 배열된 yaml 작업파일 및 지원 항목들의 모음임.
 
 

Ansible Role template 생성

1) roles directory를 먼저 생성해줘야함.

2) ansible-galaxy 명령어 사용
ansible-galaxy install [ROLE_NAME]
ansible-galaxy install --roles-path [ROLE_DIR] [ROLE_NAME]
 
ex) ansible-galaxy init testRoles

 
3) template 확인

 

 

Ansible Role template directory 역할 정리

 
해당 directory 중 사용하지 않는 directory는 삭제해도 괜찮음.
 

defaults

기본 변수를 설정.
 

files

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

handlers

Handler는 코드를 짤 때의 함수와 비슷함.
반복되는 부분을 함수로 만들어서 필요할 때 마다 사용함.
Task가 할 수 있는 일을 똑같이 할 수 있으며, 
Playbook의 Task에서 Handler를 호출하게되면 해당 Handler가 호출되어 실행되는 식으로 동작함.

 

meta

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

tasks

playbook에 작성 했던 tasks와 동일.
 

templates

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

vars

작업 수행 시 사용할 변수를 정의.
 
 

 
 

Ansible Role 사용해보기

 
이전 글인 Ansible playbook에서 진행했던 내용을 
Role template으로 만들어보겠음.
 

[목표]

1. directory 생성
  • Creates directory
2. control node에서 managed node로 파일 복사
  • store file to remote server
  • 파일 권한 변경도 처리함.
3. test.sh shell script 실행
  • execute the script
4. 파일이 생성되었는지 확인
  • check file exists
5. managed node에서 control node로 파일 복사
  • file move to control node
6. directory 삭제
  • delete directory
 

files

managed node로 복사할 파일을 위치시킴
[경로]
roles/testRoles/files/temp/test.sh

 

vars

변수를 정의함.
 
[경로]
roles/testRoles/vars
 
[변수]
managedNode_rootDirectory: /temp
script_file: /temp/test.sh
report_file: /temp/sample.txt

 

tasks

playbook에서 정의했던 tasks와 동일함.
---

- name: Creates directory
  file:
    path: /temp
    state: directory
- name: store file to remote server
  copy:
    src: temp/test.sh
    dest: "{{ script_file }}"
    mode: 0744
- name: execute the script
  shell: ./test.sh
  args:
    chdir: "{{ managedNode_rootDirectory }}"
    executable: /bin/bash
- name: check file exists
  wait_for:
    path: "{{ report_file }}"
- name: file move to control node
  fetch:
    src: "{{ report_file }}"
    dest: ./managedNodeFile.txt
    flat: yes
- name: delete directory
  file:
    path: "{{ managedNode_rootDirectory }}"
    state: absent

 
role 작성 완료
 

Playbook

상위에서 정의한 role을 playbook을 통해서 호출함.
ansible_roles_test.yml 예제
---
- name: ansible role test
  hosts: all
  become: yes
  roles:
  - role: ./roles/testRoles
[playbook 실행 결과]
ansible-playbook -i host.ini ansible_roles_test.yml

목표했던대로 managed node로 부터 managedNodeFile.txt를 정상적으로 받아옴.

 

반응형

'클라우드 > Ansible' 카테고리의 다른 글

Ansible directory 생성 (file 모듈)  (0) 2022.01.27
06. Ansible lookup  (0) 2022.01.09
04. Ansible Playbook  (0) 2021.12.13
03. Ansible inventory  (0) 2021.12.13
02. Ansible 설치  (0) 2021.12.12