Bạn có thể truy cập khá nhiều bất kỳ sự kiện / biến hàng tồn kho nào bằng cách thực hiện một cái gì đó như thế này:
{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}
hoặc, nếu bạn muốn làm điều đó thông qua một chỉ mục thành một nhóm:
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}
Thủ thuật lớn là bạn cần thu thập dữ kiện cho tất cả các máy chủ / nhóm bạn quan tâm. Vì vậy, bạn muốn sửa đổi sổ chơi của mình chạy theo nhóm phóng viên để bao gồm một nhiệm vụ không áp dụng (giả) được áp dụng đến nhóm người sưu tầm. Điều đó sẽ khiến Ansible thu thập thông tin về các máy chủ lưu trữ để có thể truy cập chúng từ nhóm phóng viên. Vì vậy, bạn có thể muốn thêm một cái gì đó như thế này vào đầu cuốn sách phóng viên của bạn:
- hosts: collectors
name: Gather facts from collectors
tasks: [ ]
Các dấu ngoặc rỗng về cơ bản có nghĩa là sẽ không có tác vụ nào được thực thi, nhưng điều này vẫn sẽ buộc Ansible thu thập các sự kiện về người thu thập để sau đó bạn có thể tham chiếu chúng trong các tác vụ mà bạn chạy với các phóng viên của mình.
Chỉnh sửa số 1
Tôi nhận thấy rằng tôi cũng nên đề cập rằng kể từ phiên bản 1.8 của Ansible, có một tính năng lưu trữ thực tế hiện có sẵn. Bộ nhớ đệm thực tế dựa trên một máy chủ redis để lưu trữ các sự kiện giữa các lần chạy playbook. Khi được bật, một playbook có thể tham chiếu các sự kiện có được từ một playbook khác đã được chạy trước đó. Ví dụ về tài liệu Ansible đưa ra:
Ví dụ, hãy tưởng tượng một cơ sở hạ tầng rất lớn với hàng ngàn máy chủ lưu trữ. Bộ nhớ đệm thực tế có thể được cấu hình để chạy hàng đêm, nhưng cấu hình của một bộ máy chủ nhỏ có thể chạy đặc biệt hoặc định kỳ trong suốt cả ngày. Khi bộ nhớ đệm thực tế được kích hoạt, sẽ không cần thiết phải tấn công vào tất cả các máy chủ để tham khảo các biến và thông tin về chúng.