อาจมีวิธีที่ดีกว่าในการทำเช่นนี้และฉันหวังว่าจะได้เห็น แต่สิ่งที่ฉันกำลังทำอยู่มีลักษณะเช่นนี้มาก นำมาจากบทบาท fail2ban ที่กำหนดเองที่ฉันใช้:
วาร์มีลักษณะเช่นนี้ ฉันมีไฟล์ vars สำหรับแต่ละไฟล์ {{ansible_os_family}}
แล้วแทนที่ใดๆ {{ansible_distribution}}_{{ansible_distribution_major_version}}
ที่อาจต้องการพวกเขา
$ ls -l
lrwxrwxrwx. 1 ข้อผิดพลาด ข้อผิดพลาด 24 7 พฤษภาคม 07:51 ล้มเหลว2ban_os_CentOS_6.yml -> ล้มเหลว2ban_os_RedHat_6.yml
lrwxrwxrwx. 1 ข้อผิดพลาด ข้อผิดพลาด 22 7 พฤษภาคม 07:51 ล้มเหลว2ban_os_CentOS.yml -> ล้มเหลว2ban_os_RedHat.yml
-rw-rw-r--. 1 ข้อผิดพลาด ข้อผิดพลาด 64 7 พฤษภาคม 07:51 fail2ban_os_Debian.yml
-rw-rw-r--. 1 ข้อผิดพลาด ข้อผิดพลาด 64 7 พฤษภาคม 07:51 ล้มเหลว2ban_os_Fedora.yml
-rw-rw-r--. 1 ข้อผิดพลาด ข้อผิดพลาด 62 7 พฤษภาคม 07:51 fail2ban_os_RedHat_6.yml
-rw-rw-r--. 1 ข้อผิดพลาด ข้อผิดพลาด 64 7 พฤษภาคม 07:51 fail2ban_os_RedHat.yml
-rw-rw-r--. 1 ข้อผิดพลาด ข้อผิดพลาด 62 7 พฤษภาคม 07:51 ล้มเหลว2ban_os_Ubuntu_14.yml
-rw-rw-r--. 1 ข้อผิดพลาด ข้อผิดพลาด 65 7 พฤษภาคม 07:51 ล้มเหลว2ban_os_Ubuntu.yml
$ cat fail2ban_os_Ubuntu.yml
fail2ban_backend: systemd
Failed2ban_banaction: iptables-หลายพอร์ต
$ cat ล้มเหลว2ban_os_Fedora.yml
fail2ban_backend: systemd
fail2ban_banaction: firewallcmd-ipset
ในการโหลดไฟล์เหล่านี้ บทบาท/fail2ban/tasks/main.yml
เริ่มต้นดังนี้:
---
- include_vars: fail2ban_os_{{ansible_os_family}}.yml
เพิกเฉยต่อข้อผิดพลาด: จริง
- include_vars: fail2ban_os_{{ansible_distribution}}_{{ansible_distribution_major_version}}.yml
เพิกเฉยต่อข้อผิดพลาด: จริง
ซึ่งหมายความว่าไม่จำเป็นต้องมีไฟล์ตัวแปร แน่นอน ถ้าตัวแปรที่ต้องการไม่ได้กำหนดไว้ที่ไหนสักแห่ง งานต่อมาจะล้มเหลว จากนั้นคุณก็ไปกำหนดสิ่งที่คุณพลาดไป
เพื่อให้สิ่งต่าง ๆ สอดคล้องและบำรุงรักษาได้ ไฟล์ vars ตระกูล OS ทั่วไปมี vars ที่แสดง distros ที่รองรับล่าสุด และการแทนที่สำหรับเวอร์ชัน distro เฉพาะนั้นมีไว้สำหรับ distros รุ่นเก่า