Рейтинг:0

Роль Ansible, можно ли условно определять переменные?

флаг ng

У меня есть роль Ansible, в которой используется множество переменных, и поскольку эти переменные настраиваются после конфигурации сервера (например, какую версию ОС он использует), мой каталог «MyRole/vars» полон разных файлов для разных случаев.

В "MyRole/vars" у меня есть:

  • RedHat6_install.yml
  • Redhat7_install.yml
  • RedHat8_install.yml
  • RedHat6_uninstall.yml
  • RedHat7_uninstall.yml
  • RedHat8_uninstall.yml

И так далее...

Мне было интересно, можно ли сгруппировать переменные в одном файле и сделать для него условие, например:

main.yml:

    - удалить_var_1
      когда: >
            ansible_distribution_major_version == 6
    - удалить_var_2
      когда: >
            ansible_distribution_major_version == 7
    - удалить_var_3
      когда: >
            ansible_distribution_major_version == 8

и так далее...
флаг br
См. [al_include_os_vars_path.yml](https://github.com/vbotka/ansible-lib/blob/master/tasks/al_include_os_vars_path.yml), как использовать *first_found* и [al_include_os_vars_path_incr.yml](https://github. com/vbotka/ansible-lib/blob/master/tasks/al_include_os_vars_path_incr.yml), чтобы включить приращения.
Рейтинг:0
флаг cz

Вероятно, есть лучшие способы сделать это, и я с нетерпением жду их, но то, что я сейчас делаю, очень похоже на это. Взято из пользовательской роли 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, представляющие самые последние поддерживаемые дистрибутивы, а переопределения для конкретных версий дистрибутивов предназначены для более старых дистрибутивов.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.