파일 목록을 위한 재사용 가능한 롤 생성
이 단계에서는 파일 목록을 위한 Ansible 롤을 생성하는 방법을 배우겠습니다. 롤은 플레이북을 구성하고 더 재사용 가능하게 만드는 방법입니다. 이는 여러 플레이북 또는 프로젝트에서 동일한 작업을 수행해야 할 때 특히 유용합니다.
Ansible 롤 이해
Ansible 롤은 표준 디렉토리 구조로 함께 그룹화된 작업, 변수, 파일, 템플릿 및 기타 리소스 집합입니다. 롤을 사용하면 코드를 쉽게 재사용하고 다른 사람과 공유할 수 있습니다.
롤의 표준 디렉토리 구조는 다음과 같습니다.
roles/
rolename/
tasks/ ## 롤의 주요 작업
handlers/ ## 작업에 의해 트리거된 핸들러
defaults/ ## 기본 변수
vars/ ## 롤 변수
files/ ## 정적 파일
templates/ ## 템플릿
meta/ ## 롤에 대한 메타데이터
파일 목록 롤 생성
장형식으로 파일을 나열하는 롤을 생성해 보겠습니다.
- 먼저 롤에 대한 디렉토리 구조를 생성합니다.
cd ~/project/ansible-lab
mkdir -p roles/file_lister/tasks
- 롤에 대한 주요 작업 파일을 생성합니다.
cd ~/project/ansible-lab
- Explorer 패널에서
~/project/ansible-lab/roles/file_lister/tasks로 이동합니다.
- 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택합니다.
- 파일 이름을
main.yml로 지정합니다.
- 다음 내용을 추가합니다.
---
## Tasks for file_lister role
- name: Find files in the specified directory
ansible.builtin.find:
paths: "{{ path | default('/etc') }}"
patterns: "{{ patterns | default('*') }}"
file_type: "{{ file_type | default('any') }}"
recurse: "{{ recurse | default(false) }}"
register: found_files
- name: Display files in long format
debug:
msg: "{{ item.mode }} {{ item.uid }} {{ item.gid }} {{ item.size }} {{ item.mtime }} {{ item.path }}"
loop: "{{ found_files.files | sort(attribute='path') }}"
loop_control:
label: "{{ item.path }}"
when: show_details | default(true)
- name: Display only file paths
debug:
msg: "{{ item.path }}"
loop: "{{ found_files.files | sort(attribute='path') }}"
loop_control:
label: "{{ item.path }}"
when: not (show_details | default(true))
이 롤은 다음을 수행합니다.
- 매개변수를 기반으로 지정된 디렉토리에서 파일을 찾습니다.
- 파일을 장형식 또는 경로만으로 표시합니다.
- 지정되지 않은 경우 매개변수에 대한 기본값을 사용합니다.
플레이북에서 롤 사용
이제 새 롤을 사용하는 플레이북을 생성해 보겠습니다.
- Explorer 패널에서
~/project/ansible-lab 디렉토리로 이동합니다.
- 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택합니다.
- 파일 이름을
use_role.yml로 지정합니다.
- 다음 내용을 추가합니다.
---
- name: Use file listing role
hosts: local
roles:
- role: file_lister
vars:
path: "/etc"
patterns: "*.conf"
file_type: "file"
show_details: true
이 플레이북은 다음을 수행합니다.
- 로컬 호스트에서 실행됩니다.
file_lister 롤을 사용합니다.
- 롤의 동작을 사용자 정의하기 위해 변수를 설정합니다.
플레이북을 실행해 보겠습니다.
cd ~/project/ansible-lab
ansible-playbook use_role.yml
/etc 디렉토리의 모든 .conf 파일의 세부 정보를 보여주는 출력을 볼 수 있습니다.
롤 변수 사용자 정의
롤의 장점 중 하나는 변수를 변경하여 동작을 쉽게 사용자 정의할 수 있다는 것입니다. 다른 매개변수를 사용하여 롤을 사용하는 다른 플레이북을 생성해 보겠습니다.
- Explorer 패널에서 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택합니다.
- 파일 이름을
custom_listing.yml로 지정합니다.
- 다음 내용을 추가합니다.
---
- name: Custom file listing
hosts: local
roles:
- role: file_lister
vars:
path: "/home/labex"
patterns: "*.yml"
file_type: "file"
show_details: false
이 플레이북은 다음을 수행합니다.
file_lister 롤을 사용합니다.
/home/labex 디렉토리를 보도록 설정합니다.
- YAML 파일 (*.yml) 을 필터링합니다.
- 파일 경로만 표시합니다 (전체 세부 정보 아님).
플레이북을 실행해 보겠습니다.
ansible-playbook custom_listing.yml
/home/labex 디렉토리의 모든 YAML 파일 목록을 세부 정보 없이 볼 수 있습니다.
고급 사용법: 보고서 생성
마지막으로, 롤을 사용하여 파일 보고서를 생성하는 더 고급 플레이북을 생성해 보겠습니다.
- Explorer 패널에서 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택합니다.
- 파일 이름을
generate_report.yml로 지정합니다.
- 다음 내용을 추가합니다.
---
- name: Generate file listing report
hosts: local
vars:
report_path: "~/project/ansible-lab/file_report.txt"
tasks:
- name: Find files in the specified directory
ansible.builtin.find:
paths: "/etc"
patterns: "*.conf"
file_type: "file"
register: found_files
- name: Create report header
copy:
dest: "{{ report_path }}"
content: |
File Listing Report
Generated on: {{ ansible_date_time.date }} at {{ ansible_date_time.time }}
-----------------------------------------------------------
Mode Owner Group Size Modified Path
-----------------------------------------------------------
force: yes
- name: Append file information to report
lineinfile:
path: "{{ report_path }}"
line: "{{ item.mode }} {{ item.uid }} {{ item.gid }} {{ item.size | string | ljust(10) }} {{ item.mtime }} {{ item.path }}"
loop: "{{ found_files.files | sort(attribute='path') }}"
loop_control:
label: "{{ item.path }}"
- name: Display report location
debug:
msg: "Report generated at {{ report_path }}"
이 플레이북은 다음을 수행합니다.
/etc 디렉토리에서 .conf 파일을 찾습니다.
- 헤더가 있는 텍스트 파일을 생성합니다.
- 각 파일에 대한 정보를 보고서에 추가합니다.
- 보고서의 위치를 표시합니다.
플레이북을 실행해 보겠습니다.
ansible-playbook generate_report.yml
플레이북을 실행한 후 보고서를 볼 수 있습니다.
cat ~/project/ansible-lab/file_report.txt
/etc 디렉토리의 모든 .conf 파일을 나열하는 형식화된 보고서를 볼 수 있습니다.