Вероятно, есть лучшие способы сделать это, и я с нетерпением жду их, но то, что я сейчас делаю, очень похоже на это. Взято из пользовательской роли fail2ban, которую я использую:
Вары выглядят так. У меня есть файлы vars для каждого {{ansible_os_family}}
а затем переопределяет для любого {{ansible_distribution}}_{{ansible_distribution_major_version}}
что они могут понадобиться.
$ лс -л
lwxrwxrwx. 1 ошибка ошибка 24 7 мая 07:51 fail2ban_os_CentOS_6.yml -> fail2ban_os_RedHat_6.yml
lwxrwxrwx. 1 ошибка ошибка 22 7 мая 07:51 fail2ban_os_CentOS.yml -> fail2ban_os_RedHat.yml
-рв-рв-р--. 1 ошибка ошибка 64 7 мая 07:51 fail2ban_os_Debian.yml
-рв-рв-р--. 1 ошибка ошибка 64 7 мая 07:51 fail2ban_os_Fedora.yml
-рв-рв-р--. 1 ошибка ошибка 62 7 мая 07:51 fail2ban_os_RedHat_6.yml
-рв-рв-р--. 1 ошибка ошибка 64 7 мая 07:51 fail2ban_os_RedHat.yml
-рв-рв-р--. 1 ошибка ошибка 62 7 мая 07:51 fail2ban_os_Ubuntu_14.yml
-рв-рв-р--. 1 ошибка ошибка 65 7 мая 07:51 fail2ban_os_Ubuntu.yml
$ кошка fail2ban_os_Ubuntu.yml
fail2ban_backend: системный
fail2ban_banaction: iptables-мультипорт
$ кошка fail2ban_os_Fedora.yml
fail2ban_backend: системный
fail2ban_banaction: брандмауэрcmd-ipset
Чтобы загрузить эти файлы, роли/fail2ban/tasks/main.yml
начинается так:
---
- include_vars: fail2ban_os_{{ansible_os_family}}.yml
ignore_errors: Истина
- include_vars: fail2ban_os_{{ansible_distribution}}_{{ansible_distribution_major_version}}.yml
ignore_errors: Истина
Это означает, что файлы переменных не должны существовать. Конечно, если необходимые переменные где-то не определены, более поздние задачи не будут выполнены, и тогда вы сможете определить то, что пропустили.
Чтобы обеспечить согласованность и удобство сопровождения, файлы vars общего семейства ОС содержат vars, представляющие самые последние поддерживаемые дистрибутивы, а переопределения для конкретных версий дистрибутивов предназначены для более старых дистрибутивов.