Verwenden von REST in ENM Ericsson in Python

Guten Tag. Vor nicht allzu langer Zeit hat Ericsson das neue ENM- Managementsystem (Ericsson Network Manager) veröffentlicht, das bereits bei einigen Mobilfunkbetreibern eingeführt wurde. Es wäre interessant, einige Fragen zur Arbeit damit zu analysieren, und in diesem Artikel werden wir auf das Problem der Arbeit mit der Northbound-Schnittstelle eingehen, die zuvor (in OSS-RC) nicht angetroffen wurde, nämlich die RESTful-API. Wir werden Python und die Anforderungsbibliothek verwenden.

Funktionen wie Benutzerverwaltung, CM-Massenimport / -export, virtuelle Netzwerkfunktion, Sammlungsverwaltung, Zellenverwaltung und mehr sind über die REST-Schnittstelle verfügbar. Die ALEX-Dokumentation enthält ziemlich detaillierte Beschreibungen der Funktionen dieser API, ohne an eine Programmiersprache gebunden zu sein. Versuchen wir beispielsweise, mithilfe der Anforderungsbibliothek für Python eine Verbindung zu NBI Cell Management herzustellen. Die Schnittstellenbeschreibung finden Sie in der ALEX-Bibliothek „Konfigurationsaufgaben - CM Cell Management REST Northbound-Schnittstelle“.

Mit der angegebenen Funktionalität können Sie die Konfiguration der Zellen, die Nachbarn zwischen ihnen, die Frequenznachbarn auf den Knoten LTE, WCDMA und GSM innerhalb eines ENM steuern. Es ist auch möglich, Übergaben sowohl an benachbarte ENM als auch an OSS-RC zu verwalten.
Die RESTful-Schnittstelle ist unter folgender Adresse verfügbar:

https: // <Kundendomäne> / Konfigurationsaufgaben / v1 / Aufgaben

Die Struktur der JSON-Anforderung lautet:
  • URL anfordern: "Konfigurationsaufgaben / v1 / Aufgaben"
  • Anfragetyp: POST
  • Inhaltstyp: application / json
  • Körper: gemäß der Dokumentation für das ausgewählte Team.

Verwenden Sie in Python das Session-Objekt aus der Anforderungsbibliothek.

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

Wir gewichten es mit der erforderlichen ENM-Berechtigung und einigen „Standardeinstellungen“.

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

Lassen Sie uns eine Methode zum Senden einer REST-Anfrage erstellen.

  #        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 

Fügen Sie ENM bei Verwendung des Kontextmanagers einen automatischen Sitzungsabschluss hinzu.

  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) 

Das resultierende kleine Add-In kann in Skripten für Ihre Anforderungen verwendet werden. Beispiel: Empfangen aller Zellen eines RNC-Knotens.

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

Alle möglichen Abfragen sind in der obigen ALEX-Bibliothek beschrieben. Ich glaube nicht, dass ich es irgendwo veröffentlichen kann, aber ich werde versuchen, einige Fragen zu beantworten. Der vollständige Code ist auf GitHub verfügbar. Vielen Dank an alle, die gelesen haben.

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


All Articles