Rollen und Content-Collections installieren

AnsibleBeginner
Jetzt üben

Einführung

Ansible-Inhalte können aus Rollen und Collections stammen. In eingeschränkten Laborumgebungen sind lokale Inhaltsarchive sicherer als Downloads aus dem Internet.

In diesem Lab verpacken Sie eine lokale Rolle, installieren diese über eine Anforderungsdatei, untersuchen vorinstallierte Collections und wenden die installierte Rolle an.

Ein Projekt zur Content-Installation erstellen

In diesem Schritt erstellen Sie ein Projekt mit Verzeichnissen für die lokale Inhaltsquelle, die installierte Rolle, das Playbook und die Ausgabedateien.

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

Dieses Lab trennt die Rollenquelle vom installierten Rolleninhalt. vendor_src/local_message repräsentiert Inhalte, die Sie erhalten oder erstellt haben, während roles/local_message die installierte Kopie darstellt, die Ansible tatsächlich lädt.

Eine lokale Rollenquelle erstellen

In diesem Schritt erstellen Sie eine kleine Rollenquelle außerhalb des installierten roles-Verzeichnisses. Dies simuliert den Erhalt von Rolleninhalten aus einer vertrauenswürdigen Quelle. Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück. Dies sorgt für Stabilität der Befehle, auch wenn LabEx jeden Schritt separat ausführt.

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

Die Rollenquelle hat die gleiche Grundstruktur wie eine normale Rolle: Aufgabenlogik unter tasks/main.yml und Rollenmetadaten unter meta/main.yml. Die Aufgabe schreibt eine sichtbare Nachricht, damit Sie überprüfen können, ob die installierte Rolle ausgeführt wurde.

tar -czf vendor_src/local_message.tar.gz -C vendor_src local_message

Das Archiv simuliert ein Offline-Rollenpaket. Die Verwendung eines lokalen Archivs hält das Lab deterministisch und vermittelt gleichzeitig den requirements.yml-Workflow.

ls -l vendor_src/local_message.tar.gz

Die Rolle aus den Anforderungen installieren

In diesem Schritt schreiben Sie eine Rollen-Anforderungsdatei, die auf das lokale Archiv verweist, und installieren diese in roles. Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück.

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

Die file://-Quelle weist ansible-galaxy auf das lokale Archiv hin. Dies entspricht dem Prinzip einer Remote-Quelle, jedoch ohne Abhängigkeit von einem Netzwerkzugriff.

ansible-galaxy role install -r requirements.yml -p roles --force

Die Option -r liest die Anforderungen, -p roles wählt das Installationsverzeichnis aus und --force macht den Befehl wiederholbar, falls Sie das Lab erneut ausführen.

find roles/local_message -maxdepth 2 -type f -print

Sie sollten die tasks/main.yml und meta/main.yml der installierten Rolle sehen. Das Playbook wird den installierten Rollenpfad verwenden, nicht das ursprüngliche vendor_src-Verzeichnis.

Installierte Collection-Inhalte untersuchen

In diesem Schritt untersuchen Sie eine installierte Collection. Das RHEL10-Image enthält bereits gängige Collections, sodass dieses Lab ohne Internet-Download auskommt und dennoch die Erkennung von Collections demonstriert. Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück.

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"

Collections verpacken Module unter einem Namespace. Hier bedeutet ansible.posix.acl das acl-Modul aus der ansible.posix-Collection, und ansible-doc beweist, dass Ansible seine Dokumentation lokal finden kann.

Die installierte Rolle anwenden

In diesem Schritt wenden Sie die aus den Anforderungen installierte Rolle an. Dies beweist, dass Ansible den installierten Rolleninhalt finden und ausführen kann. Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück.

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

Das Playbook referenziert nur local_message, da roles_path auf das Installationsverzeichnis zeigt. Dadurch bleibt das Playbook unabhängig vom Speicherort des Archivs.

ansible-playbook playbooks/use-installed-role.yml | tee reports/installed-role-run.txt

Der Durchlauf sollte mit failed=0 enden und die Nachrichtendatei durch die Aufgabe der installierten Rolle erstellen.

cat managed/local-message/message.txt

Zusammenfassung

Sie haben eine lokale Rolle über requirements.yml verpackt und installiert, installierte Collection-Inhalte untersucht und die installierte Rolle über ein Playbook angewendet.