Instalar Roles e Content Collections

AnsibleBeginner
Pratique Agora

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.