З відповідної документації :
Делегація Це насправді не актуальне специфічне оновлення, але часто виникає в цих випадках.
Якщо ви хочете виконати завдання на одному хості з посиланням на інші хости, використовуйте ключове слово 'delegate_to'. Це ідеально підходить для розміщення вузлів у збалансованому навантаженні басейні або їх видалення. Це також дуже корисно для управління вікнами відключення. Майте на увазі, що не має сенсу делегувати всі завдання, налагоджувати, add_host, включати тощо, завжди виконуватись на контролері. Використання цього ключового слова "серійний" для контролю кількості хостів, що виконуються одночасно, також є хорошою ідеєю:
---
- 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
Ці команди будуть працювати на 127.0.0.1, що є машиною, на якій працює Ansible. Існує також скорочений синтаксис, який ви можете використовувати на основі завдання: "локальна перевірка". Ось та сама книга з програмою, що і вище, але використовуючи скорочений синтаксис для делегування до 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 }}
Загальна схема - використовувати локальну дію для виклику "rsync" для рекурсивного копіювання файлів на керовані сервери. Ось приклад:
---
# ...
tasks:
- name: recursively copy files from management server to target
local_action: command rsync -a /path/to/files {{ inventory_hostname }}:/path/to/target/
Зауважте, що для цього вам потрібно налаштувати SSH-ключі без паролів або ssh-агент, інакше rsync потрібно буде просити парольну фразу.
sudo: no
сценарій делегації