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 de 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 en is van toepassing op 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.
In het algemeen zijn er verschillende netwerkconfiguratieprotocollen, zoals NETCONF, RESTCONF, gNMI (Google Remote Procedure Calls (gRPC), gRPC Network Management Interface). Deze modellen worden gebruikt om te configureren om de netwerkapparaten te beheren en altijd te streven naar automatisering van processen die mechanisch kunnen zijn.
Deze protocollen maken gebruik van verschillende gegevensmodellen om de gebruikers te laten begrijpen wat het netwerkapparaat verwerkt, met andere woorden, het is een gestructureerde informatie, een schema, dat informatie normaliseert en hoe het wordt verbruikt door het apparaat, in dit geval de router.
GNMI houdt toezicht op de gegevensverwerking en levert 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. Klik op de volgende link: xrdocs blog - OpenConfig gNMI
Netwerkbeheerprotocol |
GNMI |
Gebruikt transport |
HTTP 2/3 |
Ondersteund door |
Neutraal voor leveranciers |
Codering |
Proto Buff |
Proto Buff is de taal-neutrale, platform-neutrale methode van de-serialiseren en serialiseren van gegevens tussen twee apparaten, waarin elk verzoek een antwoord heeft.
Opmerking: Voor meer informatie in gRCP en Proto Buff klik op de volgende link: grpc Guide.
Het 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 TLS te gebruiken is 57400, voor meer informatie klik: github - grpc
pYANG is een YANG validator geschreven in python. Deze bibliotheek voor python assisteert bij het controleren van de YANG modellen en ook, het kennen van hen.
Om deze functie uit te voeren zoals in de documentatie (pYANG-documentatie) wordt voorgesteld om een virtuele omgeving in de computer te creëren.
Documentatie voor virtuele omgeving venv uitvoeren
De applicatie moet werken:
python -m venv <name of the directory>
Bijvoorbeeld (in MacOS terminal):
% mkdir test
% cd test
% python3 -m venv virtual_env
% ls
virtual_env
Zo installeert u pYANG in deze virtuele omgeving cd in de directory en plakt u het 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 installeert -e wordt uitgegeven, activeert de venv: source <virtual environment directory>/bin/activation (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] [<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>
Met geïnstalleerd en werkend PYANG, ga met modellen verder downloaden.
In de volgende link zijn er alle modellen die Cisco IOS XR gebruikt: Cisco IOS XR-modellen.
Aanbevolen wordt om deze modellen in de venv-directory te klonen met de volgende codelink: https://github.com/YangModels/yang.git
Opmerking: dit gebeurt niet wanneer de virtuele omgeving is 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: Merk op dat bladeren een gegevensindeling hebben zoals String, uint32, enzovoort; terwijl roots deze informatie niet weergeven. Operaties zoals GET en SET zijn gewijd aan pull/update deze waarden.
Een andere opmerking is dat de meeste modellen moeten worden uitgebreid om de volledige configuratie te hebben, in de CLI-output is er de basisconfiguratie voor interfacebeheer, voor het geval dat IPv4 moet worden weergegeven, gebruik 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: voor het geval u een fout ziet zoals: "yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang:5: fout: module "Cisco-IOS-XR-types" niet gevonden in zoekpad" voeg de —path= in de opdracht toe.
Met dit gedaan en gecontroleerd, kan elke gebruiker informatie aanvragen met de gNMI-bewerkingen en de wijzigingsdatum, voor meer voorbeelden klik op de volgende link: Programmability Configuration Guide
In het geval dat de gebruiker een eenvoudige API wil uitvoeren, zijn er tools zoals: grpcc.
Deze API is geïnstalleerd via NPM, dit is de tool gebruikt in de koppeling Programmability Configuration Guide, genoemde link deelt meer voorbeelden voor gebruikers om vragen en antwoorden te testen.
Voor gNMI is het vereist om de query te controleren voordat het verzamelen van een ingang, de meeste van de API's zoals:
Al, toon de fout die de router produceerde.
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": <path>,
"error-message": "'sysdb' detected the 'warning' condition 'A verifier or EDM callback function returned: 'not found''"
}
]
Dit zijn Platform-afhankelijke fouten die langs de router moeten worden gecontroleerd. Aanbevolen wordt om te controleren dat de opdrachten in de query ook in de router via de CLI kunnen worden uitgegeven.
Voor dit type fouten of voor andere fouten die betrekking hebben op het Cisco IOS XR-platform, wordt de volgende informatie over TAC gedeeld:
{
"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 "show grpc trace all".
De fouten zijn variabel, maar ze tonen ook de component die een probleem kan genereren:
Voorbeeld:
Het volgende voorbeeld toont de show technologie voor sysdb proces die de fout tonen.
show tech-support sysdb
Voor deze output, de fout een component en de fout toont, verzamel om het even welke show technologie-steun die met de fout kan worden verwant die wordt getoond.
Nadat deze informatie is verzameld, voegt u ook de volgende set opdrachten toe:
In XR VM:
toon tech-support tccpr
show tech-support grpcc
laat het sap voor technische ondersteuning zien
laten zien dat technologie ondersteuning biedt
Revisie | Publicatiedatum | Opmerkingen |
---|---|---|
1.0 |
15-Feb-2024 |
Eerste vrijgave |