Cài đặt một kịch bản sự kiện để /etc/ansible/facts.d/java.fact
trên các máy chủ từ xa và làm cho nó có thể thực thi được.Thoát khỏi JSON để in theo tiêu chuẩn là hơi xấu. Cũng xấu, phân tích một phiên bản "số" ra khỏi phiên bản java
. Mặc dù bạn có thể đang thu thập phiên bản theo một cách khác, hãy điều chỉnh tập lệnh nếu cần.
#!/bin/sh
Java_VERSION=$(java -version 2>&1 | grep version | cut -d '"' -f 2)
printf "{\"java_version\": \"${JAVA_VERSION}\"}\n"
Viết một mẫu Jinja để in các dòng số phiên bản theo định dạng mong muốn. Nói tập tin là mẫu/javaversionreport.txt
- các nhóm là một mệnh lệnh kỳ diệu của inventory_hostname được lập chỉ mục theo nhóm
- hostvars là một phép thuật với các biến của các máy chủ khác
- ansible_local là biến "sự kiện địa phương"
- java là từ
java.fact
tên tập tin
{% cho máy chủ trong nhóm['hosts'] %}
{{ hostvars[host].ansible_local.java.java_version }} {{ máy chủ }}
{% endfor %}
Và chơi để thu thập dữ kiện và viết báo cáo. Điều chỉnh mẫu máy chủ như mong muốn.
---
- chủ nhà: chủ nhà
thu thập_sự thật: Đúng
fact_path: /etc/ansible/facts.d
- máy chủ: localhost
thu thập_facts: Sai
nhiệm vụ:
- mẫu:
src: javaversionreport.txt
đích: /tmp/out.log
Kết xuất một mẫu chạy nhanh hơn viết lại tệp bằng linefinfile. Mặc dù việc thu thập thông tin thực tế có thể chậm. Ngoài ra, các mẫu Jinja có thể được viết ở bất kỳ định dạng nào bạn muốn.