Базовый сценарий#
Приведенный здесь пример демонстрирует базовые операции с использованием API:
Получение идентификаторов свода правил и среды принятия решений.
Получение идентификатора типа полномочий для потока событий.
Отправка тестового события
{"ping":"pong"}.Проверка результата через журналы активации, поток событий и аудит правил.
Предварительные требования#
Перед выполнением сценария произведите следующие действия:
Установите на узле, с которого будут выполняться запросы, утилиты
curlиjq:sudo apt install --yes curl jq
Проверьте доступность репозитория с примерами ansible/eda-sample-project.
Подготовка проекта#
Для подготовки проекта выполните следующие действия:
Создайте проект Event-Driven Automation:
curl -X POST \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <your_token>' \ -d '{ "name": "<your_project_name>", "url": "https://github.com/ansible/eda-sample-project", "organization_id": <organization_id> }' \ https://<address>/api/eda/v1/projects/ | jq
Подставьте собственные значения параметров вместо употребленных в примере:
<address> – FQDN или IP-адрес шлюза, например
192.168.56.11.<your_token> – токен, полученный при подготовке, например
3wijiG7********VtL2gseJESzjJsD.<your_project_name> – название проекта, например
Demo Project.<organization_id> – идентификатор организации, которой будет принадлежать проект, например
1. Пример создания организации с помощью API см. в инструкции.
Внимание
При отсутствии удостоверяющего сертификата TLS на рабочей станции добавьте параметр
-kв командуcurl, например:curl -k -X POST ...
Пример вывода
Синхронизируйте проект:
curl -X POST \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/projects/<project_id>/sync/ | jq
Здесь <project_id> – идентификатор проекта, созданного на предыдущем шаге, например
3.
После успешной синхронизации платформа обнаружит своды правил, находящиеся в каталоге extensions/eda/rulebooks.
Получение идентификаторов#
Для выполнения сценария необходимо узнать идентификаторы свода правил, среды принятия решений и типа полномочий. Для этого выполните следующие действия:
Получите список сводов правил:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/rulebooks/ | jq
Пример вывода
Найдите в ответе свод правил с названием
webhook_defaults.ymlи сохраните его идентификатор.Получите список доступных сред принятия решений:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/decision-environments/ | jq
Пример вывода
Найдите в ответе среду принятия решений с названием
Default Decision Environmentи сохраните ее идентификатор.Получите список типов полномочий:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/credential-types/?page_size=100 | jq
Пример вывода
Найдите в ответе тип полномочий
Basic Event Streamи сохраните его идентификатор.
Подготовка потока событий#
Для подготовки потока событий выполните следующие действия:
Создайте полномочие типа
Basic Event Stream:curl -X POST \ -H 'Authorization: Bearer <your_token>' \ -H 'Content-Type: application/json' \ -d '{ "name": "<credential_name>", "organization_id": <organization_id>, "credential_type_id": <credential_type_id>, "inputs": { "username": "<username>", "password": "<password>" } }' \ https://<address>/api/eda/v1/eda-credentials/ | jq
Подставьте собственные значения параметров вместо употребленных в примере:
<credential_name> – название создаваемого полномочия, например
basic-event-stream-credential;<credential_type_id> – идентификатор типа полномочий, полученный ранее, например
7;<username> – название учетной записи, используемой для авторизации;
<password> – пароль.
Пример вывода
Создайте поток событий:
curl -X POST \ -H 'Authorization: Bearer <your_token>' \ -H 'Content-Type: application/json' \ -d '{ "name": "<event_stream_name>", "organization_id": <organization_id>, "eda_credential_id": <eda_credential_id>, "headers": "Authorization,Content-Type", "forward_events": false }' \ https://<address>/api/eda/v1/event-streams/ | jq
Подставьте собственные значения параметров вместо употребленных в примере:
<event_stream_name> – название создаваемого потока событий, например
basic-auth-stream;<eda_credential_id> – идентификатор полномочия, созданного ранее, например
4.
Пример вывода
В ответе найдите поле
urlи сохраните его значение. Это URL приема событий, он понадобится для отправки тестового события в контроллер Event-Driven Automation. Этот URL может отличаться по префиксу от URI ресурсов/api/eda/v1/, так как входящий прием событий обслуживается отдельной службой.
Подготовка активации свода правил#
Для подготовки активации свода правил выполните следующие действия:
Узнайте хеш свода правил:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/rulebooks/<rulebook_id>/sources/ | jq
Здесь <rulebook_id> – идентификатор свода правил
webhook_defaults.yml, например 19.Пример вывода
Создайте активацию свода правил:
curl -X POST \ -H 'Authorization: Bearer <your_token>' \ -H 'Content-Type: application/json' \ -d '{ "organization_id": <organization_id>, "restart_policy": "on-failure", "log_level": "error", "is_enabled": true, "name": "<activation_name>", "project_id": <project_id>, "rulebook_id": <rulebook_id>, "eda_credentials": [], "decision_environment_id": <decision_environment_id>, "source_mappings": "- source_name: __SOURCE_1\n event_stream_id: 1\n event_stream_name: basic-auth-stream\n rulebook_hash: <rulebook_hash>\n" }' \ https://<address>/api/eda/v1/activations/ | jq
Подставьте собственные значения параметров вместо употребленных в примере:
<activation_name> – название активации свода правил, например
webhook-activation.<decision_environment_id> – идентификатор среды принятия решений, например
1;<rulebook_hash> – хеш свода правил, полученный на предыдущем шаге.
Пример вывода
Отправка тестового события#
После запуска активации отправьте сообщение, имитирующее обнаружение события сервисом webhook.
Используемый свод правил ожидает событие с условием event.payload.ping == \"pong\".
Отправьте запрос вида:
curl -X POST \
-u "<username>:<password>" \
-H "Content-Type: application/json" \
-d '{"ping":"pong"}' \
<event_stream_url>
Здесь <event_stream_url> – URL приема событий, полученный при создании потока событий.
Проверка результата#
Для проверки выполните следующие действия:
Проверьте поток событий:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/event-streams/<event_stream_id>/ | jq
Здесь <event_stream_id> – идентификатор потока событий, созданного ранее, например
1.Пример вывода
Убедитесь, что в ответе увеличилось количество принятых событий в поле
events_received.Получите список активаций:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/activations/ | jq
Пример вывода
Найдите в ответе активацию со значением
runningв полеstatus.Получите список экземпляров активации:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/activations/<activation_id>/instances/ | jq
Здесь <activation_id> – идентификатор активации, полученный на предыдущем шаге.
Пример вывода
Найдите в ответе экземпляр со значением
runningв полеstatus.Получите журнал экземпляра активации:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/activation-instances/<instances_id>/logs/ | jq
Здесь <instances_id> – идентификатор экземпляра, полученный на предыдущем шаге.
Пример вывода
Убедитесь, что в выводе присутствует сообщение
Webhook triggered!.Проверьте аудит правил:
curl \ -H 'Authorization: Bearer <your_token>' \ https://<address>/api/eda/v1/audit-rules/?page_size=100 | jq
Пример вывода
Убедитесь, что поле
statusактивации, созданной ранее, имеет значениеsuccessful.
Заключение#
В этом сценарии показано, как с помощью API в Event-Driven Automation создать и настроить ресурсы, необходимые для запуска активации свода правил. В результате вы подготовили рабочую активацию, связали ее с потоком активности и проверили обработку тестового события. Полученный сценарий можно использовать как базовый пример для дальнейшей интеграции Event-Driven Automation с внешними источниками событий через API.