Інфраструктура як код пропонує нам використовувати інструменти, які автоматизують ваші збірки. Чудово. Такі інструменти , як анзібль , кухар , лялькові , стек солі та інші штовхають нас до письмовій формі , як інфраструктура виглядає, при вирішенні розбіжностей.
У Salt Stack ці біти називаються станами . Якщо стан не відповідає дійсності, інструмент вирішить це за нас. Іншими словами - ми пишемо тест на нашу інфраструктуру, і якщо тест не вдасться, інструмент виправить це самостійно. Принаймні, це ідея.
XP вчить нас використовувати TDD, і питання полягає в тому, чи застосовний він до інфраструктури? Інструменти припускають, що це так.
Я можу уявити собі кілька типів тестів, які можуть бути дуже корисними.
Ми пишемо тести на дим, які в комплекті з розгорнутою службою, щоб переконатися, що розгорнута служба працює в кінці до кінця і працює, як очікувалося. Це був би виклик API або / та перевірка systemctl, щоб переконатися, що працює щойно ми розгорнули. Багато цих функціональних можливостей можна охопити в тих самих станах, оскільки такі інструменти, як ansible, мають стани, щоб переконатися, що служба працює.
Існує проект Molecule, який дозволяє виконувати окремі ролі (як відповідальний називає свої стани) проти докера або іншого механізму тимчасової віртуалізації. Це змушує відокремити ролі і дозволяє виконувати їх ізольовано від ігрової книги під час роботи над ними. Тести здебільшого дозволяють глузувати зі змінних, з якими повинна працювати роль. Інші приклади виглядають як дублювання двигуна ansible (стверджувати, що файл належить користувачеві ...).
Технологічний радар ThoughtWorks зараз вихваляє такі інструменти, як inspec , serverpec або goss за перевірку того, що сервер відповідає специфікації. Але ми пишемо специфікацію, чи не так?
Тож чи є сенс у подальшому тестуванні інфраструктури, якщо ми описуємо інфраструктуру в станах / ролях? Я можу запідозрити, що це стає більш необхідним у більших організаціях, де одна команда надає специфікацію, а інша випливає, або якщо є великий набір ролей, можливо, ви хочете запустити підмножину з них і отримати швидку вигоду від тестів? Я намагаюся зрозуміти, чому ви б написали тест, якщо ви могли мати роль / стан для того ж питання на увазі.
goss
. Так, наприклад, RPM встановлюється (відповідає) та перевіряється, чи встановлений очікуваний файл за замовчуванням, або служба працює та прослуховує певний порт. Я не хочу виправляти таку проблему автоматично, але отримую сповіщення і зупиняю прогрес. Sure Ansible може також перевірити систему і для вас, вам просто потрібно мати чітку інформацію про це, але в нашому випадку ми використовуємоgoss
для перевірки поведінки сервісу в контейнері