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.
  • -b oder --become: Verwenden Sie Privilegieneskalation, normalerweise sudo.
  • -k oder --ask-pass: Fragen Sie nach dem SSH-Passwort.
  • -K oder --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 ping testen.
  • Zustand mit command prüfen.
  • Eine bekannte Datei mit copy kopieren.
  • Einen Pfad mit file erstellen 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.