Einführung
Ansible ist ein modernes Konfigurationsverwaltungstool, das die Aufgabe erleichtert, entfernte Server einzurichten und zu warten.
Dieser Leitfaden im Spickzettelstil bietet eine schnelle Referenz für Befehle und Praktiken, die häufig bei der Arbeit mit Ansible verwendet werden. Für einen Überblick über Ansible und Anleitungen zur Installation und Konfiguration empfehlen wir unseren Leitfaden „So installieren und konfigurieren Sie Ansible unter Ubuntu 20.04“.
So verwenden Sie diesen Leitfaden:
- Dieser Leitfaden ist im Spickzettel-Format mit eigenständigen Befehlszeilen-Schnipseln.
- Springen Sie zu dem Abschnitt, der für die Aufgabe relevant ist, die Sie abschließen möchten.
- Wenn Sie
hervorgehobenen Text
in den Befehlen dieses Leitfadens sehen, beachten Sie bitte, dass sich dieser Text auf Hosts, Benutzernamen und IP-Adressen aus Ihrer eigenen Bestandsliste beziehen sollte.
Ansible-Glossar
Die folgenden spezifischen Ansible-Begriffe werden in diesem Leitfaden weitgehend verwendet:
- Steuerungsrechner / -knoten: Ein System, auf dem Ansible installiert und konfiguriert ist, um Verbindungen herzustellen und Befehle auf Knoten auszuführen.
- Knoten: Ein von Ansible gesteuerter Server.
- Inventardatei: Eine Datei, die Informationen über die von Ansible gesteuerten Server enthält, normalerweise unter
/etc/ansible/hosts
zu finden. - Playbook: Eine Datei, die eine Reihe von Aufgaben enthält, die auf einem entfernten Server ausgeführt werden sollen.
- Rolle: Eine Sammlung von Playbooks und anderen Dateien, die für ein Ziel wie die Installation eines Webservers relevant sind.
- Spiel: Ein vollständiger Ansible-Durchlauf. Ein Spiel kann mehrere Playbooks und Rollen haben, die aus einem einzelnen Playbook eingefügt werden, das als Einstiegspunkt fungiert.
Wenn Sie ein Beispiel für diese Befehle in der Praxis sehen möchten, lesen Sie unseren Leitfaden Wie man Ansible verwendet, um die initiale Servereinrichtung unter Ubuntu 20.04 zu automatisieren. Sie benötigen mindestens einen entfernten Server, der als Knoten verwendet wird.
Testen der Konnektivität zu Knoten
Um zu testen, ob Ansible in der Lage ist, Befehle und Playbooks auf Ihren Knoten auszuführen, können Sie den folgenden Befehl verwenden:
Das ping
-Modul wird testen, ob Sie gültige Anmeldeinformationen zum Verbinden mit den in Ihrer Inventardatei definierten Knoten haben, zusätzlich wird getestet, ob Ansible Python-Skripte auf dem entfernten Server ausführen kann. Eine Antwort mit Pong bedeutet, dass Ansible bereit ist, Befehle und Playbooks auf diesem Knoten auszuführen.
Verbindung als anderer Benutzer
Standardmäßig versucht Ansible, sich als Ihr aktueller Systembenutzer mit dem entsprechenden SSH-Schlüsselpaar mit den Knoten zu verbinden. Um sich als anderer Benutzer zu verbinden, fügen Sie dem Befehl die Option -u
und den Namen des beabsichtigten Benutzers hinzu:
Dasselbe gilt für ansible-playbook
:
Verwendung eines benutzerdefinierten SSH-Schlüssels
Wenn Sie einen benutzerdefinierten SSH-Schlüssel verwenden, um sich mit den entfernten Servern zu verbinden, können Sie ihn zur Ausführungszeit mit der Option --private-key
angeben:
Diese Option ist auch für ansible-playbook
gültig:
Verwendung der authentifizierungsbasierten Passwortmethode
Wenn Sie die Authentifizierung auf der Basis von Passwörtern verwenden müssen, um sich mit den Knoten zu verbinden, müssen Sie dem Ansible-Befehl die Option --ask-pass
hinzufügen.
Dadurch fordert Ansible Sie auf, das Passwort des Benutzers auf dem entfernten Server einzugeben, mit dem Sie versuchen, sich zu verbinden:
Diese Option ist auch für ansible-playbook
gültig:
Bereitstellung des sudo
-Passworts
Wenn der Remote-Benutzer ein Passwort angeben muss, um sudo
-Befehle auszuführen, können Sie die Option --ask-become-pass
zu Ihrem Ansible-Befehl hinzufügen. Dadurch werden Sie aufgefordert, das Passwort des Remote-Benutzers für sudo
einzugeben:
Diese Option ist auch für ansible-playbook
gültig:
Verwendung einer benutzerdefinierten Inventardatei
Die Standard-Inventardatei befindet sich normalerweise unter /etc/ansible/hosts
, aber Sie können auch die Option -i
verwenden, um beim Ausführen von Ansible-Befehlen und Playbooks auf benutzerdefinierte Inventardateien zu verweisen. Ansible unterstützt auch Inventarskripte zum Erstellen dynamischer Inventardateien, für den Fall, dass sich Ihr Inventar ändert, wenn Server häufig erstellt und gelöscht werden. Benutzerdefinierte Inventardateien sind nützlich, um projektbezogene Inventare einzurichten, die in Versionskontrollsystemen wie Git enthalten sein können:
Dieselbe Option ist für ansible-playbook
gültig:
Ausführen von Ad-hoc-Befehlen
Um einen Befehl auf einem Knoten auszuführen, verwenden Sie die Option -a
gefolgt vom Befehl, den Sie ausführen möchten, in Anführungszeichen.
Dies führt uname -a
auf allen Knoten in Ihrem Inventar aus:
Es ist auch möglich, Ansible-Module mit der Option -m
auszuführen. Der folgende Befehl würde das Paket vim
auf server1
aus Ihrem Inventar installieren:
Vor dem Ändern Ihrer Knoten können Sie eine Trockenübung durchführen, um vorherzusagen, wie die Server von Ihrem Befehl betroffen wären. Dies kann durch Hinzufügen der Option --check
erfolgen:
Ausführen von Playbooks
Um ein Playbook auszuführen und alle darin definierten Aufgaben auszuführen, verwenden Sie den Befehl ansible-playbook
:
Um die Standardoption hosts
im Playbook zu überschreiben und die Ausführung auf eine bestimmte Gruppe oder einen bestimmten Host zu beschränken, fügen Sie die Option -l
Ihrem Befehl hinzu:
Informationen über ein Play erhalten
Die Option --list-tasks
wird verwendet, um alle Aufgaben aufzulisten, die von einem Play ausgeführt würden, ohne Änderungen an den entfernten Servern vorzunehmen:
Ebenso ist es möglich, alle Hosts aufzulisten, die von einem Play betroffen wären, ohne Aufgaben auf den entfernten Servern auszuführen:
Sie können Tags verwenden, um die Ausführung eines Plays zu beschränken. Um alle verfügbaren Tags in einem Play aufzulisten, verwenden Sie die Option --list-tags
:
Ausführung des Playbooks steuern
Sie können die Option --start-at-task
verwenden, um einen neuen Einstiegspunkt für Ihr Playbook festzulegen. Ansible überspringt dann alles, was vor der angegebenen Aufgabe kommt, und führt den Rest des Plays ab diesem Punkt aus. Diese Option erfordert einen gültigen Aufgabennamen als Argument:
Um nur Aufgaben auszuführen, die bestimmten Tags zugeordnet sind, können Sie die Option --tags
verwenden. Wenn Sie beispielsweise nur Aufgaben ausführen möchten, die als nginx
oder mysql
getaggt sind, können Sie Folgendes verwenden:
Wenn Sie alle Aufgaben überspringen möchten, die unter bestimmten Tags stehen, verwenden Sie --skip-tags
. Der folgende Befehl würde myplaybook.yml
ausführen und alle Aufgaben überspringen, die als mysql
getaggt sind:
Verwendung von Ansible Vault zum Speichern sensibler Daten
Wenn Ihre Ansible-Playbooks sensible Daten wie Passwörter, API-Schlüssel und Anmeldeinformationen verarbeiten, ist es wichtig, diese Daten durch Verwendung eines Verschlüsselungsmechanismus sicher aufzubewahren. Ansible stellt ansible-vault
bereit, um Dateien und Variablen zu verschlüsseln.
Auch wenn es möglich ist, jede Ansible-Datendatei sowie Binärdateien zu verschlüsseln, ist es üblicher, ansible-vault
zum Verschlüsseln von Variablendateien zu verwenden, die sensible Daten enthalten. Nach dem Verschlüsseln einer Datei mit diesem Tool können Sie deren Inhalt nur ausführen, bearbeiten oder anzeigen, indem Sie das relevante Passwort angeben, das beim ersten Verschlüsseln der Datei definiert wurde.
Erstellen einer neuen verschlüsselten Datei
Sie können eine neue verschlüsselte Ansible-Datei erstellen mit:
Dieser Befehl führt die folgenden Aktionen aus:
- Zuerst werden Sie aufgefordert, ein neues Passwort einzugeben. Sie müssen dieses Passwort immer angeben, wenn Sie auf die Dateiinhalte zugreifen, sei es zum Bearbeiten, Anzeigen oder einfach zum Ausführen von Playbooks oder Befehlen unter Verwendung dieser Werte.
- Als nächstes öffnet es Ihren Standard-Befehlszeileneditor, damit Sie die Datei mit den gewünschten Inhalten füllen können.
- Zum Schluss, wenn Sie mit der Bearbeitung fertig sind, speichert
ansible-vault
die Datei als verschlüsselte Daten.
Verschlüsseln einer vorhandenen Ansible-Datei
Um eine vorhandene Ansible-Datei zu verschlüsseln, können Sie die folgende Syntax verwenden:
Dies fordert Sie auf, ein Passwort einzugeben, das Sie immer angeben müssen, wenn Sie auf die Datei credentials.yml
zugreifen.
Anzeigen des Inhalts einer verschlüsselten Datei
Wenn Sie den Inhalt einer Datei anzeigen möchten, die zuvor mit ansible-vault
verschlüsselt wurde und deren Inhalt Sie nicht ändern müssen, können Sie Folgendes verwenden:
Dies fordert Sie auf, das Passwort einzugeben, das Sie bei der ersten Verschlüsselung der Datei mit ansible-vault
ausgewählt haben.
Bearbeiten einer verschlüsselten Datei
Um den Inhalt einer Datei zu bearbeiten, die zuvor mit Ansible Vault verschlüsselt wurde, führen Sie Folgendes aus:
Dies fordert Sie auf, das Passwort einzugeben, das Sie beim ersten Verschlüsseln der Datei credentials.yml
mit ansible-vault
gewählt haben. Nach der Passwortprüfung wird Ihr Standard-Befehlszeilen-Editor mit dem unverschlüsselten Inhalt der Datei geöffnet, sodass Sie Ihre Änderungen vornehmen können. Wenn Sie fertig sind, können Sie die Datei wie gewohnt speichern und schließen, und die aktualisierten Inhalte werden als verschlüsselte Daten gespeichert.
Verschlüsselte Dateien entschlüsseln
Wenn Sie eine Datei dauerhaft in ihre unverschlüsselte Version zurücksetzen möchten, die zuvor mit ansible-vault
verschlüsselt wurde, können Sie dies mit dieser Syntax tun:
Dies fordert Sie auf, dasselbe Passwort einzugeben, das Sie verwendet haben, als Sie die Datei credentials.yml
zum ersten Mal mit ansible-vault
verschlüsselt haben. Nach der Passwortprüfung werden die Dateiinhalte als unverschlüsselte Daten auf die Festplatte gespeichert.
Die Verwendung mehrerer Tresorkennwörter
Ansible unterstützt mehrere Tresorkennwörter, die nach verschiedenen Tresor-IDs gruppiert sind. Dies ist nützlich, wenn Sie dedizierte Tresorkennwörter für verschiedene Umgebungen wie Entwicklung, Testen und Produktionsumgebungen haben möchten.
Um eine neue verschlüsselte Datei unter Verwendung einer benutzerdefinierten Tresor-ID zu erstellen, verwenden Sie die Option --vault-id
zusammen mit einem Label und dem Speicherort, an dem ansible-vault
das Kennwort für diesen Tresor finden kann. Das Label kann ein beliebiger Bezeichner sein, und der Speicherort kann entweder Prompt
sein, was bedeutet, dass der Befehl Sie auffordert, ein Kennwort einzugeben, oder ein gültiger Pfad zu einer Kennwortdatei.
Dies erstellt eine neue Tresor-ID mit dem Namen dev, die Prompt
als Passwortquelle verwendet. Durch Kombinieren dieser Methode mit Gruppenvariablen können Sie separate Ansible-Tresore für jede Anwendungsumgebung haben:
Wir haben dev und prod als Tresor-IDs verwendet, um zu demonstrieren, wie Sie separate Tresore pro Umgebung erstellen können, aber Sie können beliebig viele Tresore erstellen und jede beliebige Kennung als Tresor-ID verwenden.
Um diese Dateien anzuzeigen, zu bearbeiten oder zu entschlüsseln, müssen Sie dieselbe Tresor-ID und Quelle für das Kennwort zusammen mit dem ansible-vault
-Befehl angeben:
Verwendung einer Passwortdatei
Wenn Sie den Prozess der Bereitstellung von Servern mit Ansible mithilfe eines Tools eines Drittanbieters automatisieren müssen, benötigen Sie eine Möglichkeit, das Tresorpasswort bereitzustellen, ohne dazu aufgefordert zu werden. Dies können Sie durch Verwendung einer Passwortdatei mit ansible-vault
tun.
A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.
Um eine Passwortdatei mit ansible-vault
zu verwenden, müssen Sie den Pfad zu einer Passwortdatei angeben, wenn Sie eines der Tresor-Befehle ausführen:
Ansible macht keinen Unterschied zwischen Inhalten, die mit Prompt
oder einer Passwortdatei als Passwortquelle verschlüsselt wurden, solange das Eingabepasswort dasselbe ist. Dies bedeutet praktisch, dass es in Ordnung ist, eine Datei mit Prompt
zu verschlüsseln und später eine Passwortdatei zu verwenden, um dasselbe Passwort zu speichern, das mit der Methode Prompt
verwendet wurde. Das Gegenteil ist ebenfalls wahr: Sie können Inhalte mit einer Passwortdatei verschlüsseln und später die Methode Prompt
verwenden, indem Sie dasselbe Passwort angeben, wenn Sie von Ansible dazu aufgefordert werden.
Für erweiterte Flexibilität und Sicherheit können Sie anstelle Ihres Tresorpassworts, das in einer Klartextdatei gespeichert ist, ein Python-Skript verwenden, um das Passwort aus anderen Quellen zu erhalten. Das offizielle Ansible-Repository enthält ein paar Beispiele für Tresorskripte, die Sie als Referenz verwenden können, wenn Sie ein benutzerdefiniertes Skript erstellen, das den speziellen Anforderungen Ihres Projekts entspricht.
Ausführen eines Playbooks mit Daten, die über Ansible Vault verschlüsselt sind
Immer wenn Sie ein Playbook ausführen, das Daten verwendet, die zuvor über ansible-vault
verschlüsselt wurden, müssen Sie dem Playbook-Befehl das Vault-Passwort bereitstellen.
Wenn Sie die Standardoptionen verwendet haben und die Option prompt
als Passwortquelle beim Verschlüsseln der in diesem Playbook verwendeten Daten verwendet haben, können Sie die Option --ask-vault-pass
verwenden, um Ansible dazu zu veranlassen, Sie nach dem Passwort zu fragen:
Wenn Sie anstelle der Eingabeaufforderung für das Passwort eine Passwortdatei verwendet haben, sollten Sie stattdessen die Option --vault-password-file
verwenden:
Wenn Sie Daten verwenden, die unter einer Vault-ID verschlüsselt sind, müssen Sie dieselbe Vault-ID und dieselbe Passwortquelle angeben, die Sie beim ersten Verschlüsseln der Daten verwendet haben:
Wenn Sie eine Passwortdatei mit Ihrer Vault-ID verwenden, sollten Sie das Label gefolgt vom vollständigen Pfad zur Passwortdatei als Passwortquelle angeben:
Wenn Ihr Play mehrere Vaults verwendet, sollten Sie für jeden von ihnen einen --vault-id
-Parameter angeben, in keiner bestimmten Reihenfolge:
Fehlerbehebung
Wenn Sie beim Ausführen von Ansible-Befehlen und Playbooks auf Fehler stoßen, ist es eine gute Idee, die Ausgabeverbosity zu erhöhen, um mehr Informationen über das Problem zu erhalten. Sie können dies tun, indem Sie die Option -v
zum Befehl hinzufügen:
Wenn Sie mehr Details benötigen, können Sie -vvv
verwenden, um die Ausgabeverbosity zu erhöhen. Wenn Sie keine Verbindung zu den Remote-Knoten über Ansible herstellen können, verwenden Sie -vvvv
, um Verbindungsdebugging-Informationen zu erhalten:
Fazit
Dieser Leitfaden behandelt einige der häufigsten Ansible-Befehle, die Sie beim Bereitstellen von Servern verwenden können, wie z. B. das Ausführen von Remote-Befehlen auf Ihren Knoten und das Ausführen von Playbooks mit verschiedenen benutzerdefinierten Einstellungen.
Es gibt andere Befehlsvariationen und Flags, die für Ihren Ansible-Workflow nützlich sein können. Um einen Überblick über alle verfügbaren Optionen zu erhalten, können Sie den hilfe-Befehl verwenden:
Wenn Sie eine umfassendere Ansicht von Ansible und allen verfügbaren Befehlen und Funktionen wünschen, lesen Sie bitte die offizielle Ansible-Dokumentation.
Wenn Sie ein weiteres praktisches Beispiel für Ansible sehen möchten, lesen Sie unseren Leitfaden zur Verwendung von Ansible zur Installation und Einrichtung von Docker unter Ubuntu 20.04.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide