26. Дек 2022, 20:23

Изменения в Ansible в RHEL9

Возникла недавно задача по развертыванию сервиса в RHEL9 и я столкнулся с тем что в RHEL9 выпилен ansible-engine в виде отдельного репозитория и теперь используется пакет ansible-core, входящий в базовый репозиторий.

В чем различие: ansible-core поддерживает только 127 базовых модулей типа dnf, copy template и т.д.. Все остальное вынесено в коллекции.

А тут мне понадобился модуль sysctl, для того, чтобы включить IP forwarding.

До текущего момента я старался избегать использования коллекций. Скажем так, по религиозным причинам..

В общем-то ничего страшного, если речь идет о не очень большом количестве кода. Можно обойтись модулем shell и даже сделать это идемпотентно, но это означает, что вместо одного task будет 3 или 4. И это даже можно вынести в отдельную роль и т.п….

Но если мы имеем на руках репозиторий размером в несколько сот Мб? С кучей ролей, собиравшийся годами и используемый для RHEL7/8/9. Лично на меня от потенциального объема исправлений накатывала дикая печаль.

В общем я сдался и согласился на коллекции. Добавил в плейбук:

- ansible.posix.sysctl:
...

вместо

- sysctl:
...

Добавил в ansible.cfg параметр collections_paths. В RHEL9 старые роли заработали, а вот в RHEL8 я получил вот это:

ERROR! couldn't resolve module/action 'ansible.posix.sysctl'. This often indicates a misspelling, missing collection, or incorrect module path.

Печалька.

В общем небольшое исследование показало, что модули, объявленные конструкцией типа namespase.collection.modulename ansible-engine видеть не хочет ни в какую, а ansible-core воспринимает нормально:

# ansible-galaxy collection list

# /etc/ansible/ansible_collections
Collection    Version
------------- -------
ansible.posix 1.4.0

# ansible-doc -l
...
ansible.posix.sysctl         Manage entries in sysctl.conf
...

Но не переустанавливать же везде ansible-engine на ansible-core.

Ларчик открывается просто: везде использовать сокращенную форму. В этом случае оба варианта ansible работают корректно.

comments powered by Disqus

© andrdi.com 2020