Как проверить настройку и настройку в настройке Ansible?

33

Рассматривая попытки встроить некоторую устойчивость в нашу настройку Ansible, которая занимается настройкой и настройкой.

Я понимаю несколько методов тестирования на стороне конфигурации вещей, но мне интересно, как лучше всего реализовать тестирование на стороне обеспечения, и есть ли какие-либо инструменты, которые могут помочь с этим типом реализации.

В настоящее время большая часть нашего тестирования проводится последовательно во время playbook, что имеет большой смысл для таких вещей, как «есть ли сервис, есть ли в наличии vip; закончена ли эта асинхронная задача», но что меня действительно беспокоит, так это наша способность управлять дрейфом конфигурация как на уровне приложения, так и на уровне обеспечения (например, конфигурация виртуальной машины). Я знаю, что Ansible не лучший инструмент для работы с дрейфом конфигурации, но мне интересно узнать ваше собственное мнение.

Если у вас есть что-то, чтобы полностью автоматизировать процесс еще лучше. (у нас есть несколько уродливых сценариев, которые ежедневно отчитываются).

Примечание . В настоящее время у нас есть несколько условий, когда может произойти повторное предоставление (например, восстановление из резервной копии, проблема критических систем), но обычно оно просто проходит через некоторые из возможных задач настройки конфигурации и больше не думает об этом.

Нафта
источник
2
Serverspec.org
Мэтт
Ansible запускается только один раз при инициализации? Если нет, то с какой частотой он запускается? Просто пытаюсь понять проблему, прежде чем предлагать решение.
Лесной Охотник
Привет @Naphta любой из ответов решил твой вопрос, пожалуйста, рассмотри его , нажав на галочку. Это указывает более широкому сообществу, что вы нашли решение, и дает некоторую репутацию как ответчику, так и вам. Там нет обязательств сделать это.
Ричард Слейтер
I'm aware Ansible isn't the best tool for working with configuration drift Пожалуйста, объясни.
030

Ответы:

19

Некоторые варианты там ..

Инструменты тестирования: Сортировка по звездам Github

  • Serverspec - Ruby, самый популярный инструмент, основанный на Rspec от ruby.
  • Goss - YAML, простой, <10MB автономный двоичный файл, очень быстрый, может генерировать тесты из состояния системы
  • Inspec - Ruby, думайте об этом как об улучшенной серверной спецификации, почти такой же синтаксис, которую сделали парни шеф-повара. Создан так, чтобы его было проще расширять, чем serverpec
  • Testinfra - Python, имеет классную особенность - возможность использовать инвентарь / перемены Ansible

Основные различия между ними:

В конечном счете, я бы предложил провести день, экспериментируя со всеми из них, чтобы почувствовать их, прежде чем принять решение за себя.

  • За исключением Goss, все фреймворки могут работать на удаленной машине (например, поверх ssh). Goss работает только локально или в Docker с Dgoss.
  • Все фреймворки могут запускаться локально на сервере, но для установки или встраивания требуется Python или Ruby. Inspec предоставляет автономный пакет <150 МБ со встроенной версией ruby. Goss - это двоичный файл размером менее 10 МБ без внешних зависимостей.
  • Goss имеет встроенную поддержку вывода nagios / sensu, что упрощает интеграцию с инструментами мониторинга.
  • Goss-тесты, как правило, более простые, но менее гибкие, поскольку основаны на YAML. Другие платформы позволяют вам использовать всю мощь языка Python / Ruby, лежащего в основе, для написания тестов или расширения функциональности инструмента. (простота против гибкости)
  • Goss позволяет генерировать тесты из текущего состояния системы
  • Testinfra, насколько мне известно, является единственным, который имеет встроенную поддержку для ANSI инвентаризации и переменных
  • Inspec поддерживается шеф-поваром

Непрерывное / дивергентное тестирование:

  • Chef Compliance - работает с inspec для постоянного тестирования ваших серверов, платного продукта
  • Goss - может быть легко подключен к Nagios или Sensu. Также поддерживает выставление тестов сервера в качестве конечной точки http.

Тестирование жгутов для разработки:

  • кухня - инструмент для тестирования, запускает экземпляр, запускает код управления конфигурацией, запускает набор тестов. Сделано парнями шеф-повара
  • Молекула - похожа на тестовую кухню, но написана специально для ansible

Полное раскрытие: я автор Госса

ОБНОВЛЕНИЕ: InSpec 4.x или выше использует смешанную коммерческую / открытую лицензию - см. Комментарии.

Ахмед Эльсаббахи
источник
4
Я понимаю, что вы немного предвзяты, но inspec не требует, чтобы Compliance периодически запускался. И нет никаких зависимостей для управления, все необходимые библиотеки и фреймворки (ruby) включены в пакет, который может быть установлен локально на каждом узле, при запуске через ssh / winrm inspec ставит себя на место. Вы указываете исключительно на внешнюю команду, которая не соответствует действительности, многие тесты выполняются внутренним кодом ruby. (Думаю стоит отметить)
Тенсибай
Я обновил ответ, чтобы исправить внешнюю команду и включил ruby ​​для inspec. Можете ли вы уточнить или отправить мне ссылку, объясняющую, как inspec может использоваться самостоятельно для обнаружения / сообщения о дрейфе?
Ахмед Эльсаббахи
Что ж, часть отчетности будет у вас под рукой, это действительно цель Compliance сделать представление. Но вы можете запустить inspec в crontab и просто положиться на почту crontab, когда тест не может вас предупредить (например).
Тенсибай
В общем, спасибо за редактирование, это звучит как честное изложение вашего инструмента и других. Боюсь, что это может быстро устареть, но в любом случае +1 за листинг и указатели.
Тенсибай
Ах да ... все инструменты могут быть использованы таким образом. Я пытался предоставить инструменты (или интеграции с инструментами), которые обеспечивают лучшую отчетность. Насколько я знаю, есть соответствие или упаковка инструментов таким образом, чтобы они были удобны для nagios / sensu / some-other-other-monitor-tool. Пример: slideshare.net/m_richardson/… Извинения, если изначально получилось предвзято, не предполагалось.
Ахмед Эльсаббахи
13

Эти два инструмента , которые я видел этого является Inspec и ServerSpec . Serverspec - это инструмент на основе Ruby, основанный на RSpec . InSpec вдохновлен RSpec и ServerSpec.

Я использовал ServerSpec. Это круто, но, возможно, не на 100% стабильно. У меня были проблемы с тестированием определенных версий программного обеспечения в Ubuntu.

Я прочитал документы InSpec, но не углубился. По сути, это то же самое, что и Serverspec.

Судя по коммитам Github, похоже, что работа над ServerSpec несколько затормозилась, тогда как InSpec только набирает обороты.

ОБНОВЛЕНИЕ: InSpec 4.x или выше использует смешанную коммерческую / открытую лицензию - см. Комментарии.

Дейв Сверски
источник
1
«У меня были проблемы с тестированием определенных версий программного обеспечения в Ubuntu». Я исправил это, заметив вопрос об этом на SO: stackoverflow.com/questions/42417864/…
Мэтт
Чтобы немного уточнить, InSpec эмулирует RSpec, но не опирается на него.
Coderanger
1
@MattSchuchard Спасибо за эту ссылку!
Дейв Сверски
хорошо, «не на 100% стабильно» для инструмента тестирования, звучит не очень хорошо
ᴳᵁᴵᴰᴼ
InSpec очень хорош в качестве инструмента тестирования и позволяет легко устанавливать на сервере ничего, тогда как ServerSpec может сделать это только с некоторой дополнительной работой. Потребуется некоторая работа, чтобы InSpec использовал инвентаризацию Ansible, хотя - вероятно, проще, если инвентаризация находится в формате YAML (Ansible 2.4+).
RichVel
10

При использовании инструментов управления конфигурацией, таких как 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.

Евгений
источник
5

Test Kitchen имеет встроенный плагин для тестирования Ansible кода. Это не так глубоко, как интеграция Chef, но она выполняет свою работу в большинстве случаев. Существует также более свежий проект Molecule, который представляет собой специализированную систему тестирования Ansible.

coderanger
источник
0

Вы можете отслеживать несоответствия / отклонения конфигурации / инфраструктуры, используя Outthentic , легко создать набор тестов, чтобы «исправить» желаемое состояние и повторно запускать его каждый раз, когда вам нужно отслеживать нежелательные изменения.

Алексей Мележик
источник
1
Добро пожаловать на DevOps.se Алексей. В то время как ваш инструмент может помочь пользователю в этом случае, для того, чтобы это было ответом здесь, должно быть немного больше, чтобы передать, как это имеет отношение к вопросу. В противном случае это выглядит как реклама только для ссылок.
цыплята
Здравствуй! Конечно, только что дал больше деталей.
Алексей Мележик
С моей точки зрения, это не что иное, как то, что может сделать rundeck, и выходит за рамки этого вопроса. Тем более, что ответ не объясняет, как он может решить аудит тысячи серверов и быть предупрежденным о дрейфе или представить читабельный отчет для аудитора, предоставляя некоторый анализируемый результат. Из того, что я только что прочитал, он делает только то, что может сделать inspec (например), и дает менее полезный вывод в масштабе, требуя большого количества внешних инструментов для выполнения работы и, следовательно, будучи менее переносимым.
Тенсибай
«Как это может решить аудит тысячи серверов» - я мог найти что-нибудь о тысячах серверов в вопросе
Алексей Мележик
«и будьте предупреждены о дрейфе или представьте удобочитаемый отчет для аудитора, предоставив некоторый анализируемый результат». ни я не нашел это в вопросе. Очевидным предупреждением о дрифте является тот факт, что тесты начинают проваливаться ...
Алексей Мележик