Erstellen einer wiederverwendbaren Rolle für die Dateiauflistung
In diesem Schritt lernen wir, wie man eine Ansible-Rolle für die Dateiauflistung erstellt. Rollen sind eine Möglichkeit, Playbooks zu organisieren und wiederverwendbarer zu machen. Dies ist besonders nützlich, wenn Sie dieselbe Aufgabe in mehreren Playbooks oder Projekten ausführen müssen.
Verstehen von Ansible-Rollen
Eine Ansible-Rolle ist eine Reihe von Aufgaben, Variablen, Dateien, Vorlagen und anderen Ressourcen, die in einer Standardverzeichnisstruktur zusammengefasst sind. Rollen erleichtern die Wiederverwendung von Code und dessen Weitergabe an andere.
Die Standardverzeichnisstruktur für eine Rolle sieht so aus:
roles/
rolename/
tasks/ ## Hauptaufgaben für die Rolle
handlers/ ## Handler, die durch Aufgaben ausgelöst werden
defaults/ ## Standardvariablen
vars/ ## Rollenvariablen
files/ ## Statische Dateien
templates/ ## Vorlagen
meta/ ## Metadaten für die Rolle
Erstellen einer Dateiauflistungsrolle
Erstellen wir eine Rolle für die Auflistung von Dateien im Long-Format:
- Erstellen Sie zuerst die Verzeichnisstruktur für unsere Rolle:
cd ~/project/ansible-lab
mkdir -p roles/file_lister/tasks
- Erstellen Sie die Hauptaufgabendatei für unsere Rolle:
cd ~/project/ansible-lab
- Navigieren Sie im Explorer-Panel zu
~/project/ansible-lab/roles/file_lister/tasks
.
- Klicken Sie mit der rechten Maustaste und wählen Sie "New File" (Neue Datei).
- Benennen Sie die Datei
main.yml
.
- Fügen Sie den folgenden Inhalt hinzu:
---
## 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))
Diese Rolle:
- Findet Dateien in einem angegebenen Verzeichnis basierend auf Parametern.
- Zeigt die Dateien entweder im Long-Format oder nur die Pfade an.
- Verwendet Standardwerte für Parameter, wenn diese nicht angegeben sind.
Verwenden unserer Rolle in einem Playbook
Erstellen wir nun ein Playbook, das unsere neue Rolle verwendet:
- Navigieren Sie im Explorer-Panel zum Verzeichnis
~/project/ansible-lab
.
- Klicken Sie mit der rechten Maustaste und wählen Sie "New File" (Neue Datei).
- Benennen Sie die Datei
use_role.yml
.
- Fügen Sie den folgenden Inhalt hinzu:
---
- name: Use file listing role
hosts: local
roles:
- role: file_lister
vars:
path: "/etc"
patterns: "*.conf"
file_type: "file"
show_details: true
Dieses Playbook:
- Wird auf dem lokalen Host ausgeführt.
- Verwendet unsere Rolle
file_lister
.
- Legt Variablen für die Rolle fest, um ihr Verhalten anzupassen.
Führen wir das Playbook aus:
cd ~/project/ansible-lab
ansible-playbook use_role.yml
Sie sollten eine Ausgabe sehen, die die Details aller .conf
-Dateien im Verzeichnis /etc
anzeigt.
Anpassen von Rollenvariablen
Einer der Vorteile von Rollen ist, dass wir ihr Verhalten einfach anpassen können, indem wir die Variablen ändern. Erstellen wir ein weiteres Playbook, das unsere Rolle mit anderen Parametern verwendet:
- Klicken Sie im Explorer-Panel mit der rechten Maustaste und wählen Sie "New File" (Neue Datei).
- Benennen Sie die Datei
custom_listing.yml
.
- Fügen Sie den folgenden Inhalt hinzu:
---
- name: Custom file listing
hosts: local
roles:
- role: file_lister
vars:
path: "/home/labex"
patterns: "*.yml"
file_type: "file"
show_details: false
Dieses Playbook:
- Verwendet unsere Rolle
file_lister
.
- Legt fest, dass im Verzeichnis
/home/labex
gesucht werden soll.
- Filtert nach YAML-Dateien (*.yml).
- Zeigt nur Dateipfade an (keine vollständigen Details).
Führen wir das Playbook aus:
ansible-playbook custom_listing.yml
Sie sollten eine Liste aller YAML-Dateien im Verzeichnis /home/labex
sehen, ohne die detaillierten Informationen.
Erweiterte Verwendung: Erstellen eines Berichts
Erstellen wir abschließend ein fortgeschritteneres Playbook, das unsere Rolle verwendet, um einen Bericht über Dateien zu generieren:
- Klicken Sie im Explorer-Panel mit der rechten Maustaste und wählen Sie "New File" (Neue Datei).
- Benennen Sie die Datei
generate_report.yml
.
- Fügen Sie den folgenden Inhalt hinzu:
---
- 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 }}"
Dieses Playbook:
- Findet
.conf
-Dateien im Verzeichnis /etc
.
- Erstellt eine Textdatei mit einem Header.
- Fügt Informationen über jede Datei an den Bericht an.
- Zeigt den Speicherort des Berichts an.
Führen wir das Playbook aus:
ansible-playbook generate_report.yml
Nachdem Sie das Playbook ausgeführt haben, können Sie den Bericht anzeigen:
cat ~/project/ansible-lab/file_report.txt
Sie sollten einen formatierten Bericht sehen, der alle .conf
-Dateien im Verzeichnis /etc
auflistet.