Птица Новый ребенок на блоке, позволяющий тестировать инфраструктуру с использованием Raku DSL.
Это просто, написано на современном и блестящем Раку Язык и эффективный — это не требует дополнительных зависимостей на целевом хосте.
Давайте начнем.
zef install --/test Bird
Один раз установит птицу, им нужно сделать дополнительный шаг. Как птица полагается на ssh-bulk-check
Воробей плагин, им нужно настроить один:
export SP6_REPO=https://sparrowhub.io/repo s6 --index-update
Последний шаг обеспечивает добавление хранилища общего воробья, и птица установит плагин, когда он начинается впервые.
Nano Pull.pl6.
:
# check if nginx service is running service-is-running "nginx"; # check if nginx service is enabled service-is-enabled "nginx";
Тест — это действительный код Raku с Функции экспортируется птицей. В этом примере мы проверяем это nginx
Сервис начал и добавлен в автозапуск.
Теперь давайте запустим тест:
bird --host=sparrowhub.io
bird:: [read host from command line] [sparrowhub.io] bird:: [cmd file] [/root/.bird/285892/cmd.sh] bird:: [check file] [/root/.bird/285892/state.check] bird:: [init cmd file] [repository] :: index updated from file:///root/repo/api/v1/index [check my hosts] :: check host [sparrowhub.io] [check my hosts] :: ========================================================== root@sparrowhub.io's password: [check my hosts] :: Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-77-generic x86_64) [check my hosts] :: <<< test_01: service [nginx] is running [check my hosts] :: YES [check my hosts] :: >>> [check my hosts] :: <<< test_02: service [nginx] is enabled [check my hosts] :: YES [check my hosts] :: >>> [check my hosts] :: end check host [sparrowhub.io] [check my hosts] :: ========================================================== [task check] verify host [sparrowhub.io] start [task check] test_01: service [nginx] is running [task check] stdout match (r)True [task check] test_02: service [nginx] is enabled [task check] stdout match (r) True [task check] verify host [sparrowhub.io] end
Интересная вещь о птице такое, как это тесты. Птица имеет два этапа исполнения:
Выполнить задачи (линии обозначены как
Проверьте мой хост
)Проверяет вывод задач (линии обозначены как
Cass Clears
)
Эти 2 этапа бегают один за другим, но каждый из них имеет отдельное значение.
Выполнить проверки задач
Птицы будут генерировать Bash
Команды представляющий Тесты, которые выполняются. Последний скрипт Bash (файл cmd — /root/.bird/285892/cmd.sh
) генерируется на хосте, который вы запускаете птицу, а затем выполняются над SSH
на целевом хосте. Как только этот этап закончится птица, имеет выход ( [Проверьте мои хосты]
Линии), которые проанализированы на следующем этапе.
Проверьте вывод задач
Во время этой ступени птица будет использовать подготовлен Задача проверяет правила (проверка файла — /root/.bird/285892/state.Check
) и запустить их на выходе. Птица будет использовать Проверьте задание воробей DSL сделать это.
Шаги по разбору и проверке выполнены на хосте, где птица проходит от.
После завершения разбора и проверки результаты рассматриваются как отчет ( [Check Check]
Записи) и в случае каких-либо ошибок общий тест, помеченный как не удастся.
Логика оформления тестирования, сначала кажется немного отличающейся от того, что люди обычно имеют с другими инструментами тестов (например, GOSS, TestInFra или шеф-повар), но требуется всего немного времени, чтобы привыкнуть к этому и увидеть преимущества:
Можно увидеть основные команды тестовых команд (
[Проверьте мои хосты]
Записи), а не только тесты результаты, это дает Больше контекста Особенно после неудачных тестовПтица — это способ более простым в разработке, так как она не полагается на жесткие структуры данных и в основе использования Raku Regexps, чтобы проверить предположения на основе вывода текста и правилам Regexp.
Это забирает меня буквально минут, чтобы добавить новые методы испытаний, скажем, для сервиса TCP/IP Port Binding, потому что все, что мне нужно было сделать, это разбирать lsof
Вывод команды — https://github.com/melezhik/bird/blob/master/lib/bird/dsl/service.pm6#l49-l68.
Nano Pull.pl6.
:
service-listen-to "nginx", 443;
И тут Пример больше lsof
На основе отчета теста:
bird --host=sparrowhub.io
bird:: [read host from command line] [sparrowhub.io] bird:: [cmd file] [/root/.bird/286735/cmd.sh] bird:: [check file] [/root/.bird/286735/state.check] bird:: [init cmd file] [repository] :: index updated from file:///root/repo/api/v1/index [check my hosts] :: check host [sparrowhub.io] [check my hosts] :: ========================================================== root@sparrowhub.io's password: [check my hosts] :: <<< test_01: service [nginx] listens to port [443] [check my hosts] :: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME [check my hosts] :: nginx 709 root 8u IPv6 21734 0t0 TCP *:443 [check my hosts] :: nginx 709 root 9u IPv4 21735 0t0 TCP *:443 [check my hosts] :: nginx 710 www-data 8u IPv6 21734 0t0 TCP *:443 [check my hosts] :: nginx 710 www-data 9u IPv4 21735 0t0 TCP *:443 [check my hosts] :: >>> [check my hosts] :: end check host [sparrowhub.io] [check my hosts] :: ========================================================== [task check] verify host [sparrowhub.io] start [task check] test_01: service [nginx] listens to port [443] [task check] stdout match (r) <^^ nginx \s+ \S+ .* '*' ':' 443 $$> True [task check] verify host [sparrowhub.io] end
Отчеты тестов становятся еще более понятными, если запустить птицу с выходом цвета:
Nano Pull.pl6.
:
service-is-running "nginx"; service-is-enabled "nginx"; service-listen-to "nginx", 443; service-listen-to "rakudo", 5000, True;
bird --host=sparrowhub.io
Я надеюсь, что вам нравится птица и может рассмотреть возможность использования его в тестировании инфраструктуры. Я постоянно добавлял новые методы, вы даже можете проверить K8s
Развертывание с использованием птицы, Оформить заказ документация !
Спасибо за чтение.
Алексей
Оригинал: «https://dev.to/melezhik/bird-raku-dsl-for-infrastructure-testing-1hph»