Introdução
O conteúdo do Ansible pode ser proveniente de roles e collections. Em ambientes de laboratório restritos, arquivos de conteúdo locais são mais seguros do que downloads da internet.
Neste laboratório, você irá empacotar uma role local, instalá-la por meio de um arquivo de requisitos, inspecionar collections pré-instaladas e aplicar a role instalada.
Criar um Projeto de Instalação de Conteúdo
Nesta etapa, você criará um projeto com a fonte de conteúdo local, a role instalada, o playbook e os diretórios de saída.
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
Este laboratório separa a fonte da role do conteúdo da role instalada. vendor_src/local_message representa o conteúdo que você recebeu ou criou, enquanto roles/local_message será a cópia instalada que o Ansible realmente carrega.
Construir uma Fonte de Role Local
Nesta etapa, você criará uma pequena fonte de role fora do diretório roles instalado. Isso simula o recebimento de conteúdo de role de uma fonte confiável.
Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.
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
A fonte da role tem a mesma estrutura básica de uma role normal: lógica de tarefas em tasks/main.yml e metadados da role em meta/main.yml. A tarefa escreve uma mensagem visível para que você possa comprovar que a role instalada foi executada.
tar -czf vendor_src/local_message.tar.gz -C vendor_src local_message
O arquivo compactado simula um pacote de role offline. Usar um arquivo local mantém o laboratório determinístico enquanto ainda ensina o fluxo de trabalho do requirements.yml.
ls -l vendor_src/local_message.tar.gz
Instalar a Role a partir dos Requisitos
Nesta etapa, você escreverá um arquivo de requisitos de role que aponta para o arquivo local e o instalará em roles.
Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.
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
A fonte file:// aponta o ansible-galaxy para o arquivo local. Esta é a mesma ideia de usar uma fonte remota, mas sem depender de acesso à rede.
ansible-galaxy role install -r requirements.yml -p roles --force
A opção -r lê os requisitos, -p roles escolhe o diretório de instalação e --force torna o comando repetível caso você precise refazer o laboratório.
find roles/local_message -maxdepth 2 -type f -print
Você deverá ver os arquivos tasks/main.yml e meta/main.yml da role instalada. O playbook usará o caminho da role instalada, não o diretório original vendor_src.
Inspecionar o Conteúdo da Collection Instalada
Nesta etapa, você inspecionará uma collection instalada. A imagem do RHEL10 já inclui collections comuns, portanto, este laboratório evita o download pela internet enquanto ainda demonstra a descoberta de collections. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.
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"
As collections empacotam módulos sob um namespace. Aqui, ansible.posix.acl significa o módulo acl da collection ansible.posix, e o ansible-doc comprova que o Ansible consegue encontrar sua documentação localmente.
Aplicar a Role Instalada
Nesta etapa, você aplicará a role instalada a partir dos requisitos. Isso prova que o Ansible consegue encontrar e executar o conteúdo da role instalada. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.
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
O playbook referencia apenas local_message porque o roles_path aponta para o diretório de instalação. Isso mantém o playbook independente da localização do arquivo original.
ansible-playbook playbooks/use-installed-role.yml | tee reports/installed-role-run.txt
A execução deve terminar com failed=0 e criar o arquivo de mensagem a partir da tarefa da role instalada.
cat managed/local-message/message.txt
Resumo
Você empacotou e instalou uma role local por meio do arquivo requirements.yml, inspecionou o conteúdo de uma collection instalada e aplicou a role instalada a partir de um playbook.


