In dem Dokumentationssatz für dieses Produkt wird die Verwendung inklusiver Sprache angestrebt. Für die Zwecke dieses Dokumentationssatzes wird Sprache als „inklusiv“ verstanden, wenn sie keine Diskriminierung aufgrund von Alter, körperlicher und/oder geistiger Behinderung, Geschlechtszugehörigkeit und -identität, ethnischer Identität, sexueller Orientierung, sozioökonomischem Status und Intersektionalität impliziert. Dennoch können in der Dokumentation stilistische Abweichungen von diesem Bemühen auftreten, wenn Text verwendet wird, der in Benutzeroberflächen der Produktsoftware fest codiert ist, auf RFP-Dokumentation basiert oder von einem genannten Drittanbieterprodukt verwendet wird. Hier erfahren Sie mehr darüber, wie Cisco inklusive Sprache verwendet.
Cisco hat dieses Dokument maschinell übersetzen und von einem menschlichen Übersetzer editieren und korrigieren lassen, um unseren Benutzern auf der ganzen Welt Support-Inhalte in ihrer eigenen Sprache zu bieten. Bitte beachten Sie, dass selbst die beste maschinelle Übersetzung nicht so genau ist wie eine von einem professionellen Übersetzer angefertigte. Cisco Systems, Inc. übernimmt keine Haftung für die Richtigkeit dieser Übersetzungen und empfiehlt, immer das englische Originaldokument (siehe bereitgestellter Link) heranzuziehen.
In diesem Dokument wird eine Kurzbeschreibung von gNMI in Cisco IOS® XR sowie die Verwendung von PYANG und die Überprüfung von Modellbäumen beschrieben.
Cisco empfiehlt, dass Sie über Kenntnisse in folgenden Bereichen verfügen:
Dieses Dokument ist nicht auf bestimmte Hardwareversionen beschränkt, sondern gilt für 64-Bit-Versionen (eXR).
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die möglichen Auswirkungen aller Befehle kennen.
Insgesamt gibt es verschiedene Netzwerkkonfigurationsprotokolle, unter anderem von NETCONF, RESTCONF, gNMI (Google Remote Procedure Calls (gRPC), gRPC Network Management Interface). Diese Modelle werden für die Konfiguration der Netzwerkgeräte verwendet und dienen stets der Automatisierung mechanischer Prozesse.
Diese Protokolle verwenden unterschiedliche Datenmodelle, damit die Benutzer verstehen können, was der Netzwerkgeräteprozess verarbeitet, d. h. es handelt sich um eine strukturierte Information, ein Schema, die Informationen normalisiert und wie sie vom Gerät, in diesem Fall vom Router, verbraucht werden.
gNMI überwacht die Datenverarbeitung und stellt RPC (Remote Procedure Calls) bereit, um die verschiedenen Geräte im Netzwerk zu steuern.
gNMI verfügt über vier Funktionen:
Hinweis: Cisco hat zahlreiche Informationen zu diesem Thema weitergegeben. Weitere Informationen von gRPC erhalten Sie über den folgenden Link: xrdocs blog - OpenConfig gNMI
Netzwerkmanagement-Protokoll |
gNMI |
Genutzter Transport |
HTTP/2 |
Unterstützt von |
Kreditorenneutral |
Kodierung |
Proto Buff |
Proto Buff ist die sprachneutrale, plattformneutrale Methode zur Deserialisierung und Serialisierung von Daten zwischen zwei Geräten, bei der jede Anforderung eine Antwort hat.
Hinweis: Für weitere Informationen zu gRCP und Proto Buff klicken Sie auf den nächsten Link: grpc Guide.
Der nächste Schritt ist die Basiskonfiguration für den Router:
RP/0/RSP0/CPU0:XR(config)#grpc
RP/0/RSP0/CPU0:XR(config-grpc)#address-family ipv4
RP/0/RSP0/CPU0:XR(config-grpc)#max-request-total 256
RP/0/RSP0/CPU0:XR(config-grpc)#max-request-per-user 32
grpc
address-family ipv4
max-request-total 256
max-request-per-user 32
Hinweis: Ein Port kann basierend auf dem Setup konfiguriert werden, der Standard, ohne TLS zu verwenden ist 57400, für weitere Informationen klicken Sie auf: github - grpc Getting Started
pYANG ist ein YANG-Validator, der in Python geschrieben wurde. Diese Bibliothek für Python Unterstützung bei der Überprüfung der YANG-Modelle und auch, sie zu kennen.
Damit dies wie in der Dokumentation (pYANG-Dokumentation) ausgeführt werden kann, wird empfohlen, eine virtuelle Umgebung im Computer zu erstellen.
Ausführung der venv-Dokumentation in der virtuellen Umgebung
Folgendes ist erforderlich:
python -m venv <name of the directory>
Zum Beispiel (im MacOS-Terminal):
% mkdir test
% cd test
% python3 -m venv virtual_env
% ls
virtual_env
Um PYANG in dieser virtuellen Umgebung zu installieren, kopieren Sie das Verzeichnis, und fügen Sie den nächsten Befehl ein:
% cd virual_env
% git clone https://github.com/mbj4668/pyang.git
% cd pyang
% pip install -e .
Für diese Demonstration wurde python3 pip verwendet. Sobald pip install -e ausgegeben wurde, aktivieren Sie venv: source <Verzeichnis der virtuellen Umgebung>/bin/activate (für MacOS).
% source virtual_env/bin/activate
% python3 -m pip install pyang
Collecting pyang
Downloading pyang-2.6.0-py2.py3-none-any.whl (594 kB)
|████████████████████████████████| 594 kB 819 kB/s
Collecting lxml
Downloading lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl (4.5 MB)
|████████████████████████████████| 4.5 MB 14.2 MB/s
Installing collected packages: lxml, pyang
Successfully installed lxml-5.1.0 pyang-2.6.0
% pyang -h
Usage: pyang [options] [<filename>...]
Validates the YANG module in <filename> (or stdin), and all its dependencies.
Options:
-h, --help Show this help message and exit
-v, --version Show version number and exit
<snip>
Wenn pYANG installiert ist und funktioniert, fahren Sie mit Modellen Download.
Auf dem nächsten Link werden alle Modelle angezeigt, die auf Cisco IOS XR ausgeführt werden: die Cisco IOS XR-Modelle.
Es wird empfohlen, Clone dieses Modelle im venv-Verzeichnis mit dem nächsten Code-Link: https://github.com/YangModels/yang.git
Hinweis: Dies geschieht nicht, wenn die virtuelle Umgebung aktiviert ist.
% git clone https://github.com/YangModels/yang.git
Cloning into 'yang'...
remote: Enumerating objects: 54289, done.
remote: Counting objects: 100% (1910/1910), done.
remote: Compressing objects: 100% (323/323), done.
remote: Total 54289 (delta 1643), reused 1684 (delta 1586), pack-reused 52379
Receiving objects: 100% (54289/54289), 116.64 MiB | 8.98 MiB/s, done.
Resolving deltas: 100% (42908/42908), done.
Updating files: 100% (112197/112197), done.
Aktivieren Sie die virtuelle Umgebung erneut, und testen Sie die nächste Abfrage: pyang -f tree yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang.
(virtual_env) % pyang -f tree yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang
yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang:5: error: module "Cisco-IOS-XR-types" not found in search path
yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang:8: error: module "cisco-semver" not found in search path
module: Cisco-IOS-XR-ifmgr-cfg
+--rw global-interface-configuration
| +--rw link-status? Link-status-enum
+--rw interface-configurations
+--rw interface-configuration* [active interface-name]
+--rw dampening
| +--rw args? enumeration
| +--rw half-life? uint32
| +--rw reuse-threshold? uint32
| +--rw suppress-threshold? uint32
| +--rw suppress-time? uint32
| +--rw restart-penalty? uint32
+--rw mtus
| +--rw mtu* [owner]
| +--rw owner xr:Cisco-ios-xr-string
| +--rw mtu uint32
+--rw encapsulation
| +--rw encapsulation? string
| +--rw capsulation-options? uint32
+--rw shutdown? empty
+--rw interface-virtual? empty
+--rw secondary-admin-state? Secondary-admin-state-enum
+--rw interface-mode-non-physical? Interface-mode-enum
+--rw bandwidth? uint32
+--rw link-status? empty
+--rw description? string
+--rw active Interface-active
+--rw interface-name xr:Interface-name
Hinweis: Beachten Sie, dass Leafs ein Datenformat wie String, uint32 usw. haben, während die Roots diese Informationen nicht anzeigen. Operationen wie GET und SET sind dazu bestimmt, diese Werte zu beziehen/zu aktualisieren.
Ein weiterer Hinweis ist, dass die meisten Modelle Erweiterungen erfordern, um die vollständige Konfiguration zu erhalten. In der CLI-Ausgabe gibt es die grundlegende Schnittstellenverwaltungskonfiguration. Falls IPv4 angezeigt werden muss, verwenden Sie den nächsten Schritt:
% pyang -f tree yan2/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang yan2/vendor/cisco/xr/711/Cisco-IOS-XR-ipv4-io-cfg.yang --path=yan2/vendor/cisco/xr/711
module: Cisco-IOS-XR-ifmgr-cfg
+--rw global-interface-configuration
| +--rw link-status? Link-status-enum
+--rw interface-configurations
+--rw interface-configuration* [active interface-name]
+--rw dampening
| +--rw args? enumeration
| +--rw half-life? uint32
| +--rw reuse-threshold? uint32
| +--rw suppress-threshold? uint32
| +--rw suppress-time? uint32
| +--rw restart-penalty? uint32
+--rw mtus
| +--rw mtu* [owner]
| +--rw owner xr:Cisco-ios-xr-string
| +--rw mtu uint32
+--rw encapsulation
| +--rw encapsulation? string
| +--rw capsulation-options? uint32
+--rw shutdown? empty
+--rw interface-virtual? empty
+--rw secondary-admin-state? Secondary-admin-state-enum
+--rw interface-mode-non-physical? Interface-mode-enum
+--rw bandwidth? uint32
+--rw link-status? empty
+--rw description? string
+--rw active Interface-active
+--rw interface-name xr:Interface-name
+--rw ipv4-io-cfg:ipv4-network
| +--rw ipv4-io-cfg:bgp-pa
| | +--rw ipv4-io-cfg:input
| | | +--rw ipv4-io-cfg:source-accounting? boolean
| | | +--rw ipv4-io-cfg:destination-accounting? boolean
| | +--rw ipv4-io-cfg:output
| | +--rw ipv4-io-cfg:source-accounting? boolean
| | +--rw ipv4-io-cfg:destination-accounting? boolean
| +--rw ipv4-io-cfg:verify
| | +--rw ipv4-io-cfg:reachable? Ipv4-reachable
| | +--rw ipv4-io-cfg:self-ping? Ipv4-self-ping
| | +--rw ipv4-io-cfg:default-ping? Ipv4-default-ping
| +--rw ipv4-io-cfg:bgp
| | +--rw ipv4-io-cfg:qppb
| | | +--rw ipv4-io-cfg:input
| | | +--rw ipv4-io-cfg:source? Ipv4-interface-qppb
| | | +--rw ipv4-io-cfg:destination? Ipv4-interface-qppb
| | +--rw ipv4-io-cfg:flow-tag
| | +--rw ipv4-io-cfg:flow-tag-input
| | +--rw ipv4-io-cfg:source? boolean
| | +--rw ipv4-io-cfg:destination? boolean
| +--rw ipv4-io-cfg:addresses
| | +--rw ipv4-io-cfg:secondaries
| | | +--rw ipv4-io-cfg:secondary* [address]
| | | +--rw ipv4-io-cfg:address inet:ipv4-address-no-zone
| | | +--rw ipv4-io-cfg:netmask inet:ipv4-address-no-zone
| | | +--rw ipv4-io-cfg:route-tag? uint32
| | +--rw ipv4-io-cfg:primary!
| | | +--rw ipv4-io-cfg:address inet:ipv4-address-no-zone
| | | +--rw ipv4-io-cfg:netmask inet:ipv4-address-no-zone
| | | +--rw ipv4-io-cfg:route-tag? uint32
| | +--rw ipv4-io-cfg:unnumbered? xr:Interface-name
| | +--rw ipv4-io-cfg:dhcp? empty
| +--rw ipv4-io-cfg:helper-addresses
| | +--rw ipv4-io-cfg:helper-address* [address vrf-name]
| | +--rw ipv4-io-cfg:address inet:ipv4-address-no-zone
| | +--rw ipv4-io-cfg:vrf-name xr:Cisco-ios-xr-string
| +--rw ipv4-io-cfg:forwarding-enable? empty
| +--rw ipv4-io-cfg:icmp-mask-reply? empty
| +--rw ipv4-io-cfg:tcp-mss-adjust-enable? empty
| +--rw ipv4-io-cfg:ttl-propagate-disable? empty
| +--rw ipv4-io-cfg:point-to-point? empty
| +--rw ipv4-io-cfg:mtu? uint32
+--rw ipv4-io-cfg:ipv4-network-forwarding
+--rw ipv4-io-cfg:directed-broadcast? empty
+--rw ipv4-io-cfg:unreachables? empty
+--rw ipv4-io-cfg:redirects? empty
Bei dieser Abfrage werden zwei Modelle verwendet: Cisco-IOS-XR-ifmgr-cfg.yang und Cisco-IOS-XR-ipv4-io-cfg.yang. Nun wird die IPv4-Adresse als Leaf angezeigt.
Hinweis: Falls Sie Fehler wie: "yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang:5: error: module "Cisco-IOS-XR-types" not found in search path" (Cisco-IOS-XR-Typen nicht im Suchpfad gefunden) sehen, fügen Sie den Befehl —path= hinzu.
Mit diesem fertig und geprüft, kann jeder Benutzer Informationen mit den gNMI-Operationen anfordern und das Datum ändern, für weitere Beispiele klicken Sie auf den nächsten Link: Programmability Configuration Guide
Falls der Benutzer eine einfache API ausführen möchte, gibt es Tools wie: grpcc.
Diese API wird über NPM installiert. Dies ist das Tool, das im Programmability Configuration Guide-Link verwendet wird. Über diesen Link werden weitere Beispiele für Benutzer zum Testen von Abfragen und Antworten bereitgestellt.
Für gNMI ist es erforderlich, die Abfrage zu überprüfen, bevor Sie einen Eintrag sammeln, die meisten APIs wie:
Zeigen Sie den vom Router generierten Fehler an.
Beispiele:
"cisco-grpc:errors": {
"error": [
{
"error-type": "application",
"error-tag": "operation-failed",
"error-severity": "error",
"error-message": "'YANG framework' detected the 'fatal' condition 'Operation failed'"
}
]
}
}
ODER
"error": [
{
"error-type": "application",
"error-tag": "operation-failed",
"error-severity": "error",
"error-path": <path>,
"error-message": "'sysdb' detected the 'warning' condition 'A verifier or EDM callback function returned: 'not found''"
}
]
Hierbei handelt es sich um plattformabhängige Fehler, die entlang des Routers überprüft werden müssen. Es wird empfohlen, zu überprüfen, ob die Befehle in der Abfrage auch über die CLI im Router ausgegeben werden können.
Bei dieser Art von Fehlern oder anderen Fehlern im Zusammenhang mit der Cisco IOS XR-Plattform können Sie dem TAC folgende Informationen mitteilen:
{
"Cisco-IOS-XR-ifmgr-cfg:interface-configurations":
{ "interface-configuration": [
{
"active": "act",
"interface-name": "Loopback0",
"description": "LOCAL TERMINATION ADDRESS",
"interface-virtual": [
null
],
"Cisco-IOS-XR-ipv4-io-cfg:ipv4-network": {
"addresses": {
"primary": {
"address": "172.16.255.1",
"netmask": "255.255.255.255"
}
}
}
}
]
}
}
show grpc trace all
Testen Sie die Abfrage einige Male, und wiederholen Sie den Befehl "show grpc trace all".
Die Fehler sind variabel, zeigen aber auch die Komponente an, die ein Problem verursachen kann:
Beispiele:
Das nächste Beispiel zeigt den Prozess show tech for sysdb, der den Fehler zeigt.
show tech-support sysdb
Für diese Ausgabe, die Fehler-Anzeige eine Komponente und der Fehler, sammeln alle show tech-support, die auf den Fehler in Zusammenhang stehen kann angezeigt werden.
Nachdem diese Informationen gesammelt wurden, fügen Sie auch den nächsten Befehlssatz hinzu:
In XR VM:
show tech-support tctcpsr
show tech-support grapcc
show tech-support gsp
show tech-support
Überarbeitung | Veröffentlichungsdatum | Kommentare |
---|---|---|
1.0 |
15-Feb-2024 |
Erstveröffentlichung |