Рубрики
Uncategorized

Bird — Raku DSL для тестирования инфраструктуры

Как проверить инфраструктуру серверов Linux с помощью птицы. Теги от тестирования, Раку, DevOps, Automation.

Птица Новый ребенок на блоке, позволяющий тестировать инфраструктуру с использованием 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»