ConfigAPI

Форк
0

3 года назад
3 года назад
3 года назад
3 года назад
3 года назад
3 года назад
3 года назад
3 года назад
3 года назад
3 года назад
README.md

RESTful API

Это демонстрационное API. В роли веб-сервера выступает Gunicorn, обрабатывает запросы фреймворк flask. Работы с базой данных осуществляется с помощью SQLAlchemy. Исполнение команд происходит через очереди RabbitMQ, с помощью фреймворка Celery. Поключение к устройствам с помощью библиотеки ncclient (имитация). Перед выполнением задачи, проверяется отсутствие состояния гонки (race condition)

Запуск

Сбор образов,запуск всех необходимых контейнеров осуществляется с помощью команды:

docker-compose up -d

Pre-commit hook

make pre-commit

API доступно по URL: http://localhost:7500/api/v1.0/

HTTP аутентификация

Доступ к порталу ограничивается базовой HTTP аутентификацией. Для добавления пользователя необходимо сгенерировать SHA512 хэш из пароля:

# echo -n "password" | openssl dgst -sha512 (stdin)= b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86

и добавить логин и хэш в файл конфигурации config.ini в раздел Users:

[Users] user: b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86

чтение конфигурационного файла происходит один раз при запуске. Дефолтные реквизиты: user/user

Данные для демонстрации

Таблица network.devices заполняется из файла example_data.csv (вымышленные устройства) В вызове функций имитируются подключение и конфигурирование сетевых устройств.

Логи

Директория с логами из контейнера монтируется по пути

/var/log/confapi/

Примеры запросов

Посмотреть доступный функционал

HTTP-метод GET

Пример URL:

curl -u user:user -i -X GET "http://localhost:7500/api/v1.0/functions"
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 135
Server: Werkzeug/2.0.2 Python/3.10.0
Date: Sun, 09 Jan 2022 16:09:25 GMT
{
"api_version": "0.0.1",
"data": [
"/devices",
"/status",
"/execute"
],
"msg": "OK",
"status": "success"

Запросить список устройств

HTTP-метод GET

Пример Query string:

curl -u user:user -i -X GET "http://localhost:7500/api/v1.0/devices"
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 1146
Server: Werkzeug/2.0.2 Python/3.10.0
Date: Sun, 09 Jan 2022 17:59:16 GMT
{
"api_version": "0.0.1",
"data": [
{
"description": "TOR for dedicated servers",
"id": 1,
"ip": "10.1.1.192",
"location": "1-1-25",
"model": "EX3400",
"name": "TOR-25",
"role": "access",
"type": "switch",
"vendor": "juniper"
},
{
"description": "Aggregation for shared hosting",
"id": 2,
"ip": "10.1.0.50",
"location": "1-1-1",
"model": "NEXUS6001",
"name": "AGGREGATION-2",
"role": "aggregation",
"type": "switch",
"vendor": "cisco"
},
{
"description": "First spine for cloud",
"id": 3,
"ip": "10.2.0.10",
"location": "2-2-1",
"model": "QFX5120-32C",
"name": "SPINE-1",
"role": "spine",
"type": "switch",
"vendor": "juniper"
},
{
"description": "Border router in DC2",
"id": 4,
"ip": "10.2.0.2",
"location": "2-1-1",
"model": "MX-480",
"name": "ASBR-4",
"role": "asbr",
"type": "router",
"vendor": "juniper"
}
],
"msg": "OK",
"status": "success"
}

Выполнить команду на устройств

HTTP-метод POST

Обязательные параметры: id - идентификатор устройства в базе command - комманда на исполнение

Пример JSON:

curl -u user:user -i -H "Content-Type: application/json" -X POST -d '{"id": 2, "command": "show version" }' http://localhost:7500/api/v1.0/execute
HTTP/1.0 201 CREATED
Content-Type: application/json
Content-Length: 104
Server: Werkzeug/2.0.2 Python/3.10.0
Date: Sun, 09 Jan 2022 18:04:34 GMT
{
"api_version": "0.0.1",
"data": {
"task_id": 4
},
"msg": "OK",
"status": "success"
}

Возвращает task_id - номер задачи по настройке

Узнать статус настройки

HTTP-метод GET Обязательные параметры: task_id - идентификатор задачи в базе

Пример JSON:

curl -u user:user -i -H "Content-Type: application/json" -X POST -d '{"task_id": 9}' http://localhost:7500/api/v1.0/status

Пример Query string:

curl -u user:user -i -X GET "http://localhost:7500/api/v1.0/status?task_id=1"
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 324
Server: Werkzeug/2.0.2 Python/3.10.0
Date: Sun, 09 Jan 2022 17:58:53 GMT
{
"api_version": "0.0.1",
"data": {
"command": "show version",
"created_at": "Sun, 09 Jan 2022 17:58:46 GMT",
"device_id": 2,
"last_changed": "Sun, 09 Jan 2022 17:58:47 GMT",
"msg": "DeviceConnectionError",
"status": "error",
"task_id": 1
},
"msg": "OK",
"status": "success"
}

Описание

RESTful API example

Языки

Python

  • Dockerfile
  • Makefile
  • Shell
Сообщить о нарушении

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.