Probabil că există modalități mai bune de a face asta și aștept cu nerăbdare să le văd, dar ceea ce fac în prezent seamănă foarte mult cu asta. Preluat dintr-un rol personalizat fail2ban pe care îl folosesc:
Vars-urile arată așa. Am fișiere vars pentru fiecare {{ansible_os_family}}
și apoi suprascrie pentru oricare {{ansible_distribution}}_{{ansible_distribution_major_version}}
care ar putea avea nevoie de ele.
$ ls -l
lrwxrwxrwx. 1 eroare de eroare 24 mai 7 07:51 fail2ban_os_CentOS_6.yml -> fail2ban_os_RedHat_6.yml
lrwxrwxrwx. 1 eroare de eroare 22 mai 7 07:51 fail2ban_os_CentOS.yml -> fail2ban_os_RedHat.yml
-rw-rw-r--. 1 eroare de eroare 64 7 mai 07:51 fail2ban_os_Debian.yml
-rw-rw-r--. 1 eroare de eroare 64 7 mai 07:51 fail2ban_os_Fedora.yml
-rw-rw-r--. 1 eroare de eroare 62 7 mai 07:51 fail2ban_os_RedHat_6.yml
-rw-rw-r--. 1 eroare de eroare 64 7 mai 07:51 fail2ban_os_RedHat.yml
-rw-rw-r--. 1 eroare de eroare 62 7 mai 07:51 fail2ban_os_Ubuntu_14.yml
-rw-rw-r--. 1 eroare de eroare 65 7 mai 07:51 fail2ban_os_Ubuntu.yml
$ cat fail2ban_os_Ubuntu.yml
fail2ban_backend: systemd
fail2ban_banaction: iptables-multiport
$ cat fail2ban_os_Fedora.yml
fail2ban_backend: systemd
fail2ban_banaction: firewallcmd-ipset
Pentru a încărca aceste fișiere, roles/fail2ban/tasks/main.yml
incepe asa:
---
- include_vars: fail2ban_os_{{ansible_os_family}}.yml
ignore_errors: Adevărat
- include_vars: fail2ban_os_{{ansible_distribution}}_{{ansible_distribution_major_version}}.yml
ignore_errors: Adevărat
Ceea ce înseamnă că fișierele variabile nu trebuie să existe. Desigur, dacă variabilele necesare nu sunt definite undeva, sarcinile ulterioare vor eșua și apoi puteți defini orice ați omis.
Pentru a menține lucrurile consecvente și ușor de întreținut, fișierele vars ale familiei de sisteme de operare generale conțin vars reprezentând cele mai recente distribuții acceptate, iar înlocuirile pentru anumite versiuni de distribuție sunt pentru distribuțiile mai vechi.