Producteur OSIRIS JSON pour Cisco
Le producteur Cisco pour OSIRIS JSON se connecte aux plateformes d’infrastructure Cisco (APIC, NX-OS, IOS-XE) et génère des instantanés OSIRIS JSON de la topologie de votre réseau, des appareils, des interfaces et des connexions.
Installez le répartiteur principal et le producteur Cisco :
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-cisco@latest
Le répartiteur principal vous permet d’exécuter osirisjson-producer cisco .... Sans lui, invoquez directement le binaire du fournisseur sous la forme osirisjson-producer-cisco ....
Assurez-vous que $GOPATH/bin (ou $HOME/go/bin) figure dans votre PATH. Consultez la page getting started pour plus d’options d’installation.
Plateformes prises en charge
ACI / APIC
disponibleContrôleur d'infrastructure de politique applicative
Transport : API REST
NX-OS
disponibleCommutateurs de centre de données Nexus
Transport : CLI NX-API
IOS-XE
disponibleRouteurs et commutateurs d'entreprise
Transport : NETCONF/YANG sur SSH
Utilisation de la CLI
Le producteur Cisco utilise une CLI de type répartiteur avec des sous-producteurs :
osirisjson-producer cisco <subcommand> [flags]
Mode unique
Connectez-vous à un appareil et enregistrez un document OSIRIS JSON sous la forme cisco-<type>-<timestamp>-<hostname>.json :
# Instantané de fabric ACI via APIC
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret
# Instantané d'appareil NX-OS
osirisjson-producer cisco nxos -h switch01.example.com -u admin -p secret
# Instantané d'appareil IOS-XE
osirisjson-producer cisco iosxe -h router01.example.com -u admin --insecure
Si -p / --password est omis, la CLI demande le mot de passe de manière interactive.
Mode batch
Collectez des données à partir de plusieurs appareils répertoriés dans un fichier CSV. La sortie est organisée sous forme de structure de répertoires hiérarchique : DC/Floor/Room/Zone/Hostname.json.
osirisjson-producer cisco apic -s datacenter.csv -o ./output -u admin -p secret
Générez un modèle CSV pour commencer :
osirisjson-producer cisco template --generate apic
Le modèle CSV utilise les colonnes suivantes :
| Colonne | Requise | Description |
|---|---|---|
dc | Nom du centre de données (utilisé pour la hiérarchie des dossiers de sortie) | |
floor | Identifiant de l’étage | |
room | Identifiant de la salle | |
zone | Identifiant de la zone ou du pod | |
hostname | oui | Libellé de l’appareil utilisé comme nom de fichier de sortie |
type | oui | Type de producteur : apic, nxos, iosxe |
ip | oui | Adresse IP ou FQDN de l’appareil cible |
port | Remplacer le port (par défaut : spécifique au producteur) | |
owner | self (par défaut), isp ou colo - métadonnées d’opérateur uniquement | |
notes | Notes en texte libre (ignorées par le producteur) |
Les identifiants sont fournis via les flags -u/-p et s’appliquent à toutes les cibles du batch.
Référence des flags
Flags du mode unique
| Flag | Court | Description |
|---|---|---|
--host | -h | Hôte cible (IP ou FQDN, éventuellement avec :port) |
--username | -u | Nom d’utilisateur pour l’authentification |
--password | -p | Mot de passe (omettez-le pour une invite interactive) |
--port | -P | Remplacer le port (par défaut : spécifique au producteur) |
--detail | Niveau de détail : minimal (par défaut) ou detailed | |
--insecure | Ignorer la vérification du certificat TLS | |
--safe-failure-mode | Gestion des secrets : fail-closed (par défaut), log-and-redact, off |
Flags du mode batch
| Flag | Court | Description |
|---|---|---|
--source | -s | Fichier CSV contenant les cibles |
--output | -o | Répertoire de sortie (hiérarchique : DC/Floor/Room/Zone/Hostname.json) |
--username | -u | Nom d’utilisateur par défaut pour toutes les cibles |
--password | -p | Mot de passe par défaut pour toutes les cibles |
Flags globaux
| Flag | Description |
|---|---|
--version / -v | Afficher la version et quitter |
--help | Afficher l’aide et quitter |
Ce que chaque plateforme collecte
ACI / APIC
Le producteur APIC interroge les classes MO suivantes via l’API REST :
Mode minimal :
| Classe MO | Description |
|---|---|
fabricNode | Nœuds de la fabric (contrôleurs, spines, leafs) |
topSystem | Attributs système (uptime, état, MAC de la fabric, MTU du plan de contrôle) |
firmwareRunning | Versions de firmware en cours d’exécution |
fvTenant | Définitions de tenant |
fvCtx | Contextes VRF |
fvBD | Domaines bridge |
fvSubnet | Sous-réseaux |
fvAEPg | Groupes d’endpoints applicatifs |
l3extOut | Connectivité externe L3 |
faultInst | Instances de panne actives |
Le mode détaillé ajoute :
| Classe MO | Description |
|---|---|
fvCEp | Endpoints clients (MAC, encapsulation VLAN, rattachement au leaf) |
NX-OS
Le producteur NX-OS envoie des commandes CLI NX-API dans des requêtes groupées :
Mode minimal :
| Commande | Description |
|---|---|
show version | Modèle de l’appareil, numéro de série, version de l’OS, uptime |
show inventory | Inventaire matériel (modules, alimentations, ventilateurs) |
show interface brief | Noms des interfaces, états, vitesses, VLAN |
show vlan brief | ID de VLAN, noms et interfaces membres |
show vrf all detail | Définitions VRF et interfaces membres |
show lldp neighbors detail | Découverte des voisins LLDP |
show vpc brief | Domaine vPC, état du pair, keepalive |
show port-channel summary | Configurations de port-channel |
Le mode détaillé ajoute :
| Commande | Description |
|---|---|
show interface | Statistiques complètes des interfaces (MTU, bande passante, duplex, compteurs) |
show system resources | % d’inactivité CPU, utilisation mémoire, moyennes de charge |
show environment | Alimentations, état des ventilateurs, températures |
IOS-XE
Le producteur IOS-XE utilise des RPC NETCONF/YANG sur SSH (port par défaut 830) :
Mode minimal :
| Modèle YANG | Description |
|---|---|
Cisco-IOS-XE-native | Version de l’appareil et hostname |
ietf-interfaces | Détails des interfaces |
Cisco-IOS-XE-device-hardware-oper | Inventaire matériel |
Cisco-IOS-XE-cdp-oper | Découverte des voisins CDP |
Cisco-IOS-XE-native (vrf) | Définitions VRF |
Le mode détaillé ajoute :
| Modèle YANG | Description |
|---|---|
Cisco-IOS-XE-bgp-oper | Détails des voisins BGP |
Cisco-IOS-XE-ospf-oper | Processus OSPF et état des voisins |
Cisco-IOS-XE-process-cpu-oper | Utilisation CPU |
Cisco-IOS-XE-memory-oper | Statistiques mémoire |
Structure de sortie OSIRIS JSON
Les trois producteurs émettent la même enveloppe OSIRIS JSON :
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-cisco-<platform>",
"version": "0.1.0"
},
"scope": {
"providers": ["cisco"]
}
},
"topology": {
"resources": [ ... ],
"connections": [ ... ],
"groups": [ ... ]
}
}
Types de ressources par plateforme
Les types de ressources suivent la spécification OSIRIS JSON v1.0. Les types standard sont utilisés lorsqu’ils sont définis ; les types spécifiques au fournisseur utilisent l’espace de noms osiris.cisco.*.
IOS-XE:
network.router- Appareil principal (standard)network.interface- Interfaces physiques et logiques (standard)osiris.cisco.interface.lag- Interfaces port-channel / LAG
NX-OS:
osiris.cisco.switch.spine/osiris.cisco.switch.leaf- Appareil (classé par rôle)network.interface- Interfaces physiques et logiques (standard)osiris.cisco.interface.lag- Port-channels
APIC:
osiris.cisco.controller- Contrôleurs APICosiris.cisco.switch.spine/osiris.cisco.switch.leaf- Commutateurs de fabricosiris.cisco.domain.bridge- Domaines bridgenetwork.subnet- Sous-réseaux (standard)osiris.cisco.l3out- Réseaux externes L3osiris.cisco.endpoint- Endpoints clients (mode détaillé uniquement)
Types de connexions
- IOS-XE / NX-OS:
physical.ethernetpour les liens entre interfaces découverts via CDP/LLDP - APIC:
containspour la hiérarchie de contenance des tenants,networkpour les associations de bridge domains
Types de groupes par plateforme
IOS-XE: logical.vrf
NX-OS: logical.vrf, network.vlan, network.vpc
APIC: logical.tenant, logical.vrf, osiris.cisco.epg
Découverte des connexions
- IOS-XE découvre les voisins via CDP (Cisco Discovery Protocol)
- NX-OS découvre les voisins via LLDP (Link Layer Discovery Protocol)
- APIC utilise une hiérarchie de contenance (tenants -> BDs -> sous-réseaux -> EPGs) plutôt que des liens point à point
Les appareils distants découverts via CDP/LLDP sont ajoutés comme ressources stub avec status: unknown.
Exemples
IOS-XE - appareil unique, mode minimal
osirisjson-producer cisco iosxe -h 10.99.0.1 -u admin -p secret
Sortie (tronquée) :
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-cisco-iosxe",
"version": "0.1.0"
},
"scope": {
"providers": ["cisco"]
}
},
"topology": {
"resources": [
{
"id": "cisco-iosxe-LAB-RTR01",
"type": "network.router",
"name": "LAB-RTR01",
"status": "active",
"provider": {
"name": "cisco",
"type": "ISR4451-X/K9",
"version": "16.9"
},
"extensions": {
"osiris.cisco": {
"inventory": [
{ "name": "Chassis", "description": "ISR4451-X/K9", "serial": "FDO12345678" }
]
}
}
},
{
"id": "cisco-iosxe-LAB-RTR01-GigabitEthernet0/0/0",
"type": "network.interface",
"name": "GigabitEthernet0/0/0",
"status": "active",
"properties": {
"speed": "1000000000",
"description": "WAN uplink"
}
}
],
"connections": [
{
"source": "cisco-iosxe-LAB-RTR01-GigabitEthernet0/0/0",
"target": "cisco-iosxe-stub-REMOTE-SW01-GigabitEthernet1/0/1",
"type": "physical.ethernet",
"status": "active"
}
],
"groups": [
{
"id": "cisco-iosxe-LAB-RTR01-vrf-CORP",
"type": "logical.vrf",
"name": "CORP",
"members": [
"cisco-iosxe-LAB-RTR01-GigabitEthernet0/0/0",
"cisco-iosxe-LAB-RTR01-Loopback0"
]
}
]
}
}
NX-OS - appareil unique, mode détaillé
osirisjson-producer cisco nxos -h switch01.lab -u admin -p secret --detail detailed
Sortie (tronquée) :
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-cisco-nxos",
"version": "0.1.0"
},
"scope": {
"providers": ["cisco"]
}
},
"topology": {
"resources": [
{
"id": "cisco-nxos-LAB-SW01",
"type": "osiris.cisco.switch.leaf",
"name": "LAB-SW01",
"status": "active",
"provider": {
"name": "cisco",
"type": "Nexus9000 C9508",
"version": "10.3(4a)"
},
"extensions": {
"osiris.cisco": {
"bios_version": "08.40",
"kernel_uptime": "15d 3h 22m 10s",
"cpu_idle": 85.5,
"load_avg_1min": 1.23,
"memory_used": 8192,
"memory_free": 24576,
"power_supplies": [
{ "id": "1", "model": "NXA-PAC-1100W", "watts": 350, "status": "ok" }
],
"fans": [
{ "name": "Fan1", "status": "ok" }
],
"temperatures": [
{ "sensor": "SUP slot 1", "celsius": 35.5 }
]
}
}
},
{
"id": "cisco-nxos-LAB-SW01-Ethernet1/1",
"type": "network.interface",
"name": "Ethernet1/1",
"status": "active",
"properties": {
"speed": "10000000000",
"description": "Server-facing"
}
}
],
"connections": [
{
"source": "cisco-nxos-LAB-SW01-Ethernet1/1",
"target": "cisco-nxos-stub-REMOTE-SW01-Ethernet1/49",
"type": "physical.ethernet",
"status": "active"
}
],
"groups": [
{
"id": "cisco-nxos-LAB-SW01-vlan-100",
"type": "network.vlan",
"name": "PROD",
"members": ["cisco-nxos-LAB-SW01-Ethernet1/1"]
},
{
"id": "cisco-nxos-LAB-SW01-vpc-10",
"type": "network.vpc",
"name": "vPC domain 10",
"extensions": {
"osiris.cisco": {
"role": "primary",
"peer_status": "peer-ok",
"keepalive_status": "peer-alive"
}
}
}
]
}
}
APIC - instantané de fabric ACI
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret --detail detailed
Sortie (tronquée) :
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-cisco-apic",
"version": "0.1.0"
},
"scope": {
"providers": ["cisco"]
}
},
"topology": {
"resources": [
{
"id": "cisco-apic-apic1",
"type": "osiris.cisco.controller",
"name": "apic1",
"status": "active",
"provider": {
"name": "cisco",
"type": "APIC-SERVER-M3",
"version": "6.0(2h)",
"site": "pod-1"
}
},
{
"id": "cisco-apic-spine1",
"type": "osiris.cisco.switch.spine",
"name": "spine1",
"status": "active",
"provider": {
"name": "cisco",
"type": "N9K-C9336C-FX2",
"version": "n9000-16.0(2h)",
"site": "pod-1"
},
"extensions": {
"osiris.cisco": {
"fabric_mac": "AA:BB:CC:DD:EE:01",
"control_plane_mtu": 9000,
"faults": [
{ "code": "F1527", "severity": "warning", "description": "storage full" }
]
}
}
},
{
"id": "cisco-apic-bd-bd_App",
"type": "osiris.cisco.domain.bridge",
"name": "bd_App",
"status": "active"
},
{
"id": "cisco-apic-subnet-10.0.0.1/24",
"type": "network.subnet",
"name": "10.0.0.1/24",
"status": "active"
},
{
"id": "cisco-apic-ep-AA:BB:CC:DD:EE:FF",
"type": "osiris.cisco.endpoint",
"name": "AA:BB:CC:DD:EE:FF",
"status": "active",
"properties": {
"encap": "vlan-100",
"leaf": "leaf1",
"interface": "eth1/1"
}
}
],
"groups": [
{
"id": "cisco-apic-tenant-tn_Example",
"type": "logical.tenant",
"name": "tn_Example",
"children": [
"cisco-apic-vrf-tn_Example-vrf_Main",
"cisco-apic-epg-tn_Example-epg_WEB"
]
},
{
"id": "cisco-apic-vrf-tn_Example-vrf_Main",
"type": "logical.vrf",
"name": "vrf_Main"
},
{
"id": "cisco-apic-epg-tn_Example-epg_WEB",
"type": "osiris.cisco.epg",
"name": "epg_WEB",
"members": ["cisco-apic-ep-AA:BB:CC:DD:EE:FF"]
}
]
}
}
Mode batch - collecte multi-appareils
Créez un fichier CSV d’inventaire :
dc,floor,room,zone,hostname,type,ip,port,owner,notes
AMS-01,F3,R301,POD-A,apic-01,apic,10.10.1.1,,self,Primary controller
AMS-01,F3,R301,POD-A,nx-spine-01,nxos,10.10.1.10,,self,Spine switch
AMS-01,F3,R302,POD-B,xe-router-01,iosxe,172.16.0.1,,isp,PE router
Exécutez le batch :
osirisjson-producer cisco apic -s inventory.csv -o ./output -u admin -p secret
Le répertoire de sortie obtenu :
output/
AMS-01/
F3/
R301/
POD-A/
apic-01.json
nx-spine-01.json
R302/
POD-B/
xe-router-01.json