จากเอกสาร Ansible :
การมอบหมายนี่ไม่ใช่การอัพเดทที่เฉพาะเจาะจงจริง ๆ
หากคุณต้องการทำงานกับโฮสต์หนึ่งโดยอ้างอิงกับโฮสต์อื่นให้ใช้คำสำคัญ 'delegate_to' ในงาน สิ่งนี้เหมาะสำหรับการวางโหนดในพูลโหลดบาลานซ์หรือลบออก นอกจากนี้ยังมีประโยชน์อย่างมากสำหรับการควบคุมหน้าต่างดับ โปรดระวังว่ามันไม่สมเหตุสมผลเลยที่จะมอบหมายงานทั้งหมด, debug, add_host, include และอื่น ๆ ให้ดำเนินการบนคอนโทรลเลอร์เสมอ การใช้สิ่งนี้กับคีย์เวิร์ด 'serial' เพื่อควบคุมจำนวนโฮสต์ที่ดำเนินการในครั้งเดียวก็เป็นแนวคิดที่ดีเช่นกัน:
---
- 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 นอกจากนี้ยังมีรูปแบบชวเลขที่คุณสามารถใช้งานแบบต่องาน: 'local_action' นี่คือ playbook เดียวกันกับข้างบน แต่ใช้ไวยากรณ์ชวเลขสำหรับการมอบหมายให้เป็น 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-agent ที่กำหนดค่าเพื่อให้ทำงานได้มิฉะนั้น rsync จะต้องขอรหัสผ่าน
sudo: no
ในสถานการณ์ตัวแทน