Ja, Sie können Befehle auf dem Ansible-Host ausführen. Sie können festlegen, dass alle Aufgaben in einem Spiel auf dem Ansible-Host ausgeführt werden, oder Sie können einzelne Aufgaben markieren, die auf dem Ansible-Host ausgeführt werden sollen.
Wenn Sie möchten , ein ganzes Spiel auf dem ansible Host laufen, dann angeben hosts: 127.0.0.1
und connection:local
im Spiel, zum Beispiel:
- name: a play that runs entirely on the ansible host
hosts: 127.0.0.1
connection: local
tasks:
- name: check out a git repository
git: repo=git://foosball.example.org/path/to/repo.git dest=/local/path
Weitere Informationen finden Sie unter Lokale Playbooks in der Ansible-Dokumentation.
Wenn Sie nur eine einzelne Aufgabe auf Ihrem Ansible-Host ausführen möchten, können Sie local_action
festlegen, dass eine Aufgabe lokal ausgeführt werden soll. Beispielsweise:
- name: an example playbook
hosts: webservers
tasks:
- ...
- name: check out a git repository
local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path
Weitere Informationen finden Sie unter Delegierung in der Ansible-Dokumentation.
Bearbeiten: Sie können vermeiden, dass Sie connection: local
Ihr Spiel eingeben müssen, indem Sie dies Ihrem Inventar hinzufügen:
localhost ansible_connection=local
(Hier würden Sie "localhost" anstelle von "127.0.0.1" verwenden, um auf das Spiel zu verweisen).
Bearbeiten: In neueren Versionen von ansible müssen Sie die obige Zeile nicht mehr zu Ihrem Inventar hinzufügen. Ansible geht davon aus, dass sie bereits vorhanden ist.
sudo: no
im Delegationsszenarioansible-playbook -K playbook.yml
wo -K für WurzelIch habe ein paar andere Möglichkeiten gefunden, wie Sie diese schreiben können, die meiner Meinung nach etwas besser lesbar sind.
ODER
quelle
shell
Modul.Ich möchte mitteilen, dass Ansible über die Shell auf localhost ausgeführt werden kann:
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
Dies kann für einfache Aufgaben oder zum praktischen Erlernen von Ansible hilfreich sein.
Das Beispiel für Code stammt aus diesem guten Artikel:
Ausführen eines Ansible-Playbooks in localhost
quelle
Sie können
delegate_to
Befehle auf Ihrem Ansible-Host (Admin-Host) ausführen, von dem aus Sie Ihr Ansible-Spiel ausführen. Beispielsweise:Löschen Sie eine Datei, wenn sie bereits auf dem Ansible-Host vorhanden ist:
Erstellen Sie eine neue Datei auf dem Ansible-Host:
quelle
become
für die Aufgabe zutrifft, wird es sich über Sudo und dergleichen beschweren. Dies kann direkt bei der Aufgabe geschehen oder an anderer Stelle vererbt werden.Um die Antwort von @gordon zu erweitern, hier ein Beispiel für lesbare Syntax und Argumentübergabe mit dem Shell- / Befehlsmodul (diese unterscheiden sich vom Git-Modul darin, dass erforderliche, aber frei formulierte Argumente vorhanden sind, wie von @ander angegeben).
quelle
Aus der Ansible- Dokumentation :
Delegierung Dies ist eigentlich kein rollendes Update-spezifisches Ereignis, tritt jedoch in diesen Fällen häufig auf.
Wenn Sie eine Aufgabe auf einem Host mit Bezug auf andere Hosts ausführen möchten, verwenden Sie das Schlüsselwort 'delegate_to' für eine Aufgabe. Dies ist ideal, um Knoten in einem Pool mit Lastenausgleich zu platzieren oder zu entfernen. Es ist auch sehr nützlich für die Steuerung von Ausfallfenstern. Beachten Sie, dass es nicht sinnvoll ist, alle Aufgaben zu delegieren, zu debuggen, add_host, include usw. immer auf dem Controller auszuführen. Es ist auch eine gute Idee, dies mit dem Schlüsselwort 'serial' zu verwenden, um die Anzahl der gleichzeitig ausgeführten Hosts zu steuern:
Diese Befehle werden auf 127.0.0.1 ausgeführt, dem Computer, auf dem Ansible ausgeführt wird. Es gibt auch eine Kurzsyntax, die Sie pro Aufgabe verwenden können: 'local_action'. Hier ist das gleiche Playbook wie oben, jedoch mit der Kurzsyntax für die Delegierung an 127.0.0.1:
Ein gängiges Muster besteht darin, mit einer lokalen Aktion 'rsync' aufzurufen, um Dateien rekursiv auf die verwalteten Server zu kopieren. Hier ist ein Beispiel:
Beachten Sie, dass Sie SSH-Schlüssel ohne Passphrase oder einen SSH-Agenten haben müssen, damit dies funktioniert. Andernfalls muss rsync nach einer Passphrase fragen.
quelle
Das Standardmodul ist das Befehlsmodul, daher
command
ist kein Schlüsselwort erforderlich.Wenn Sie einen Befehl mit erhöhten Berechtigungen ausgeben müssen, verwenden Sie ihn
-b
am Ende desselben Befehls.quelle
Sie können diesen Weg versuchen
quelle