반응형
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 |