Producer OSIRIS JSON per Cisco
Il producer Cisco di OSIRIS JSON si connette alle piattaforme di infrastruttura Cisco (APIC, NX-OS, IOS-XE) e genera snapshot OSIRIS JSON della topologia della rete, dei dispositivi, delle interfacce e delle connessioni.
Installa il dispatcher core e il producer Cisco:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-cisco@latest
Il dispatcher core consente di eseguire osirisjson-producer cisco .... Senza di esso, richiama direttamente il binario del vendor come osirisjson-producer-cisco ....
Assicurati che $GOPATH/bin (o $HOME/go/bin) sia nel tuo PATH. Consulta la pagina getting started per ulteriori opzioni di installazione.
Piattaforme supportate
ACI / APIC
disponibileApplication Policy Infrastructure Controller
Trasporto: API REST
NX-OS
disponibileSwitch Nexus per data center
Trasporto: CLI NX-API
IOS-XE
disponibileRouter e switch enterprise
Trasporto: NETCONF/YANG su SSH
Utilizzo della CLI
Il producer Cisco utilizza una CLI in stile dispatcher con sottoproduttori:
osirisjson-producer cisco <subcommand> [flags]
Modalità singola
Connettiti a un dispositivo e salva un documento OSIRIS JSON come cisco-<type>-<timestamp>-<hostname>.json:
# Snapshot della fabric ACI tramite APIC
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret
# Snapshot del dispositivo NX-OS
osirisjson-producer cisco nxos -h switch01.example.com -u admin -p secret
# Snapshot del dispositivo IOS-XE
osirisjson-producer cisco iosxe -h router01.example.com -u admin --insecure
Se -p / --password viene omesso, la CLI richiede l’inserimento in modo interattivo.
Modalità batch
Raccogli dati da più dispositivi elencati in un file CSV. L’output è organizzato come struttura gerarchica di directory: DC/Floor/Room/Zone/Hostname.json.
osirisjson-producer cisco apic -s datacenter.csv -o ./output -u admin -p secret
Genera un modello CSV per iniziare:
osirisjson-producer cisco template --generate apic
Il modello CSV utilizza queste colonne:
| Colonna | Obbligatoria | Descrizione |
|---|---|---|
dc | Nome del data center (usato per la gerarchia delle cartelle di output) | |
floor | Identificatore del piano | |
room | Identificatore della stanza | |
zone | Identificatore della zona o del pod | |
hostname | sì | Etichetta del dispositivo usata come nome del file di output |
type | sì | Tipo di producer: apic, nxos, iosxe |
ip | sì | Indirizzo IP o FQDN del dispositivo di destinazione |
port | Sostituisce la porta (predefinita: specifica del producer) | |
owner | self (predefinito), isp o colo - solo metadati dell’operatore | |
notes | Note in testo libero (ignorate dal producer) |
Le credenziali sono fornite tramite i flag -u/-p e si applicano a tutte le destinazioni del batch.
Riferimento dei flag
Flag della modalità singola
| Flag | Breve | Descrizione |
|---|---|---|
--host | -h | Host di destinazione (IP o FQDN, facoltativamente con :port) |
--username | -u | Nome utente per l’autenticazione |
--password | -p | Password (ometti per il prompt interattivo) |
--port | -P | Sostituisce la porta (predefinita: specifica del producer) |
--detail | Livello di dettaglio: minimal (predefinito) o detailed | |
--insecure | Salta la verifica del certificato TLS | |
--safe-failure-mode | Gestione dei segreti: fail-closed (predefinito), log-and-redact, off |
Flag della modalità batch
| Flag | Breve | Descrizione |
|---|---|---|
--source | -s | File CSV con le destinazioni |
--output | -o | Directory di output (gerarchica: DC/Floor/Room/Zone/Hostname.json) |
--username | -u | Nome utente predefinito per tutte le destinazioni |
--password | -p | Password predefinita per tutte le destinazioni |
Flag globali
| Flag | Descrizione |
|---|---|
--version / -v | Mostra la versione ed esce |
--help | Mostra la guida ed esce |
Cosa raccoglie ogni piattaforma
ACI / APIC
Il producer APIC interroga le seguenti classi MO tramite l’API REST:
Modalità minimal:
| Classe MO | Descrizione |
|---|---|
fabricNode | Nodi fabric (controller, spine, leaf) |
topSystem | Attributi di sistema (uptime, stato, MAC fabric, MTU del control plane) |
firmwareRunning | Versioni del firmware in esecuzione |
fvTenant | Definizioni dei tenant |
fvCtx | Contesti VRF |
fvBD | Bridge domain |
fvSubnet | Sottoreti |
fvAEPg | Gruppi di endpoint applicativi |
l3extOut | Connettività esterna L3 |
faultInst | Istanze di fault attive |
La modalità detailed aggiunge:
| Classe MO | Descrizione |
|---|---|
fvCEp | Endpoint client (MAC, encapsulamento VLAN, associazione leaf) |
NX-OS
Il producer NX-OS invia comandi CLI NX-API in richieste raggruppate:
Modalità minimal:
| Comando | Descrizione |
|---|---|
show version | Modello del dispositivo, numero di serie, versione OS, uptime |
show inventory | Inventario hardware (moduli, alimentatori, ventole) |
show interface brief | Nomi delle interfacce, stati, velocità, VLAN |
show vlan brief | ID VLAN, nomi e interfacce membri |
show vrf all detail | Definizioni VRF e interfacce membri |
show lldp neighbors detail | Rilevamento dei vicini LLDP |
show vpc brief | Dominio vPC, stato del peer, keepalive |
show port-channel summary | Configurazioni port-channel |
La modalità detailed aggiunge:
| Comando | Descrizione |
|---|---|
show interface | Statistiche complete delle interfacce (MTU, larghezza di banda, duplex, contatori) |
show system resources | % di inattività CPU, utilizzo memoria, load average |
show environment | Alimentatori, stato delle ventole, temperature |
IOS-XE
Il producer IOS-XE utilizza RPC NETCONF/YANG su SSH (porta predefinita 830):
Modalità minimal:
| Modello YANG | Descrizione |
|---|---|
Cisco-IOS-XE-native | Versione del dispositivo e hostname |
ietf-interfaces | Dettagli delle interfacce |
Cisco-IOS-XE-device-hardware-oper | Inventario hardware |
Cisco-IOS-XE-cdp-oper | Rilevamento dei vicini CDP |
Cisco-IOS-XE-native (vrf) | Definizioni VRF |
La modalità detailed aggiunge:
| Modello YANG | Descrizione |
|---|---|
Cisco-IOS-XE-bgp-oper | Dettagli dei vicini BGP |
Cisco-IOS-XE-ospf-oper | Processo OSPF e stato dei vicini |
Cisco-IOS-XE-process-cpu-oper | Utilizzo CPU |
Cisco-IOS-XE-memory-oper | Statistiche della memoria |
Struttura dell’output OSIRIS JSON
Tutti e tre i producer emettono la stessa struttura 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": [ ... ]
}
}
Tipi di risorse per piattaforma
I tipi di risorsa seguono la specifica OSIRIS JSON v1.0. I tipi standard sono utilizzati dove definiti; i tipi specifici del vendor usano il namespace osiris.cisco.*.
IOS-XE:
network.router- Dispositivo principale (standard)network.interface- Interfacce fisiche e logiche (standard)osiris.cisco.interface.lag- Interfacce port-channel / LAG
NX-OS:
osiris.cisco.switch.spine/osiris.cisco.switch.leaf- Dispositivo (classificato per ruolo)network.interface- Interfacce fisiche e logiche (standard)osiris.cisco.interface.lag- Port-channel
APIC:
osiris.cisco.controller- Controller APICosiris.cisco.switch.spine/osiris.cisco.switch.leaf- Switch fabricosiris.cisco.domain.bridge- Bridge domainnetwork.subnet- Sottoreti (standard)osiris.cisco.l3out- Reti esterne L3osiris.cisco.endpoint- Endpoint client (solo modalità detailed)
Tipi di connessione
- IOS-XE / NX-OS:
physical.ethernetper collegamenti tra interfacce rilevati tramite CDP/LLDP - APIC:
containsper il contenimento gerarchico dei tenant,networkper le associazioni dei bridge domain
Tipi di gruppo per piattaforma
IOS-XE: logical.vrf
NX-OS: logical.vrf, network.vlan, network.vpc
APIC: logical.tenant, logical.vrf, osiris.cisco.epg
Rilevamento delle connessioni
- IOS-XE rileva i vicini tramite CDP (Cisco Discovery Protocol)
- NX-OS rileva i vicini tramite LLDP (Link Layer Discovery Protocol)
- APIC utilizza una gerarchia di contenimento (tenant -> BD -> sottoreti -> EPG) invece di collegamenti punto-punto
I dispositivi remoti rilevati tramite CDP/LLDP vengono aggiunti come risorse stub con status: unknown.
Esempi
IOS-XE - dispositivo singolo, modalità minimal
osirisjson-producer cisco iosxe -h 10.99.0.1 -u admin -p secret
Output (ridotto):
{
"$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 - dispositivo singolo, modalità detailed
osirisjson-producer cisco nxos -h switch01.lab -u admin -p secret --detail detailed
Output (ridotto):
{
"$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 - snapshot della fabric ACI
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret --detail detailed
Output (ridotto):
{
"$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"]
}
]
}
}
Modalità batch - raccolta multi-dispositivo
Crea un file CSV di inventario:
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
Esegui il batch:
osirisjson-producer cisco apic -s inventory.csv -o ./output -u admin -p secret
La directory di output risultante:
output/
AMS-01/
F3/
R301/
POD-A/
apic-01.json
nx-spine-01.json
R302/
POD-B/
xe-router-01.json