Meistern Sie essenzielle Ad-Hoc-Befehle für schnelle Ansible-Aufgaben
Verwenden Sie Ansible-Ad-hoc-Befehle für schnelle Überprüfungen, einmalige Korrekturen, Dateiänderungen und Faktenabfragen, ohne ein Playbook schreiben zu müssen.
Beherrschung essenzieller Ad-hoc-Befehle für schnelle Ansible-Aufgaben
Ansible-Ad-hoc-Befehle ermöglichen es Ihnen, eine schnelle Aufgabe auf einem einzelnen Host oder einer gesamten Gruppe auszuführen. Sie sind nützlich, wenn Sie Zugriff testen, Speicherplatz überprüfen, eine Datei kopieren, einen Dienst neu starten oder Fakten abfragen müssen, ohne zuerst ein Playbook zu schreiben.
Sie sind kein Ersatz für Playbooks. Verwenden Sie sie für sofortige Arbeiten und verschieben Sie wiederholte oder riskante Aufgaben in versionierte Automatisierung.
Grundlegende Befehlsstruktur
Ein Ad-hoc-Befehl folgt diesem Schema:
ansible <pattern> -m <module_name> -a "<module_arguments>" [options]
Das Host-Muster wählt Inventarziele aus. Das Modul bestimmt, was Ansible tut. Die Argumente übergeben modulspezifische Werte.
Häufige Optionen sind:
-i <inventory>oder--inventory <inventory>: Verwenden Sie eine bestimmte Inventardatei oder -quelle.-u <user>oder--user <user>: Verbinden Sie sich als bestimmter Remote-Benutzer.-boder--become: Verwenden Sie Privilegieneskalation, normalerweise sudo.-koder--ask-pass: Fragen Sie nach dem SSH-Passwort.-Koder--ask-become-pass: Fragen Sie nach dem sudo-Passwort.--limit <subset>: Schränken Sie die ausgewählten Hosts weiter ein.
Wenn Sie -i nicht übergeben, verwendet Ansible sein konfiguriertes Inventar. Auf vielen Systemen ist das /etc/ansible/hosts, aber Ihre ansible.cfg kann das ändern.
Zugriff mit ping testen
Das ping-Modul sendet keine ICMP-Echo-Pakete. Es verbindet sich über den normalen Ansible-Transport, führt ein kleines Modul auf dem Ziel aus und erwartet pong zurück.
ansible all -m ping
Für eine Gruppe:
ansible webservers -m ping
Ein erfolgreiches Ergebnis sieht so aus:
web01.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
Wenn dies fehlschlägt, beheben Sie Inventar, DNS, SSH-Schlüssel, Remote-Benutzer, sudo-Einstellungen oder Python-Verfügbarkeit, bevor Sie Aufgaben auf höherer Ebene beheben.
Einfache Befehle mit command ausführen
Das command-Modul führt ein Programm direkt auf dem Remote-Host aus. Es ruft keine Shell auf, daher funktionieren Pipes, Umleitungen, Glob-Erweiterungen und $VARIABLE-Erweiterungen nicht wie in Ihrem Terminal.
Uptime prüfen:
ansible webservers -m command -a "uptime"
Speichernutzung prüfen:
ansible all -m command -a "df -h"
Ein geschütztes Verzeichnis mit sudo auflisten:
ansible dbservers -m command -a "ls -l /var/log" --become
Verwenden Sie command zuerst, wenn Sie keine Shell-Funktionen benötigen. Es ist einfacher zu durchschauen und vermeidet versehentliche Shell-Interpretation.
shell nur verwenden, wenn Sie Shell-Funktionen benötigen
Das shell-Modul führt den Befehl über eine Shell auf dem Remote-Host aus. Verwenden Sie es für Pipes, Umleitungen, Variablenexpansion und Shell-Bedingungen.
Die größten Log-Verzeichnisse finden:
ansible databases -m shell -a "du -sh /var/log/* | sort -rh | head -n 5"
Eine Remote-Umgebungsvariable prüfen:
ansible all -m shell -a "printf '%s\n' \"$PATH\""
Seien Sie vorsichtig mit dynamischen Eingaben. Wenn benutzerbereitgestellte Werte ohne Anführungszeichen und Validierung in einen Shell-Befehl eingefügt werden, können Sie einen Befehlsinjektionsfehler erzeugen.
Für Dateibearbeitungen bevorzugen Sie ein zweckgebautes Modul anstelle von Shell-Umleitungen. Fügen Sie beispielsweise eine verwaltete Zeile mit lineinfile hinzu:
ansible webservers -m lineinfile -a "path=/etc/app/app.conf line='feature_enabled=true' create=yes" --become
Das ist sicherer und wiederholbarer als das Anhängen mit echo ... >> datei.
Dateien mit copy kopieren
Das copy-Modul überträgt Dateien von Ihrem Kontrollknoten zu verwalteten Hosts.
ansible webservers -m copy -a "src=./myscript.sh dest=/tmp/myscript.sh mode=0755"
Eine Konfigurationsdatei kopieren, die Root-Besitz erfordert:
ansible all -m copy -a "src=./app.conf dest=/etc/app/app.conf owner=root group=root mode=0644" --become
Wenn das Ziel bereits denselben Inhalt und dieselben Metadaten hat, meldet Ansible keine Änderung.
Pfade mit file verwalten
Verwenden Sie das file-Modul, um Verzeichnisse zu erstellen, Pfade zu entfernen, Besitzer und Berechtigungen zu setzen oder symbolische Links zu erstellen.
Ein Verzeichnis erstellen:
ansible appservers -m file -a "path=/opt/my_app state=directory mode=0755 owner=app group=app" --become
Eine alte Datei entfernen:
ansible host1 -m file -a "path=/tmp/old_file.txt state=absent"
Einen symbolischen Link erstellen:
ansible appservers -m file -a "src=/opt/my_app/releases/current dest=/opt/my_app/current state=link"
Fakten mit setup sammeln
Das setup-Modul sammelt Fakten über einen Host, einschließlich Betriebssystem, Netzwerk, CPU, Speicher und Gerätedetails.
Alle Fakten von einem Host sammeln:
ansible webserver1 -m setup
Fakten filtern, wenn Sie nur einen kleinen Ausschnitt benötigen:
ansible all -m setup -a "filter=ansible_distribution*"
Die Ausgabe kann groß sein, daher hält das Filtern die Fehlersuche lesbar.
Ad-hoc-Befehle oder Playbooks wählen
Verwenden Sie Ad-hoc-Befehle für schnelle Überprüfungen und einmalige Aufgaben:
- Konnektivität mit
pingtesten. - Zustand mit
commandprüfen. - Eine bekannte Datei mit
copykopieren. - Einen Pfad mit
fileerstellen oder entfernen. - Fakten während der Fehlersuche sammeln.
Verwenden Sie Playbooks, wenn die Aufgabe wiederholt wird, mehrere Schritte umfasst, von Teammitgliedern überprüft wird oder riskant genug ist, dass Sie Versionskontrolle und vorhersagbare Struktur wünschen.
Sicherheitsprüfungen vor der Ausführung
Überprüfen Sie das Host-Muster, bevor Sie etwas Zerstörerisches ausführen:
ansible webservers --list-hosts
Verwenden Sie --limit, wenn Sie einen kleineren Wirkungskreis wünschen:
ansible all --limit web01.example.com -m ping
Denken Sie daran, dass command und shell nicht automatisch idempotent sind. Ein Befehl wie useradd deploy kann beim zweiten Mal fehlschlagen, es sei denn, Sie schreiben ihn defensiv. Module wie user, file, copy und lineinfile bieten normalerweise sichereres Wiederholungsverhalten.
Fazit
Ansible-Ad-hoc-Befehle eignen sich am besten für schnelle, gezielte Operationen. Beginnen Sie mit ping, verwenden Sie command für einfache Überprüfungen, reservieren Sie shell für echte Shell-Syntax und bevorzugen Sie Module wie copy, file, lineinfile und setup, wenn sie zur Aufgabe passen.