ConfigAPI
Описание
RESTful API example
Языки
- Python96,2%
- Dockerfile2,2%
- Makefile1,4%
- Shell0,2%
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:
Запросить список устройств
HTTP-метод GET
Пример Query string:
Выполнить команду на устройств
HTTP-метод POST
Обязательные параметры: id - идентификатор устройства в базе command - комманда на исполнение
Пример JSON:
Возвращает task_id - номер задачи по настройке
Узнать статус настройки
HTTP-метод GET Обязательные параметры: task_id - идентификатор задачи в базе
Пример JSON:
Пример Query string: