Вопрос или проблема
Ansible Tower 3.3.0
В настоящее время мы используем Ansible 2.4.2 и нуждаемся в обновлении до 2.5.x, чтобы использовать новые функции, не нарушая уже существующие задачи, которые были протестированы и работают. Мы хотели бы иметь возможность указывать версию Ansible для выполнения задач, для сертификации, и если они проходят, то переходить на новую версию, а если нет, продолжать использовать текущую версию.
Наши плейбуки работают на сетевых устройствах, RHEL7, VMware, Openstack и нескольких версиях Windows.
Ранее мы обновлялись до 2.5.0 и столкнулись с проблемами с win_copy, win_template и несколькими другими модулями, что заставило нас вернуться к предыдущей работающей версии.
Позже мы хотели бы обновить различные компоненты, включая сам Tower, поэтому любые идеи по поводу этих действий также будут оценены.
Ansible развивается достаточно быстро, и любое крупное обновление версии может сломать не тривиальные плейбуки. Учитывая цикл выпуска в около 4 месяца, вы можете удерживаться на одной версии около года, прежде чем ваша версия станет устаревшей.
Вы можете создать ветку управления версиями ваших плейбуков, как это делается в разработке программного обеспечения. Создайте стабильную ветку 2.4 для обслуживания. Портируйте на текущую версию Ansible в главной ветке разработки master или trunk.
Поддерживайте какую-то среду разработки, тестирования и производства для того, что вы развертываете. Как и в случае с другими изменениями, сначала разверните новые версии Ansible в стадии разработки и тестирования.
Я не знаю, как вы будете тестировать разные версии Ansible в Tower. Я почти уверен, что это будет означать отдельное тестовое развертывание Tower.
Если вы хотите указать версию, под которой выполняются задачи, вы управляете этим с помощью ваших изображений выполнения. Версия Ansible, которую вы запускаете, определяется контейнером, который фактически её запускает.
Если вы войдете в свои изображения выполнения и настроите одно из них для получения определенного тега для awx-ee, вы получите версию ansible, которая у него есть.
Я клянусь, что однажды видел таблицу версий для awx в сравнении с версиями ansible, но не могу её найти. Возможно, вам просто нужно будет получить несколько изображений и запустить ansible –version внутри них, чтобы сориентироваться.
В любом случае, вы можете затем назначить, какие шаблоны должны использовать определённую версию, а какие – другую. Я рекомендую хорошую систему именования, чтобы избежать headaches. Надеюсь, это поможет.
Ответ или решение
Использование нескольких версий Ansible в Ansible Tower может быть сложной задачей, особенно при необходимости поддержания совместимости с существующими рабочими процессами. Вот шаги и рекомендации, которые помогут вам управлять несколькими версиями Ansible в Ansible Tower:
1. Использование изображений выполнения (Execution Images)
Ansible Tower (AWX) использует контейнеры для запуска задач. Вы можете создать разные образы выполнения, в зависимости от требуемой версии Ansible.
-
Создание изображений:
Создайте Docker-образ для каждой версии Ansible, которую вы планируете использовать. Например, чтобы создать образ для Ansible 2.4.2, используйте следующий Dockerfile:FROM ansible/ansible-runner:2.4.2 # Другие необходимые установки
Затем для Ansible 2.5.x создайте другой образ с соответствующей версией.
-
Загрузка образов:
Загрузите созданные изображения в свой реестр контейнеров или используйте публичные образы, если они есть.
2. Привязка версий к шаблонам заданий
После того как у вас есть несколько изображений, вы можете привязать каждое задание или шаблон к конкретной версии Ansible.
-
Создание шаблонов:
Для каждого задания или рабочего процесса в Ansible Tower создайте соответствующий шаблон. При настройке шаблона выберите конкретное изображение выполнения, соответствующее версии Ansible, которую вы хотите использовать. Это означает, что задания, использующие Ansible 2.4.2, будут по-прежнему работать, а вы сможете протестировать новые задания с Ansible 2.5.x. -
Имя изображения:
При создании изображений используйте четкое и понятное именование, чтобы было легко понимать, какую версию Ansible они содержат.
3. Тестирование
Рекомендуется сначала развернуть новую версию Ansible в тестовой среде, чтобы проверить, как это повлияет на ваши рабочие процессы:
-
Тестовая среда:
Настройте среду разработки и тестирования, где вы сможете запускать свои playbook с новой версией Ansible, избегая влияния на продуктивные задания. -
Постепенное внедрение:
После успешного тестирования можно постепенно внедрить новую версию в продакшн, переключая задания на новый шаблон.
4. Поддержка других компонентов
При обновлении других компонентов системы, таких как сам Ansible Tower, также соблюдайте осторожность:
-
Резервные копии:
Обязательно создавайте резервные копии конфигурации Tower и общей базы данных перед проведением обновлений. -
Документация по совместимости:
Всегда проверяйте документацию на совместимость между версией Ansible Tower и версиями Ansible, чтобы избежать возможных проблем.
В заключение, использование нескольких версий Ansible в Ansible Tower возможно через управление изображениями выполнения и шаблонами заданий. Обязательно проводите тестирование в безопасной среде перед внесением изменений в продуктивную среду.