Асинхронная библиотека для работы с API Mikrotik

Категорически приветствую.

Недавно мне понадобилось поработать с Mikrotik через его API. Вроде бы ничего примечательного, есть официальная библиотека, есть еще на гитхабе обёртка, но вот беда — мне надо было работать асинхронно через asyncio и c использованием плюшек async/await. И такой библиотеки я не нашел.

Пришлось писать самому.

Сильно длинной статья не будет, т. к. особо и не о чем писать. И вполне достаточно было бы ссылки на репозиторий.

Установка пакета:

pip install aio_api_ros

Вот пример использования:

import asyncio
from aio_api_ros import create_rosapi_connection

async def main():
    # устанавливаем коннект
    mk = await create_rosapi_connection(
        mk_ip='127.0.0.1',
        mk_port=8728,
        mk_user='myuser',
        mk_psw='mypassword'
    )
    # отправляем команду
    mk.talk_word('/ip/hotspot/active/print')
    # считываем ответ от микротика
    res = await mk.read()
    print(res)
    mk.close()


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()

Также есть возможно создать простенький пул коннектов до микротика, но в боевых условия пул не тестился.

Тот же пример но с пулом коннектов
import asyncio
from aio_api_ros import create_rosapi_simple_pool

async def main():

    mk = await create_rosapi_simple_pool(
        mk_ip='127.0.0.1',
        mk_port=8728,
        mk_user='myuser',
        mk_psw='mypassword',
        max_size=4
    )

    await mk.talk_word('/ip/hotspot/active/print')
    res = await mk.read()
    print(res)
    mk.close()


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()


Для парсинга ответов от микрота я воспользовался наработками из этого репозитория

Надеюсь, кому-то это окажется полезным.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 9

    –4

    А можно названия функций сделать ещё длиннее? Чтобы потруднее было набирать.

      0

      Судя по минусам многие любят писать
      create_rosapi_connection за место создания экземпляра объекта из определенного пространства имен и использования методов типа read и write или send и recieve.

        0
        from aio_api_ros import create_rosapi_connection as crc

          0

          Проблема при этом останется. Вот паттерн из многих подобных библиотек.


          from aio_ros import Connection


          conn = Connection(...)
          resp = conn.send(...)

      0
      эмммммм, а что мешало посмотреть инфу по хотспотам просто подключившись к микроту по ssh, или через вебморду, ну или через тот же винбокс?)
        0
        Ну, например, есть свой микросервис, который должен логинить юзеров на разные микроты, через апи
          0
          а зачем для этого апи, если всё нужное и так есть в микроте?) Просто на данный момент вижу, что приходится тратить лишнее время на написание команд для подключения к микроту ради выполнения на нем действий, предусмотренными его же синтаксисом
            0
            Ну, возникла производственная необходимость встроить этот функционал в приложение на торнаде
              0
              api Mikrotik и так есть в Mikrotik)) Написание команд для ssh, тут равносильно реализации работы с api Mikrotik. ssh, web-интерфейс — это для человека — администратора, api — для автоматизации. Использование api для автоматизации действий с Mikrotik это правильный подход, нежели использовать для этого ssh, web-интерфейс.

          Only users with full accounts can post comments. Log in, please.