Usando REST no ENM Ericsson em Python

Olá. Há pouco tempo, a Ericsson lançou o novo sistema de gerenciamento Ericsson Network Manager ( ENM ), que já apareceu em algumas operadoras de celular. Seria interessante analisar algumas perguntas sobre como trabalhar com ele e, neste artigo, abordaremos o problema de trabalhar com a Interface Northbound, que não foi encontrada anteriormente (no OSS-RC), a API RESTful. Usaremos python e a biblioteca de solicitações.

Funções como administração de usuários, importação / exportação em massa de CM, função de rede virtual, gerenciamento de coleções, gerenciamento de células e mais estão disponíveis através da interface REST. A documentação ALEX contém descrições bastante detalhadas dos recursos dessa API sem estar vinculada a uma linguagem de programação. Como exemplo, vamos tentar se conectar ao NBI Cell Management usando a biblioteca de solicitações para python. A descrição da interface está disponível na biblioteca ALEX “Tarefas de configuração - Interface REST do Northeast CM Cell Management”.

A funcionalidade especificada permite controlar a configuração das células, os vizinhos entre eles, os vizinhos de frequência nos nós LTE, WCDMA e GSM dentro de um ENM. Também é possível gerenciar transferências tanto para ENMs vizinhas quanto para OSS-RC.
A interface RESTful está disponível no seguinte endereço:

https: // <domínio-cliente> / tarefas-de-configuração / v1 / tarefas

A estrutura da solicitação JSON é:
  • URL de solicitação: "configuration-tasks / v1 / tasks"
  • Tipo de solicitação: POST
  • Tipo de Conteúdo: application / json
  • Órgão: de acordo com a documentação para a equipe selecionada.

Em python, use o objeto Session da biblioteca de solicitações.

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

Nós o ponderamos com a autorização ENM necessária e algumas "configurações padrão".

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

Vamos criar um método para enviar uma solicitação 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 

Adicione o encerramento automático da sessão ao ENM ao usar o gerenciador 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) 

O pequeno suplemento resultante pode ser usado em scripts para suas necessidades. Por exemplo, recebendo todas as células de um nó 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 as consultas possíveis são descritas na biblioteca ALEX acima. Acho que não posso publicá-lo em nenhum lugar, mas tentarei responder a algumas perguntas. O código completo está disponível no GitHub . Obrigado a todos que leram.

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


All Articles