Инфраструктура как код подсказывает нам использовать инструменты, которые автоматизируют ваши сборки. Отлично. Такие инструменты, как ansible , chef , puppet , salt stack и другие, подталкивают нас к написанию того, как выглядит инфраструктура, при устранении различий.
В соляном стеке эти биты называются состояниями . Если состояние не соответствует действительности, инструмент разрешит его для нас. Другими словами - мы пишем тест для нашей инфраструктуры, и если тест не пройден, инструмент исправит его самостоятельно. По крайней мере, это идея.
XP учит нас использовать TDD, и вопрос в том, применимо ли это к инфраструктуре? Инструменты предполагают, что это так.
Я могу представить несколько типов тестов, которые могут быть очень полезными.
Мы пишем дымовые тесты, которые связаны с развернутой службой, чтобы гарантировать, что развернутая служба работает и работает должным образом. Это будет вызов API или проверка systemctl, чтобы убедиться, что то, что мы только что развернули, работает. Большая часть этой функциональности может быть реализована в одних и тех же состояниях, поскольку такие инструменты, как ansible, имеют состояния, обеспечивающие работу службы.
Существует проект Molecule, который позволяет запускать отдельные роли (так как ansible называет их состояния) для докера или другого временного механизма виртуализации. Это заставляет разъединять роли и позволяет выполнять их изолированно от сборника пьес при работе с ними. Тесты в основном позволяют проверять переменные, с которыми должна работать роль. Другие примеры выглядят как дублирование ANSIBLE движка (утверждают, что файл принадлежит пользователю ...).
ThoughtWorks тек радар прямо сейчас хвалит инструменты , такие как Inspec , serverspec или Госс для проверки того, что сервер соответствует спецификации. Но мы пишем спецификацию, не так ли?
Так есть ли смысл в дальнейшем тестировании инфраструктуры, если мы описываем инфраструктуру в состояниях / ролях? Я мог бы подозревать, что это становится более необходимым в более крупных организациях, где одна команда предоставляет спецификацию, а другая следует, или, если существует большой набор ролей, может быть, вы хотите запустить их подмножество и получить выгоду от тестов? Я изо всех сил пытаюсь понять, почему вы написали бы тест, если бы вы могли иметь роль / состояние для того же вопроса.
goss
. Так, например, RPM установлен (отвечающий) и затем проверяется, установлен ли ожидаемый файл по умолчанию или служба запущена и прослушивает определенный порт. Я не хочу, чтобы исправить эту проблему автоматически, но получать уведомления и остановить прогресс. Конечно, Ansible также может протестировать систему для вас, вам просто нужноgoss