จะเข้าถึงตัวแปรโฮสต์ของโฮสต์อื่นด้วย Ansible ได้อย่างไร


45

[collectors]สมมติว่ามีโฮสต์ที่เก็บรวบรวมข้อมูลบางอย่างและมันเป็นในกลุ่ม [reporters]ฉันยังมีเจ้าภาพในกลุ่ม ดังนั้นฉันต้องการตั้งค่าตัวแปรให้ผู้สื่อข่าวจากgroups['collectors'][0]ที่อยู่ IP แต่ playbook สำหรับการตั้งค่านักข่าวไม่ทำงานใน[collectors]กลุ่มดังนั้นข้อเท็จจริงสำหรับโฮสต์นี้จะไม่ถูกรวบรวม มีวิธีที่จะไม่เข้ารหัสที่อยู่ IP หรือไม่

คำตอบ:


87

คุณสามารถเข้าถึงข้อเท็จจริง / ตัวแปรคลังโฆษณาได้โดยทำสิ่งนี้:

{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}

หรือถ้าคุณต้องการที่จะทำมันผ่านดัชนีในกลุ่ม:

{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}

เคล็ดลับสำคัญคือคุณต้องรวบรวมข้อเท็จจริงสำหรับโฮสต์ / กลุ่มทั้งหมดที่คุณสนใจดังนั้นคุณต้องการแก้ไข playbook ของคุณที่ทำงานกับกลุ่มนักข่าวเพื่อรวมงาน no-op (dummy) ที่ใช้ ไปยังกลุ่มนักสะสม นั่นจะทำให้ Ansible รวบรวมข้อเท็จจริงเกี่ยวกับโฮสต์นักสะสมเพื่อให้พวกเขาสามารถเข้าถึงได้จากกลุ่มนักข่าว ดังนั้นคุณอาจต้องการเพิ่มบางสิ่งเช่นนี้ไว้ด้านบนของ playbook ผู้รายงานของคุณ:

- hosts: collectors
  name: Gather facts from collectors
  tasks: [ ]

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

แก้ไข # 1

มันเกิดขึ้นกับฉันที่ฉันควรจะพูดถึงว่าในรุ่น 1.8 ของ Ansible มีคุณสมบัติแคชจริงที่มีอยู่ในขณะนี้ การแคชข้อมูลจริงอาศัยเซิร์ฟเวอร์ Redis เพื่อจัดเก็บข้อเท็จจริงระหว่าง Playbook ที่รัน ด้วยการเปิดใช้งาน playbook หนึ่งสามารถอ้างอิงข้อเท็จจริงที่ playbook อื่นได้รับมาก่อนหน้านี้ได้ ตัวอย่างเอกสาร Ansible ให้:

ลองนึกภาพตัวอย่างเช่นโครงสร้างพื้นฐานขนาดใหญ่ที่มีโฮสต์นับพัน การแคชข้อมูลจริงสามารถกำหนดค่าให้ทำงานทุกคืนได้ แต่การกำหนดค่าเซิร์ฟเวอร์ขนาดเล็กสามารถเรียกใช้แบบเฉพาะกิจหรือเป็นระยะตลอดทั้งวัน ด้วยการเปิดใช้งานการแคชจริงมันไม่จำเป็นที่จะต้อง“ กดปุ่ม” เซิร์ฟเวอร์ทั้งหมดเพื่ออ้างอิงตัวแปรและข้อมูลเกี่ยวกับพวกเขา


2
มีวิธีตั้งค่าการเชื่อมโยงดัชนีเป็นตัวแปรหรือไม่? ในตัวอย่าง ansible localhost --extra-vars "metamorphosis_ip = 172.16.3.73" -a "echo {{hostvars [{{metamorphosis_ip}}] ['inv_domain']}}"
corretge

หากต้องการเพิ่มคำตอบข้างต้นให้แน่ใจว่าคุณอ้างอิงคำถามที่พบบ่อยAnsibleที่นี่: docs.ansible.com/ansible/faq.htmlซึ่งอธิบายสิ่งต่าง ๆ โดยละเอียดเช่นวนลูปมากกว่ากลุ่มโฮสต์หรือตั้งค่าตัวแปรเพื่อรับโฮสต์ที่เฉพาะเจาะจง ในกลุ่ม
einarc

ขอบคุณสำหรับแนวคิดของการดึงข้อมูลข้อเท็จจริงจากโหนดที่มีรายการงานว่าง
pedz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.