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