Pull to refresh

Comments 12

Много и по делу, спасибо. Отличный материал для изучение в ближайшее время, очень кстати.
Спасибо. В скором времени будут еще две статьи уже для «продолжающих».
UFO just landed and posted this here
Сложную логику как-то тестировать, наверное, неплохо бы.

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

А в чем проблемы с chef-sugar?
UFO just landed and posted this here
Я из chef sugar использую только compile_time, на самом деле :-)

Проблемы могут быть, если например, конфиг кривой и сервис не поднялся, и при этом инитскрипт кривой — эти случаи и имеет смысл тестировать серверспеком.

Только сейчас заметил, в шеф теперь подобного рода тестирование встроено, можно запускать серверспеки в конце применения кукбуков, или например верифицировать конфиги прямо в ресурсе: docs.chef.io/release_notes.html
Отвечу сразу на два комментария.

Да, в FoodCritic есть дефолтные проверки, которые покрывают общие случаи. Но еще с его помощью вы сами можете в коде описать свой опыт, известные вам лучшие практики и внутренние соглашения в компании. Тут я имею ввиду имено опыт в написании chef кукбуков. Нет, вы представьте! Знания, которые вы получили во время n часового дебага кукбука можно описать в коде. Коллеги скажут большое спасибо, если вы сэкономите им время.

TestKitchen. Действительно, не имеет смысла использовать TestKitchen для тестирования кукбуков вида «скопируй файл сюда, установи пакет, перезагрузи сервис». В самом начале статьи описан кейс, когда тестирование актуально.
Вот вам пример из практики.
Представьте, что вы поддерживаете хотя бы 5-10 кукбуков, которые реализуют сложные LWRP. И, допустим, ими пользются разные OPS команды(не дай бог еще в разных компаниях).
А теперь представьте LWRP для развертывания бд. Он должен реализовать установку пакетов, конфигурировать сервис, настраивать репликацию, предоставлять скрипты-хелперы для мониторинга, уметь бекапить бд на различные(облачые и не очень) сервисы. А еще нужно учесть возможность работы под разными платформами и проверять работу с разными мажорными версиями бд. Без тестов каждый коммит будет напоминать русскую рулетку. Добавили поддержку новой версии бд, отвалилась совместимость со старыми версиями. Или сломалась совместимость в новой версии кукбука, от которого наш кукбук зависит. И так далее.

Про выбор фреймворка для тестирования. Использовать Minitest или ServerSpec(RSpec), я считаю, дело вкуса. Не вижу смысла писать тесты на чистом RSpec, тк в ServerSpec уже есть некоторые готовые ресурсы. Конечно, когда выпишете сложный кукбук, вам не хватит готовых ресурсов. Как и не хватит встроенных Chef ресурсов. В ServerSpec легко добавить свои ресурсы, мы пользуемся этим регулярно. Дискуссию про тестирование ServerSpec-ом инфраструктуры поддержать не могу, т.к. такого опыта не имею.

Относительно ChefSpec. Я на практике не сталкивался с ситуациями, когда его использование оправданно. Но не исключаю, что люди найдут/уже нашли такие ситуации.
UFO just landed and posted this here
я тут немножко с другим вопросом, но все же:
как можно делать в puppet'e — в конфиге сервера указывается что для environment «development» директория такая-то (там лежит незакомичченое в мастер добро).
Идем на конечную ноду, выполняем команду вида
puppetd --test --verbose --environment development --noop

где noop = dry-run, т.е. ничего не делать
вывод такой:
root@kappa1:~# puppetd --test --verbose --environment development --noop
notice: Ignoring --listen on onetime run
info: Caching catalog for kappa1.xxxx.ru
info: Applying configuration version '1426878058'
notice: /Stage[main]/Smartmontools/File[/etc/smartd.conf]/content:
--- /etc/smartd.conf    2015-03-20 22:02:18.000000000 +0300
+++ /tmp/puppet-file20150320-733013-woiq4a-0    2015-03-20 22:02:28.000000000 +0300
@@ -1,4 +1,3 @@
-#inserted by hand for example
 # this is puppet generated file, don't mess with it, gonna be overwritten

 # /etc/smartd.conf

notice: /Stage[main]/Smartmontools/File[/etc/smartd.conf]/content: current_value {md5}3efca6dd8a344981e69d2dec4aada487, should be {md5}30829791beb5e133009eeadfbaf5142c (noop)


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

как-то можно схожей простоты достичь в шефе?
Подобное можно сделать путем указания cookbook_versions в environment + запуск chef-client в режиме dry-run.
Но зачем такое делать, если можно прогнать chef-run в Vagrant?
UFO just landed and posted this here
Мне кажется для новичка статья будет неподъемная, а для продолжающих полезнее не сама статья, а мнения из комментов.
Может устроить хабра версию foodfightshow?
Sign up to leave a comment.

Articles