Da documentação Ansible :
Delegação Na verdade, isso não é específico para atualizações contínuas, mas é frequente nesses casos.
Se você deseja executar uma tarefa em um host com referência a outros hosts, use a palavra-chave 'delegate_to' em uma tarefa. Isso é ideal para colocar nós em um pool de carga equilibrada ou removê-los. Também é muito útil para controlar janelas de interrupção. Esteja ciente de que não faz sentido delegar todas as tarefas, depurar, adicionar_host, incluir etc. sempre ser executado no controlador. Usar isso com a palavra-chave 'serial' para controlar o número de hosts em execução ao mesmo tempo também é uma boa idéia:
---
- 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
Esses comandos serão executados no 127.0.0.1, que é a máquina executando o Ansible. Há também uma sintaxe abreviada que você pode usar por tarefa: 'local_action'. Aqui está o mesmo manual acima, mas usando a sintaxe abreviada para delegar 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 }}
Um padrão comum é usar uma ação local para chamar 'rsync' para copiar recursivamente os arquivos nos servidores gerenciados. Aqui está um exemplo:
---
# ...
tasks:
- name: recursively copy files from management server to target
local_action: command rsync -a /path/to/files {{ inventory_hostname }}:/path/to/target/
Observe que você deve ter chaves SSH sem senha ou um agente ssh configurado para que isso funcione; caso contrário, o rsync precisará solicitar uma senha.
sudo: no
no cenário de delegação #