Usando REST en ENM Ericsson en Python

Hola No hace mucho tiempo, Ericsson lanzó el nuevo sistema de gestión Ericsson Network Manager ( ENM ), que ya apareció en algunos operadores móviles. Sería interesante analizar algunas preguntas sobre cómo trabajar con él y, en este artículo, abordaremos el tema de trabajar con la interfaz Northbound, que no se había encontrado previamente (en OSS-RC), es decir, la API RESTful. Utilizaremos python y la biblioteca de solicitudes.

Las funciones como la administración de usuarios, la importación / exportación masiva de CM, la función de red virtual, la gestión de colecciones, la gestión de células y más están disponibles a través de la interfaz REST. La documentación de ALEX contiene descripciones bastante detalladas de las capacidades de esta API sin estar vinculada a un lenguaje de programación. Como ejemplo, intentemos conectarnos a NBI Cell Management usando la biblioteca de solicitudes para python. La descripción de la interfaz está disponible en la biblioteca de ALEX "Tareas de configuración - CM Cell Management REST Northbound Interface".

La funcionalidad especificada le permite controlar la configuración de las celdas, los vecinos entre ellas, los vecinos de frecuencia en los nodos LTE, WCDMA y GSM dentro de un ENM. También es posible gestionar transferencias tanto hacia ENM vecino como hacia OSS-RC.
La interfaz RESTful está disponible en la siguiente dirección:

https: // <dominio-cliente> / configuration-tareas / v1 / tareas

La estructura de la solicitud JSON es:
  • URL de solicitud: "configuración-tareas / v1 / tareas"
  • Tipo de solicitud: POST
  • Tipo de contenido: aplicación / json
  • Cuerpo: según la documentación del equipo seleccionado.

En python, use el objeto Session de la biblioteca de solicitudes.

import requests import json from requests.packages.urllib3.exceptions import InsecureRequestWarning from requests import Session from requests.exceptions import HTTPError class enmRestSession(Session): 

Lo sopesamos con la autorización ENM requerida y algunas "configuraciones predeterminadas".

  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() 

Hagamos un método para enviar una solicitud 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 

Agregue el cierre de sesión automático a ENM cuando use el administrador de contexto.

  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) 

El pequeño complemento resultante se puede usar en scripts para sus necesidades. Por ejemplo, recibir todas las celdas de un nodo 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()) 

Todas las consultas posibles se describen en la biblioteca ALEX anterior. No creo que pueda publicarlo en ningún lado, pero intentaré responder algunas preguntas. El código completo está disponible en GitHub . Gracias a todos los que leyeron.

Source: https://habr.com/ru/post/465691/


All Articles