Рассматривая попытки встроить некоторую устойчивость в нашу настройку Ansible, которая занимается настройкой и настройкой.
Я понимаю несколько методов тестирования на стороне конфигурации вещей, но мне интересно, как лучше всего реализовать тестирование на стороне обеспечения, и есть ли какие-либо инструменты, которые могут помочь с этим типом реализации.
В настоящее время большая часть нашего тестирования проводится последовательно во время playbook, что имеет большой смысл для таких вещей, как «есть ли сервис, есть ли в наличии vip; закончена ли эта асинхронная задача», но что меня действительно беспокоит, так это наша способность управлять дрейфом конфигурация как на уровне приложения, так и на уровне обеспечения (например, конфигурация виртуальной машины). Я знаю, что Ansible не лучший инструмент для работы с дрейфом конфигурации, но мне интересно узнать ваше собственное мнение.
Если у вас есть что-то, чтобы полностью автоматизировать процесс еще лучше. (у нас есть несколько уродливых сценариев, которые ежедневно отчитываются).
Примечание . В настоящее время у нас есть несколько условий, когда может произойти повторное предоставление (например, восстановление из резервной копии, проблема критических систем), но обычно оно просто проходит через некоторые из возможных задач настройки конфигурации и больше не думает об этом.
I'm aware Ansible isn't the best tool for working with configuration drift
Пожалуйста, объясни.Ответы:
Некоторые варианты там ..
Инструменты тестирования: Сортировка по звездам Github
Основные различия между ними:
В конечном счете, я бы предложил провести день, экспериментируя со всеми из них, чтобы почувствовать их, прежде чем принять решение за себя.
Непрерывное / дивергентное тестирование:
Тестирование жгутов для разработки:
Полное раскрытие: я автор Госса
ОБНОВЛЕНИЕ: InSpec 4.x или выше использует смешанную коммерческую / открытую лицензию - см. Комментарии.
источник
Эти два инструмента , которые я видел этого является Inspec и ServerSpec . Serverspec - это инструмент на основе Ruby, основанный на RSpec . InSpec вдохновлен RSpec и ServerSpec.
Я использовал ServerSpec. Это круто, но, возможно, не на 100% стабильно. У меня были проблемы с тестированием определенных версий программного обеспечения в Ubuntu.
Я прочитал документы InSpec, но не углубился. По сути, это то же самое, что и Serverspec.
Судя по коммитам Github, похоже, что работа над ServerSpec несколько затормозилась, тогда как InSpec только набирает обороты.
ОБНОВЛЕНИЕ: InSpec 4.x или выше использует смешанную коммерческую / открытую лицензию - см. Комментарии.
источник
При использовании инструментов управления конфигурацией, таких как Ansible, сам инструмент отвечает за предотвращение смещения конфигурации. После того, как вы использовали Ansible для установки определенной конфигурации, повторное выполнение Ansible обеспечит вашу конфигурацию такой, какой вы ее определили. Это также требует, чтобы ваш код Ansible был написан идемпотентно.
Учитывая вышесказанное, тестирование может быть достигнуто путем выполнения ваших Ansible playbooks в цикле с некоторого сервера. Например, задание cron, или Jenkins, может запускать playbook каждые 30 минут и сообщать о любом сбое. Отсутствие сбоев означает, что ваша конфигурация проверена, наличие сбоев означает, что существует проблема с переводом серверов в желаемое состояние .
В случае, когда вы не можете доверять написанию своего кода как идемпотента, и, таким образом, вы не можете действительно выполнять Ansible повторно в цикле с автоматического сервера, существует обходной путь. Вы можете сделать то же, что и выше (запустить Ansible в цикле), но использовать режим пробного запуска . Каждый раз, когда Ansible сообщает о необходимости внесения изменений, задание Jenkins (или задание cron) может уведомить вас о том, что ваша подготовленная конфигурация была изменена и серверы не находятся в желаемом состоянии .
Чтобы убедиться, что ваш код Ansible действительно выполняет то, что, как вы думаете, он должен делать, применимы решения, упомянутые Дейвом Сверски. И InSpec, и Serverspec - это инструменты, которые по- разному проверяют, что ваши playbooks действительно соответствуют вашим ожиданиям. Отличный способ для выполнения этих видов инструментов в тестовых средах (даже в контейнерах докеров ) - это использование kitchen.ci, который обрабатывает все связующее между различными инструментами тестирования инфракрасного модуля и выполнением ваших playbooks / modules / cookbooks.
Kitchen.ci изначально использовался для тестирования поваренных книг Chef, но плагины существуют и для Ansible и других инструментов CM.
источник
Test Kitchen имеет встроенный плагин для тестирования Ansible кода. Это не так глубоко, как интеграция Chef, но она выполняет свою работу в большинстве случаев. Существует также более свежий проект Molecule, который представляет собой специализированную систему тестирования Ansible.
источник
Вы можете отслеживать несоответствия / отклонения конфигурации / инфраструктуры, используя Outthentic , легко создать набор тестов, чтобы «исправить» желаемое состояние и повторно запускать его каждый раз, когда вам нужно отслеживать нежелательные изменения.
источник