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:
---
- hosts: webservers
serial: 5
tasks:
- name: take out of load balancer pool
command: /usr/bin/take_out_of_pool {{ inventory_hostname }}
delegate_to: 127.0.0.1
- name: actual steps would go here
yum:
name: acme-web-stack
state: latest
- name: add back to load balancer pool
command: /usr/bin/add_back_to_pool {{ inventory_hostname }}
delegate_to: 127.0.0.1
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:
---
# ...
tasks:
- name: take out of load balancer pool
local_action: command /usr/bin/take_out_of_pool {{ inventory_hostname }}
# ...
- name: add back to load balancer pool
local_action: command /usr/bin/add_back_to_pool {{ inventory_hostname }}
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:
---
# ...
tasks:
- name: recursively copy files from management server to target
local_action: command rsync -a /path/to/files {{ inventory_hostname }}:/path/to/target/
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.
sudo: no
im Delegationsszenario