De documentatie van dit product is waar mogelijk geschreven met inclusief taalgebruik. Inclusief taalgebruik wordt in deze documentatie gedefinieerd als taal die geen discriminatie op basis van leeftijd, handicap, gender, etniciteit, seksuele oriëntatie, sociaaleconomische status of combinaties hiervan weerspiegelt. In deze documentatie kunnen uitzonderingen voorkomen vanwege bewoordingen die in de gebruikersinterfaces van de productsoftware zijn gecodeerd, die op het taalgebruik in de RFP-documentatie zijn gebaseerd of die worden gebruikt in een product van een externe partij waarnaar wordt verwezen. Lees meer over hoe Cisco gebruikmaakt van inclusief taalgebruik.
Cisco heeft dit document vertaald via een combinatie van machine- en menselijke technologie om onze gebruikers wereldwijd ondersteuningscontent te bieden in hun eigen taal. Houd er rekening mee dat zelfs de beste machinevertaling niet net zo nauwkeurig is als die van een professionele vertaler. Cisco Systems, Inc. is niet aansprakelijk voor de nauwkeurigheid van deze vertalingen en raadt aan altijd het oorspronkelijke Engelstalige document (link) te raadplegen.
Dit document beschrijft een korte beschrijving van gNMI in Cisco IOS® XR en hoe u PYANG kunt gebruiken en modelbomen kunt controleren.
Cisco raadt kennis van de volgende onderwerpen aan:
Dit document is niet beperkt tot specifieke hardwareversies die van toepassing zijn op de 64-bits versie (eXR).
De informatie in dit document is gebaseerd op de apparaten in een specifieke laboratoriumomgeving. Alle apparaten die in dit document worden beschreven, hadden een opgeschoonde (standaard)configuratie. Als uw netwerk live is, moet u zorgen dat u de potentiële impact van elke opdracht begrijpt.
Over het algemeen zijn er verschillende netwerkconfiguratieprotocollen, van NETCONF, RESTCONF, gNMI (Google Remote Procedure Calls (gRPC), gRPC Network Management Interface), onder andere. Deze modellen worden gebruikt om te configureren om de netwerkapparaten te beheren en streven er altijd naar om processen te automatiseren die mechanisch kunnen zijn.
Deze protocollen maken gebruik van verschillende gegevensmodellen om de gebruikers in staat te stellen te begrijpen wat het netwerkapparaat verwerkt, met andere woorden, het is een gestructureerde informatie, een schema, dat informatie normaliseert en hoe deze wordt verbruikt door het apparaat, in dit geval de router.
gNMI houdt toezicht op de gegevensverwerking en biedt RPC (Remote Procedure Calls) om de verschillende apparaten in het netwerk te bedienen.
gNMI heeft vier functies:
Opmerking: Cisco heeft veel informatie over dit onderwerp gedeeld. Voor meer informatie van gRPC, klik op de volgende link: xrdocs blog - OpenConfig gNMI
netwerkbeheerprotocol |
gNMI |
Gebruikt transport |
HTTP/2 |
Ondersteund door |
Vendor Neutral |
codering |
Proto Buff |
Proto Buff is de taal-neutrale, platform-neutrale methode voor het de-serialiseren en serialiseren van gegevens tussen twee apparaten, waarbij elk verzoek een antwoord heeft.
Opmerking: klik voor meer informatie in gRCP en Proto Buff op de volgende link: grpc Guide.
De volgende is de basisconfiguratie voor de 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
Opmerking: Een poort kan worden geconfigureerd op basis van de installatie, de standaard, zonder gebruik van TLS is 57400, voor meer informatie klik op: github - grpc aan de slag
pYANG is een YANG-validator geschreven in python. Deze bibliotheek voor python helpt bij het controleren van de YANG-modellen en ook bij het kennen ervan.
Om dit uit te voeren zoals in de documentatie (pYANG-documentatie) wordt voorgesteld om een virtuele omgeving in de computer te maken.
Voor virtuele omgevingen om venv-documentatie uit te voeren
Het is noodzakelijk om te draaien:
python -m venv
Bijvoorbeeld (in MacOS-terminal):
% mkdir test
% cd test
% python3 -m venv virtual_env
% ls
virtual_env
Om pYANG te installeren in deze virtuele omgeving cd naar de directory en plak de volgende:
% cd virual_env
% git clone https://github.com/mbj4668/pyang.git
% cd pyang
% pip install -e .
Voor deze demonstratie werd python3 pip gebruikt, zodra de pip install -e is uitgegeven, activeer de venv: source <virtual environment directory>/bin/activate (voor 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] [...]
Validates the YANG module in (or stdin), and all its dependencies.
Options:
-h, --help Show this help message and exit
-v, --version Show version number and exit
Met pYANG geïnstalleerd en werken, ga verder met het downloaden van modellen.
In de volgende link staan alle modellen die Cisco IOS XR draait: Cisco IOS XR modellen.
Het wordt aanbevolen om deze modellen in de venv-directory te klonen met de volgende codelink: https://github.com/YangModels/yang.git
Opmerking: dit wordt niet gedaan met de virtuele omgeving geactiveerd.
% 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.
Activeer de virtuele omgeving opnieuw en test de volgende query: 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
Opmerking: Observeer dat bladeren een gegevensindeling hebben zoals String, uint32, enzovoort; terwijl roots deze informatie niet weergeeft. Bewerkingen zoals GET en SET zijn bedoeld om deze waarden te trekken / bij te werken.
Een andere opmerking is dat de meeste modellen augments nodig hebben om de volledige configuratie te hebben, in de CLI-uitvoer is er de basisconfiguratie voor interfacebeheer, in het geval dat IPv4 moet worden weergegeven, gebruikt u de volgende:
% 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
In deze query worden twee modellen gebruikt: Cisco-IOS-XR-ifmgr-cfg.yang en Cisco-IOS-XR-ipv4-io-cfg.yang, en nu wordt het IPv4-adres weergegeven als een blad.
Opmerking: als u een fout ziet zoals: "yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang:5: error: module "Cisco-IOS-XR-types" niet gevonden in zoekpad", voegt u het --path= in de opdracht toe.
Als dit is gedaan en is aangevinkt, kan elke gebruiker informatie opvragen bij de gNMI-bewerkingen en de datum wijzigen, voor meer voorbeelden klikt u op de volgende link: Programmability Configuration Guide
Als de gebruiker een eenvoudige API wil uitvoeren, zijn er tools zoals: grpcc.
Deze API wordt geïnstalleerd via NPM, dit is de tool die wordt gebruikt in de koppeling Programmability Configuration Guide, die link deelt meer voorbeelden voor gebruikers om vragen en antwoorden te testen.
Voor gNMI is het vereist om de query te controleren voordat u een item verzamelt, de meeste API's zoals:
Geef de fout weer die de router heeft gegenereerd.
Voorbeeld:
"cisco-grpc:errors": {
"error": [
{
"error-type": "application",
"error-tag": "operation-failed",
"error-severity": "error",
"error-message": "'YANG framework' detected the 'fatal' condition 'Operation failed'"
}
]
}
}
OF
"error": [
{
"error-type": "application",
"error-tag": "operation-failed",
"error-severity": "error",
"error-path": ,
"error-message": "'sysdb' detected the 'warning' condition 'A verifier or EDM callback function returned: 'not found''"
}
]
Dit zijn platformafhankelijke fouten die langs de router moeten worden gecontroleerd. Het wordt aanbevolen om te controleren of de opdrachten in de query ook via de CLI in de router kunnen worden uitgegeven.
Voor dit type fouten of andere fouten die verband houden met het Cisco IOS XR-platform, deelt u de volgende informatie met TAC:
{
"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
Test de query een paar keer en herhaal de opdracht "toon grpc trace all".
De fouten zijn variabel, maar ze tonen ook de component die een probleem kan veroorzaken:
Voorbeeld:
Het volgende voorbeeld toont het show tech for sysdb-proces dat de fout toont.
show tech-support sysdb
Voor deze uitvoer geeft de fout een component weer en verzamelt de fout elke technische ondersteuning die kan worden gerelateerd aan de weergegeven fout.
Nadat deze informatie is verzameld, voegt u ook de volgende set opdrachten toe:
In XR VM:
Toon technische ondersteuning voor TCTCPr
Toon technische ondersteuning GRPCC
Toon technische ondersteuning SAP
Toon technische ondersteuning
Revisie | Publicatiedatum | Opmerkingen |
---|---|---|
1.0 |
15-Feb-2024
|
Eerste vrijgave |