0Pricing
Ansible Academy · บทเรียน

delegate_to และ run_once สำหรับการประสานงาน

เรียกใช้งานบนโฮสต์เดียวเพื่อจัดการหลายโฮสต์

delegate_to และ run_once สำหรับการประสานงาน เป็นบทเรียน Ansible Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ansible Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ansible Academy มีบทเรียนทั้งหมด 4 บทเรียน

งานไม่ได้ทำงานบนตำแหน่งที่คุณคิดเสมอไป

โดยค่าเริ่มต้น งานแต่ละงานจะทำงานบนโฮสต์เป้าหมายของตนเอง สำหรับการประสานงาน บางครั้งคุณจำเป็นต้องให้งานทำงานที่อื่นโดยสิ้นเชิง 🎯

ทำความรู้จัก delegate_to

คีย์เวิร์ด delegate_to จะสั่งให้งานทำงานบนโฮสต์อื่นที่ไม่ใช่โฮสต์ปัจจุบัน โดยยังคงใช้ตัวแปรของโฮสต์นั้น

- name: Add web node to load balancer
  community.general.haproxy:
    host: "{{ inventory_hostname }}"
    state: enabled
  delegate_to: lb01

กรณีใช้งานแบบคลาสสิก

ขณะวนลูปผ่านโหนดเว็บ ให้มอบหมายการเปลี่ยนแปลงของตัวกระจายโหลดไปยังโฮสต์ LB เพลย์ยังคงทำงานแยกตามแต่ละโหนด แต่การดำเนินการจะเกิดขึ้นบน LB

มอบหมายงานไปยัง localhost

ให้งานทำงานบนโหนดควบคุมของคุณโดยมอบหมายไปยัง localhost วิธีนี้เหมาะอย่างยิ่งสำหรับการเรียกใช้ API หรือส่งการแจ้งเตือนจากจุดเดียว

- name: Notify chat
  ansible.builtin.uri:
    url: "{{ webhook }}"
    method: POST
  delegate_to: localhost

ตัวแปรยังคงอยู่กับโฮสต์เดิม

การมอบหมายจะเปลี่ยนตำแหน่งที่งานทำงาน ไม่ได้เปลี่ยนว่าระบบจะเห็นข้อมูลระบบของโฮสต์ใด inventory_hostname ยังคงระบุชื่อเป้าหมายเดิม ไม่ใช่โฮสต์ที่รับมอบหมาย

ทำความรู้จัก run_once

คีย์เวิร์ด run_once จะสั่งให้งานทำงานเพียงครั้งเดียวสำหรับทั้งชุดการทำงาน ไม่ใช่ครั้งละหนึ่งครั้งต่อโฮสต์ Ansible จะเลือกโฮสต์แรกเพื่อดำเนินการ

- name: Run database migration
  ansible.builtin.command: ./migrate.sh
  run_once: true

เหตุใด run_once จึงสำคัญ

การดำเนินการบางอย่างต้องเกิดขึ้นเพียงครั้งเดียว เช่นการย้ายข้อมูลหรือการเลือกผู้นำ run_once ช่วยป้องกันไม่ให้ทุกโฮสต์ทำขั้นตอนที่ใช้ร่วมกันซ้ำ

ใช้ทั้งสองอย่างร่วมกัน

ใช้ run_once ร่วมกับ delegate_to เพื่อดำเนินการหนึ่งอย่างบนโฮสต์ที่เลือกไว้หนึ่งโฮสต์ เช่น เรียกใช้การย้ายข้อมูลจากโหนดแอปเพียงโหนดเดียว

- name: Migrate db once
  ansible.builtin.command: ./migrate.sh
  run_once: true
  delegate_to: app01

ผลลัพธ์ใช้ร่วมกัน

เมื่อใช้ run_once ผลลัพธ์ที่ลงทะเบียนไว้จะถูกใช้ร่วมกันในทุกโฮสต์ของชุดการทำงาน ทุกโฮสต์จะเห็นผลลัพธ์จากการทำงานเพียงครั้งเดียวนั้น

- ansible.builtin.command: cat /etc/version
  run_once: true
  register: ver

รวบรวมข้อมูลระบบจากโฮสต์ที่รับมอบหมาย

ใช้ delegate_facts หากต้องการให้ข้อมูลระบบที่รวบรวมได้ผูกกับโฮสต์ที่รับมอบหมายแทนโฮสต์ปัจจุบัน โดยค่าเริ่มต้นจะปิดใช้งาน

การประสานงาน ไม่ใช่แค่การกำหนดค่า

เมื่อใช้คีย์เวิร์ดเหล่านี้ร่วมกัน การกำหนดค่ารายโฮสต์จะกลายเป็นการประสานงานอย่างแท้จริง นั่นคือการประสานการดำเนินการหนึ่งอย่างทั่วทั้งกลุ่มเครื่องจากจุดเดียว

ตรวจสอบความเข้าใจอย่างรวดเร็ว

มาทบทวนคีย์เวิร์ดสำหรับการประสานงานเหล่านี้กัน

สรุปทบทวน

ใช้ delegate_to เพื่อให้งานทำงานบนโฮสต์อื่น และใช้ run_once เพื่อให้งานทำงานเพียงครั้งเดียวต่อชุดการทำงาน ซึ่งเป็นหัวใจของการประสานงาน ✅

คำถามที่พบบ่อย

บทเรียน “delegate_to และ run_once สำหรับการประสานงาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “delegate_to และ run_once สำหรับการประสานงาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ansible Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ansible Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “delegate_to และ run_once สำหรับการประสานงาน”

เรียกใช้งานบนโฮสต์เดียวเพื่อจัดการหลายโฮสต์ คุณปฏิบัติ Ansible Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ansible Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ansible Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “delegate_to และ run_once สำหรับการประสานงาน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Ansible Academy นี้ได้ไหม

ได้ บทเรียน Ansible Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทำระบบอุปกรณ์เครือข่ายอัตโนมัติด้วย cli_command
  2. delegate_to และ run_once สำหรับการประสานงาน
  3. ประสานชั้น Web, App และ DB
  4. นำโหนดออกจาก Load Balancer แล้วนำกลับเข้า
← กลับไปที่ Ansible Academy