IaC с Ansible от Southbridge: Практики разработки ролей Ansible. Часть 2

YOUTUBE · 18.11.2025 18:55

Ключевые темы и таймкоды

Введение

2:07
  • Приветствие и начало серии встреч по разработке ролей Ansible.
  • Представление Сергея Фомина, технического ректора компании Sauce Bridge.
  • Напоминание о QR-коде для доступа к чату курса и ссылка на телеграм-чат.

Плохие подходы в разработке

4:37
  • Обсуждение плохих подходов в разработке ролей Ansible.
  • Пример с лишними переменными, которые ухудшают читаемость кода.
  • Рекомендация писать повторяющиеся строки в задачах, а не в переменных.

Шаблонизация YAML

7:50
  • Шаблонизация конфигурационных файлов YAML и JSON.
  • Пример с конфигурацией утилиты для автоматического развертывания.
  • Рекомендация использовать нативные форматы данных YAML и JSON напрямую.

Проблемы с шаблонами

10:23
  • Проблемы с читаемостью и тестируемостью шаблонов.
  • Пример с Docker-конфигурацией и шаблонами.
  • Рекомендация хранить структуры данных в переменных и использовать фильтры для записи файлов.

Использование тегов

14:07
  • Спорная тема использования тегов в Ansible.
  • Рекомендация не использовать теги в рабочих окружениях.
  • Проблемы с реализацией тегов и их влияние на читаемость и тестируемость ролей.

Идемпотентность в Ansible

16:03
  • Идемпотентность важна для предотвращения дублирования действий в плейбуках.
  • Нарушение идемпотентности может привести к поломке плейбука или целевой системы.
  • Примеры нарушений: создание файла, создание таблицы разделов, скачивание и декомпрессия образа.

Примеры нарушений идемпотентности

17:01
  • Нарушение первого рода: плейбук ломается при повторном выполнении.
  • Пример: создание файла для свопа, который уже существует.
  • Решение: использование модуля com-file-size для идемпотентного создания файла.

Нарушение второго рода

18:26
  • Нарушение второго рода: плейбук не ломается, но ломает целевую систему.
  • Пример: создание таблицы разделов на виртуальной машине.
  • Решение: проверка наличия таблицы разделов перед созданием.

Нарушение третьего рода

20:52
  • Нарушение третьего рода: плейбук выполняет лишние действия.
  • Пример: скачивание и декомпрессия образа.
  • Решение: проверка изменений перед распаковкой.

Нарушение четвертого рода

22:27
  • Нарушение четвертого рода: плейбук рапортует о несуществующих изменениях.
  • Пример: проверка версии бинарного файла Helm.
  • Решение: использование ченчвенн фолс для игнорирования несуществующих изменений.

Специфическое окружение ролей

25:42
  • Роли должны работать в обычном окружении, без специфических требований.
  • Пример: роли первого поколения, требующие особого инвентаря.
  • Решение: избегать написания ролей, требующих специфического запуска.

Выбор таргета внутри роли

28:03
  • Не рекомендуется использовать переменные или группы для выбора тасков внутри роли.
  • Пример: использование переменных для выбора тасков по группам.
  • Решение: использовать оператор хоз для определения выполнения плейбука.

Патологическая связанность

30:21
  • Патологическая связанность: взаимозависимость между модулями, влияющая на внутреннюю реализацию.
  • Пример: влияние одного модуля на другой через внутреннюю реализацию.
  • Решение: избегать патологической связанности для повышения стабильности и ремонтопригодности.

Проблемы с доступом к переменным в ролях

31:19
  • Обращение к переменным другой роли может привести к неожиданным последствиям.
  • Внесение правок в одну роль может повлиять на другую, что может сломать код.
  • Разделение ролей по разным плейбукам может привести к потере переменных, что вызовет проблемы.

Обращение к инвентарю

34:12
  • Непосредственное обращение к инвентарю в шаблонах или ролях может быть опасным.
  • Внутренние переменные роли могут быть завязанными на имена объектов в инвентаре.
  • Это затрудняет поддержку и рефакторинг кода.

Делегирование на хосты

37:04
  • Делегирование на хосты с именами, отличными от локального хоста, должно быть явным.
  • Использование переменных для явного указания хостов улучшает читаемость и поддержку кода.

Соглашения об именовании переменных

37:39
  • Важно соблюдать соглашения об именовании переменных для предотвращения коллизий.
  • Неправильное именование может привести к неожиданным результатам и проблемам.

Вопросы и ответы

39:59
  • Переменные, вычисляемые во время работы плейбука, могут быть использованы без проблем.
  • Параметризация одинаковых тасков возможна с помощью переменных и циклов.
  • Удаление слов из файла лучше делать через шаблоны, а не через внешние таски.

Настройка кластеров

45:36
  • Настройка доступа через эпитейблс без обращения к чужим хастварам возможна.
  • Пример настройки доступа к сервисам через эпитейблс будет показан позже.

Обсуждение тегов и их использования

47:13
  • В чате активно обсуждают тему экологических зависимостей.
  • Использование тегов в коде не рекомендуется, так как они могут привести к проблемам.
  • Рекомендуется избегать использования тегов в коде.

Вопрос о повторении строк в коде

48:58
  • Вопрос о том, что будет, если одну и ту же строку написать 15-20 раз в коде без использования переменных.
  • Ответ: изменение строки в проекте требует грепа всех вхождений строки.
  • Даже если строка вынесена в переменную, она все равно может быть воспроизведена в открытом виде.

Удаление строк с определенным словом

50:06
  • Уточнение по поводу удаления строк с определенным словом из файла.
  • Использование регулярных выражений для удаления строк с любым регистром.

Использование роли для управления

51:15
  • Использование специально написанной роли для управления.
  • Роль называется "эпитейбл с кастом чейн" и доступна в открытом доступе.
  • Роль позволяет управлять цепочками и перенаправлять порты.

Уточнение по поводу строк с разной семантикой

54:39
  • Вопрос о строках с одинаковым значением, но разной семантикой.
  • Ответ: это сложный случай, требующий уточнения.
  • Возможно, уместно использовать переменные для таких случаев.

Вопрос о названии гетлаб

56:13
  • Вопрос о названии гетлаб "галакси".
  • Ответ: гетлаб назван так из-за содержания ролей антиблова.
  • Основное назначение гетлаб - хранение коллекций.

Завершение встречи

56:47
  • Завершение встречи и благодарность участникам.
  • Надежда на полезность представленных практик для избежания ошибок.
  • Пожелания хорошего вечера и прощание.