소개
Ansible 콘텐츠는 역할 (Role) 과 컬렉션 (Collection) 을 통해 제공될 수 있습니다. 제한된 실습 환경에서는 인터넷에서 직접 다운로드하는 것보다 로컬 콘텐츠 아카이브를 사용하는 것이 더 안전합니다.
이번 실습에서는 로컬 역할을 패키징하고, 요구사항 (requirements) 파일을 통해 이를 설치하며, 미리 설치된 컬렉션을 검사하고, 설치된 역할을 적용해 봅니다.
콘텐츠 설치 프로젝트 생성
이 단계에서는 로컬 콘텐츠 소스, 설치된 역할, 플레이북 및 출력 디렉토리를 포함하는 프로젝트를 생성합니다.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,roles,vendor_src/local_message/{tasks,meta},playbooks,managed,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
roles_path = ./roles
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF
이 실습에서는 역할 소스와 설치된 역할 콘텐츠를 분리합니다. vendor_src/local_message는 전달받거나 직접 만든 콘텐츠를 나타내며, roles/local_message는 Ansible 이 실제로 로드하는 설치된 복사본이 됩니다.
로컬 역할 소스 빌드
이 단계에서는 설치된 roles 디렉토리 외부에 작은 역할 소스를 생성합니다. 이는 신뢰할 수 있는 소스로부터 역할 콘텐츠를 전달받는 상황을 시뮬레이션합니다.
이 단계의 명령을 실행하기 전에 Ansible 프로젝트 디렉토리로 돌아가십시오. 이렇게 하면 LabEx 가 각 단계를 개별적으로 실행하더라도 명령이 안정적으로 유지됩니다.
cd /home/labex/project/rhce-ansible
cat > vendor_src/local_message/tasks/main.yml <<'EOF'
---
- name: Ensure local message directory exists
ansible.builtin.file:
path: /home/labex/project/rhce-ansible/managed/local-message
state: directory
mode: '0755'
- name: Write message from installed role
ansible.builtin.copy:
dest: /home/labex/project/rhce-ansible/managed/local-message/message.txt
content: |
installed_role=local_message
mode: '0644'
EOF
cat > vendor_src/local_message/meta/main.yml <<'EOF'
---
galaxy_info:
author: LabEx
description: Local role for RHCE Ansible prep
license: MIT
min_ansible_version: '2.16'
dependencies: []
EOF
역할 소스는 일반적인 역할과 동일한 기본 구조를 가집니다. tasks/main.yml에는 작업 로직이, meta/main.yml에는 역할 메타데이터가 포함됩니다. 작업은 설치된 역할이 성공적으로 실행되었음을 확인할 수 있도록 메시지를 파일에 기록합니다.
tar -czf vendor_src/local_message.tar.gz -C vendor_src local_message
이 아카이브는 오프라인 역할 패키지를 시뮬레이션합니다. 로컬 아카이브를 사용하면 네트워크 환경에 의존하지 않으면서도 requirements.yml 워크플로우를 학습할 수 있습니다.
ls -l vendor_src/local_message.tar.gz
요구사항을 통한 역할 설치
이 단계에서는 로컬 아카이브를 가리키는 역할 요구사항 파일을 작성하고 이를 roles 디렉토리에 설치합니다.
이 단계의 명령을 실행하기 전에 Ansible 프로젝트 디렉토리로 돌아가십시오.
cd /home/labex/project/rhce-ansible
cat > requirements.yml <<'EOF'
---
roles:
- name: local_message
src: file:///home/labex/project/rhce-ansible/vendor_src/local_message.tar.gz
EOF
file:// 소스는 ansible-galaxy가 로컬 아카이브를 참조하도록 합니다. 이는 원격 소스를 사용하는 것과 개념은 같지만, 네트워크 액세스에 의존하지 않는 방식입니다.
ansible-galaxy role install -r requirements.yml -p roles --force
-r 옵션은 요구사항 파일을 읽고, -p roles는 설치 디렉토리를 지정하며, --force는 실습을 다시 실행할 때 명령을 반복 가능하게 만듭니다.
find roles/local_message -maxdepth 2 -type f -print
설치된 역할의 tasks/main.yml 및 meta/main.yml 파일이 보여야 합니다. 플레이북은 원본 vendor_src 디렉토리가 아닌 설치된 역할 경로를 사용하게 됩니다.
설치된 컬렉션 콘텐츠 검사
이 단계에서는 설치된 컬렉션을 검사합니다. RHEL10 이미지에는 이미 일반적인 컬렉션이 포함되어 있으므로, 인터넷 다운로드 없이도 컬렉션 탐색 방법을 확인할 수 있습니다. 이 단계의 명령을 실행하기 전에 Ansible 프로젝트 디렉토리로 돌아가십시오.
cd /home/labex/project/rhce-ansible
ansible-galaxy collection list ansible.posix | tee reports/collection-list.txt
ansible-doc ansible.posix.acl | sed -n "1,20p"
컬렉션은 네임스페이스 아래에 모듈을 패키징합니다. 여기서 ansible.posix.acl은 ansible.posix 컬렉션의 acl 모듈을 의미하며, ansible-doc은 Ansible 이 로컬에서 해당 문서를 찾을 수 있음을 증명합니다.
설치된 역할 적용
이 단계에서는 요구사항을 통해 설치된 역할을 적용합니다. 이는 Ansible 이 설치된 역할 콘텐츠를 찾아 실행할 수 있음을 증명합니다. 이 단계의 명령을 실행하기 전에 Ansible 프로젝트 디렉토리로 돌아가십시오.
cd /home/labex/project/rhce-ansible
cat > playbooks/use-installed-role.yml <<'EOF'
---
- name: Use a locally installed role
hosts: managed
gather_facts: false
roles:
- role: local_message
EOF
roles_path가 설치 디렉토리를 가리키고 있으므로 플레이북은 local_message만 참조하면 됩니다. 이렇게 하면 플레이북이 아카이브 위치와 독립적으로 유지됩니다.
ansible-playbook playbooks/use-installed-role.yml | tee reports/installed-role-run.txt
실행 결과는 failed=0으로 끝나야 하며, 설치된 역할의 작업에 의해 메시지 파일이 생성되어야 합니다.
cat managed/local-message/message.txt
요약
requirements.yml을 통해 로컬 역할을 패키징하고 설치했으며, 설치된 컬렉션 콘텐츠를 검사하고 플레이북에서 설치된 역할을 적용해 보았습니다.


