Dalla documentazione Ansible :
Delega Questo non è in realtà un aggiornamento in sequenza specifico, ma si presenta frequentemente in questi casi.
Se desideri eseguire un'attività su un host con riferimento ad altri host, utilizza la parola chiave "delegate_to" su un'attività. Questo è l'ideale per posizionare i nodi in un pool con bilanciamento del carico o per rimuoverli. È anche molto utile per controllare le finestre di interruzione. Tieni presente che non ha senso delegare tutte le attività, eseguire il debug, aggiungere_host, includere, ecc. Vengono sempre eseguiti sul controller. Anche usarlo con la parola chiave 'serial' per controllare il numero di host eseguiti contemporaneamente è una buona idea:
---
- 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
Questi comandi verranno eseguiti su 127.0.0.1, che è la macchina che esegue Ansible. C'è anche una sintassi abbreviata che puoi usare in base alle attività: 'local_action'. Ecco lo stesso playbook come sopra, ma usando la sintassi abbreviata per delegare a 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 }}
Un modello comune consiste nell'usare un'azione locale per chiamare "rsync" per copiare in modo ricorsivo i file sui server gestiti. Ecco un esempio:
---
# ...
tasks:
- name: recursively copy files from management server to target
local_action: command rsync -a /path/to/files {{ inventory_hostname }}:/path/to/target/
Nota che devi avere chiavi SSH senza passphrase o un agente ssh configurato perché funzioni, altrimenti rsync dovrà chiedere una passphrase.
sudo: no
nello scenario della delegazione