Через REST интерфейс доступны такие функции как: администрирование пользователей, CM Bulk Import/Export, Virtual Network Function, управление коллекциями, управление сотами и прочее. В документации ALEX есть достаточно подробные описания возможностей данного API без привязки к языку программирования. В качестве примера попробуем подключиться к NBI Cell Management используя библиотеку requests для python. Описание интерфейса доступно в библиотеке ALEX «Configuration Tasks — CM Cell Management REST Northbound Interface».
Указанный функционал позволяет управлять конфигурацией сот, соседствами между ними, частотными соседствами на узлах LTE, WCDMA и GSM внутри одного ENM. Также возможно управление хэндоверами как в сторону соседних ENM, так и в сторону OSS-RC.
RESTful интерфейс доступен по следующему адресу:
https://<customer-domain>/configuration-tasks/v1/tasks
Структура JSON запроса имеет вид:
- Request URL: «configuration-tasks/v1/tasks»
- Request Type: POST
- Content Type: application/json
- Body: в соответствии с документацией для выбранной команды.
В python воспользуемся объектом Session из библиотеки requests.
import requests import json from requests.packages.urllib3.exceptions import InsecureRequestWarning from requests import Session from requests.exceptions import HTTPError class enmRestSession(Session):
Обвешаем его требуемой ENM авторизацией и некоторыми «настройками по-умолчанию».
def __init__(self, enm, login, password): super().__init__() # добавляем / если забыли его указать при создании объекта self.enm = enm if enm[-1] == "/" else f"{enm}/" # устанавливаем заголовки self.headers.update({"Content-Type": "application/json"}) # отключаем проверку https сертификата self.verify = False # отключаем предупреждения безопасности requests.packages.urllib3.disable_warnings(InsecureRequestWarning) # авторизуем сессию на ENM login_str = f"{enm}login?IDToken1={login}&IDToken2={password}" rest_response = self.post(login_str) # при неудачной авторизации поднимаем исключение if rest_response.status_code != requests.codes.ok: raise HTTPError()
Оформим метод отправки REST запроса.
# в качестве параметра передаём в функцию словарь request_body def send_configuration_task(self, request_body): url = f"{self.enm}configuration-tasks/v1/tasks" # отправляем запрос методом POST используя сформированный выше URL resp = self.post(url, data=json.dumps(request_body)) return resp
Добавим автоматическое закрытие сессии в ENM при использовании контекстного менеджера.
def __exit__(self, exc_type, exc_val, exc_tb): try: # для закрытия сессии достаточно послать logout self.get(f"{self.enm}logout") finally: super().__exit__(self, exc_type, exc_val, exc_tb)
Получившуюся небольшую надстройку можно использовать в скриптах для своих нужд. Например получение всех сот узла RNC.
def main(): param = {"name": "readCells", "fdn": "NetworkElement=RNC01"} with enmRestSession( "https://iegtbl8030-7.gtoss.eng.ericsson.se/", "login", "pass" ) as s: print(s.send_configuration_task(param).json())
Описание всех возможный запросов есть в указанной выше библиотеке ALEX. Не думаю что могу опубликовать её где-нибудь, но на какие-то вопросы постараюсь ответить. Полный код доступен на GitHub. Спасибо всем кто прочитал.
ссылка на оригинал статьи https://habr.com/ru/post/465691/