Як перевірити забезпечення та конфігурацію в налаштуваннях Ansible?


33

Дивлячись на спробу створити деяку стійкість у нашій програмі Ansible, яка стосується забезпечення та конфігурації.

Я розумію декілька методів тестування на конфігураційній стороні речей, але мені цікаво, як найкраще реалізувати тестування на забезпеченні речей, і чи є якісь інструменти, які можуть допомогти з цим типом реалізації.

В даний час велика частина нашого тестування проводиться серійно під час ігрової книги, що має багато сенсу для таких речей, як "з'явилася служба; доступна vip; чи закінчено це завдання асинхронізації", але мене дійсно стосується наша здатність керувати дрейфом конфігурація як для програми, так і для рівня забезпечення (наприклад, конфігурація VM). Я знаю, що Ansible - це не найкращий інструмент для роботи з конфігурацією, але мені цікаво побачити власну думку.

Якщо у вас є щось, щоб повністю автоматизувати процес ще краще. (у нас є кілька потворних сценаріїв, які щодня повідомляють про слабкість).

Примітка . Зараз у нас є кілька умов, коли може статися перепрограція (наприклад, перебудова з резервного копіювання, критична проблема системи), але, як правило, вона просто перебирає деякі відповідні завдання налаштування і не думає про це більше.



Чи відповідає Ansible лише один раз при наданні резерву? Якщо ні, то яка частота його запуску? Просто намагаюся зрозуміти проблему, перш ніж запропонувати рішення.
Лісовий мисливець

Привіт @Naphta, будь-яка з відповідей вирішила ваше запитання, будь ласка, прийміть його , натиснувши прапорець. Це вказує широкій спільноті на те, що ви знайшли рішення та надаєте певну репутацію як відповідачу, так і собі. Не потрібно цього робити.
Річард Слейтер

I'm aware Ansible isn't the best tool for working with configuration drift Будь ласка, поясніть.
030

Відповіді:


19

Деякі варіанти там ..

Інструменти для тестування: відсортовано за зірками github

  • Serverspec - Рубін, найпопулярніший інструмент там, побудований на rspec ruby
  • Goss - YAML, простий, <10 МБ автономний двійковий файл, надзвичайно швидкий, може генерувати тести із стану системи
  • Інспек - Рубі, подумайте про це як про вдосконалений сервер, майже такий же синтаксис, який створили хлопці-кухарі. Побудований для розширення легше, ніж серверспец
  • Testinfra - Python, має цікаву особливість того, що можна використовувати інвентаризацію / варси Ansible

Основні відмінності між ними:

Зрештою, я б запропонував провести день, експериментуючи з усіма ними, щоб відчути їх, перш ніж вирішити для себе.

  • За винятком Goss, всі рамки можуть працювати проти віддаленої машини (наприклад, над ssh). Goss працює лише локально або в docker w / dgoss.
  • Усі рамки можна запустити локально на сервері, але для встановлення або вбудовування потрібні Python або Ruby. Inspec забезпечує автономний пакет <150 Мб із вбудованою версією рубіну. Goss - це одинарний <10 МБ бінарний файл без зовнішніх залежностей.
  • Goss вбудував підтримку виходу нагіо / сенсу, що дозволяє легше інтегруватися з інструментами моніторингу.
  • Тести Goss, як правило, простіші, але менш гнучкі, оскільки засновані на YAML. Інші рамки дозволяють використовувати всю потужність основної мови Python / Ruby для написання тестів або розширення функціональності інструменту. (простота та гнучкість)
  • Goss дозволяє генерувати тести з поточного стану системи
  • Наскільки мені відомо, Testinfra - це єдиний, який має вбудовану підтримку ангібельних інвентарів та змінних
  • Інспек підтримує шеф-кухаря

Безперервне / дивергенційне тестування:

  • Chef Compliance - працює з Inspec, щоб постійно перевіряти ваші сервери, платний продукт
  • Goss - Легко підключитися до Nagios або Sensu. Також підтримує виставлення тестів сервера як кінцевої точки http.

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

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

Повне розкриття: Я автор пліток

ОНОВЛЕННЯ: InSpec 4.x або вище використовує змішану комерційну / відкриту ліцензію - див. Коментарі.


4
Я розумію, ти трохи упереджений, але інспектору не потрібно періодично працювати. І немає ніяких залежностей для управління, усі необхідні libs та frame (ruby) вкладаються в пакет, який можна встановити локально на кожному вузлі, коли запускається через ssh / winrm, inspec поставив себе на місце. Ви вказуєте на виключно зовнішню команду, що не відповідає дійсності, багато тестів робиться за допомогою внутрішнього коду рубіну. (Я думаю, що це варто зазначити)
Тенсібай

Я оновив відповідь, щоб виправити зовнішню команду та пакет рубіну для перевірки. Чи можете ви уточнити або надіслати мені посилання, що пояснює, як інспектор може бути використаний самостійно для виявлення / звіту про дрейф?
Ахмед Ельзаббахі

Що ж, частина звітів буде у вас під рукою, це справді мета дотримання вимог - скласти представлення. Але ви можете запустити Inspec в crontab і просто покластися на пошту crontab, коли тест не зможе вас попередити (наприклад).
Тенсібай

Загалом, звертаємось до редагування, що звучить як виправдана експозиція вашого інструменту та інших. Я боюся, що це може швидко застаріти, але +1 все одно для переліку та покажчиків.
Тенсібай

Ага, так .. всі інструменти можна використовувати таким чином. Я намагався надати інструменти (або інтеграції з інструментами), які забезпечують кращу звітність. Наскільки мені відомо, є відповідність або обробка інструментів таким чином, щоб зробити їх nagios / sensu / деякими іншими інструментами моніторингу зручними. Наприклад: 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, але не працює над цим.
кодерангер

1
@MattSchuchard Дякую за довідку!
Дейв Сверський

добре "не на 100% стабільний" для інструменту тестування не здається гарним
ᴳᵁᴵᴰᴼ

InSpec дуже хороший як інструмент для тестування і дозволяє легко встановлювати нічого на сервер, тоді як ServerSpec може це зробити лише за додаткових робіт. Для того, щоб InSpec використовував інвентаризацію Ansible, знадобиться деяка робота - можливо, простіше, якщо інвентар буде у форматі YAML (Ansible 2.4+).
RichVel

10

При використанні інструментів управління конфігурацією, таких як Ansible, сам інструмент несе відповідальність за запобігання зрушення конфігурації. Після того як ви використовували Ansible для встановлення певної конфігурації, повторне виконання Ansible забезпечить вашу конфігурацію такою, якою ви її визначили. Це також вимагає, щоб ваш Відповідальний код був написаний таким чином, що є ідентичним.

З огляду на вищезазначене, забезпечення тестуванням може бути досягнуто шляхом виконання ваших ігрових книг Ansible в циклі з якогось сервера. Наприклад, робота з крон, або Дженкінс, може виконувати ігрові книги кожні 30 хвилин і повідомляти про будь-яку помилку. Якщо відмов немає, це означає, що ваша конфігурація перевірена, а помилки означають, що існує проблема з переходом серверів у потрібний стан .

У випадку, коли ви не можете довіряти своєму коду, щоб він був записаний як idempotent, і, отже, ви не можете реально виконувати Ansible повторно в циклі з автоматичного сервера, вирішення існує. Ви можете зробити те саме, що описано вище (запустити Ansible в циклі), але використовувати його режим " сухого виконання" . Кожен раз, коли Ansible повідомляє, що потрібні зміни, завдання Jenkins (або завдання cron) може повідомити вас про зміну вашої передбаченої конфігурації та сервери не в бажаному стані .

Щоб переконатися, що ваш код Ansible насправді робить те, що, на вашу думку, слід робити, застосовуються рішення, згадані Дейвом Сверським. І InSpec, і Serverspec - це інструменти, які по- різному підтверджують, чи справді ваші ігрові книги виконують те, що ви маєте на увазі. Прекрасний спосіб виконання подібних інструментів у тестових умовах (навіть докер-контейнери) - це використання kitchen.ci, який обробляє весь клей між різними інструментами тестування інфраструктури та виконанням ваших ігор / модулів / кулінарних книг.

Kitchen.ci спочатку використовувався для тестування кулінарних книг шеф-кухарів, але додатки існують і для інструментів Ansible та інших інструментів CM.


5

Тест-кухня має плагін для перевірки коду відповіді. Це не так глибоко, як інтеграція шеф-кухаря, але це робить роботу в більшості випадків. Існує також останній проект Molecule, який є спеціалізованою системою тестування Ansible.


0

Ви можете відстежувати невідповідності конфігурації / інфраструктури за допомогою Outthentic , легко створити тестовий набір, щоб "виправити" бажаний стан і повторно запустити його щоразу, коли потрібно відстежувати небажані зміни.


1
Ласкаво просимо до DevOps.se Олексій. Хоча ваш інструмент може допомогти користувачеві в цьому випадку, для цього, щоб відповісти тут, слід трохи більше донести, як це стосується питання. Інакше це схоже на рекламу, що містить лише посилання.
пташенята

Привіт! Зрозуміло, тільки дано більше деталей.
Олексій Мележик

З моєї точки зору, це не є іншим, як те, що можна зробити, і є поза рамками цього питання. Тим більше, що відповідь не пояснює, як можна вирішити аудит тисячі серверів і попередити про занесення або подати аудиторський звіт для аудитора, даючи деякий проаналізований результат. З того, що я щойно прочитав, це робить не більше, ніж може зробити inspec (для зразка) і дає менш корисний вихід у масштабі, вимагаючи багато зовнішніх інструментів для виконання роботи, і, таким чином, є менш портативним.
Тенсібай

"як це може вирішити аудит тисячі серверів" - я міг знайти що-небудь про тисячі серверів у питанні
Олексій Мележик

"і попередити про зрушення або представити аудиторський звіт, прочитаний людиною, даючи деякий аналіз, який можна проаналізувати" ні цього я не знайшов у питанні. Очевидним попередженням про дрейфування є той факт, що тести починають провалюватися ...
Олексій Мележик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.