OSIRIS JSON-Producer für Cisco
Der Cisco-Producer für OSIRIS JSON stellt eine Verbindung zu Cisco-Infrastrukturplattformen (APIC, NX-OS, IOS-XE) her und erzeugt OSIRIS-JSON-Snapshots Ihrer Netzwerktopologie, Geräte, Schnittstellen und Verbindungen.
Installieren Sie den Core-Dispatcher und den Cisco-Producer:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-cisco@latest
Mit dem Core-Dispatcher können Sie osirisjson-producer cisco ... ausführen. Ohne ihn rufen Sie die Hersteller-Binärdatei direkt als osirisjson-producer-cisco ... auf.
Stellen Sie sicher, dass $GOPATH/bin (oder $HOME/go/bin) in Ihrem PATH enthalten ist. Weitere Installationsoptionen finden Sie auf der Seite Erste Schritte.
Unterstützte Plattformen
ACI / APIC
verfügbarApplication Policy Infrastructure Controller
Transport: REST API
NX-OS
verfügbarNexus-Data-Center-Switches
Transport: NX-API CLI
IOS-XE
verfügbarEnterprise-Router und -Switches
Transport: NETCONF/YANG über SSH
CLI-Verwendung
Der Cisco-Producer verwendet eine Dispatcher-CLI mit Sub-Producern:
osirisjson-producer cisco <subcommand> [flags]
Einzelmodus
Stellen Sie eine Verbindung zu einem Gerät her und speichern Sie ein OSIRIS-JSON-Dokument als cisco-<type>-<timestamp>-<hostname>.json:
# ACI-Fabric-Snapshot über APIC
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret
# NX-OS-Geräte-Snapshot
osirisjson-producer cisco nxos -h switch01.example.com -u admin -p secret
# IOS-XE-Geräte-Snapshot
osirisjson-producer cisco iosxe -h router01.example.com -u admin --insecure
Wenn -p / --password weggelassen wird, fordert die CLI zur interaktiven Eingabe auf.
Batch-Modus
Sammeln Sie Daten von mehreren Geräten, die in einer CSV-Datei aufgeführt sind. Die Ausgabe wird als hierarchische Verzeichnisstruktur organisiert: DC/Floor/Room/Zone/Hostname.json.
osirisjson-producer cisco apic -s datacenter.csv -o ./output -u admin -p secret
Erzeugen Sie eine CSV-Vorlage für den Einstieg:
osirisjson-producer cisco template --generate apic
Die CSV-Vorlage verwendet diese Spalten:
| Spalte | Erforderlich | Beschreibung |
|---|---|---|
dc | Name des Data Centers (wird für die Hierarchie der Ausgabeordner verwendet) | |
floor | Kennung der Etage | |
room | Kennung des Raums | |
zone | Kennung der Zone oder des Pods | |
hostname | ja | Gerätebezeichnung, die als Ausgabedateiname verwendet wird |
type | ja | Producer-Typ: apic, nxos, iosxe |
ip | ja | IP-Adresse oder FQDN des Zielgeräts |
port | Port überschreiben (Standard: producer-spezifisch) | |
owner | self (Standard), isp oder colo - nur Operator-Metadaten | |
notes | Freitextnotizen (werden vom Producer ignoriert) |
Anmeldedaten werden über die Flags -u/-p bereitgestellt und gelten für alle Ziele im Batch.
Flag-Referenz
Flags für den Einzelmodus
| Flag | Kurz | Beschreibung |
|---|---|---|
--host | -h | Zielhost (IP oder FQDN, optional mit :port) |
--username | -u | Benutzername für die Authentifizierung |
--password | -p | Passwort (für interaktive Eingabe weglassen) |
--port | -P | Port überschreiben (Standard: producer-spezifisch) |
--detail | Detaillierungsgrad: minimal (Standard) oder detailed | |
--insecure | TLS-Zertifikatsprüfung überspringen | |
--safe-failure-mode | Umgang mit Geheimnissen: fail-closed (Standard), log-and-redact, off |
Flags für den Batch-Modus
| Flag | Kurz | Beschreibung |
|---|---|---|
--source | -s | CSV-Datei mit Zielen |
--output | -o | Ausgabeverzeichnis (hierarchisch: DC/Floor/Room/Zone/Hostname.json) |
--username | -u | Standardbenutzername für alle Ziele |
--password | -p | Standardpasswort für alle Ziele |
Globale Flags
| Flag | Beschreibung |
|---|---|
--version / -v | Version anzeigen und beenden |
--help | Hilfe anzeigen und beenden |
Was jede Plattform erfasst
ACI / APIC
Der APIC-Producer fragt die folgenden MO-Klassen über die REST-API ab:
Minimal mode:
| MO-Klasse | Beschreibung |
|---|---|
fabricNode | Fabric-Knoten (Controller, Spines, Leafs) |
topSystem | Systemattribute (Uptime, Status, Fabric-MAC, MTU der Control Plane) |
firmwareRunning | Aktive Firmware-Versionen |
fvTenant | Tenant-Definitionen |
fvCtx | VRF-Kontexte |
fvBD | Bridge-Domains |
fvSubnet | Subnetze |
fvAEPg | Application-Endpoint-Gruppen |
l3extOut | Externe L3-Konnektivität |
faultInst | Aktive Fault-Instanzen |
Detailed mode adds:
| MO-Klasse | Beschreibung |
|---|---|
fvCEp | Client-Endpoints (MAC, VLAN-Encap, Leaf-Zuordnung) |
NX-OS
Der NX-OS-Producer sendet NX-API-CLI-Befehle in gebündelten Anfragen:
Minimal mode:
| Befehl | Beschreibung |
|---|---|
show version | Gerätemodell, Seriennummer, OS-Version, Uptime |
show inventory | Hardware-Inventar (Module, Netzteile, Lüfter) |
show interface brief | Schnittstellennamen, Status, Geschwindigkeiten, VLANs |
show vlan brief | VLAN-IDs, Namen und Mitgliedsschnittstellen |
show vrf all detail | VRF-Definitionen und Mitgliedsschnittstellen |
show lldp neighbors detail | LLDP-Nachbarerkennung |
show vpc brief | vPC-Domäne, Peer-Status, Keepalive |
show port-channel summary | Port-Channel-Konfigurationen |
Detailed mode adds:
| Befehl | Beschreibung |
|---|---|
show interface | Vollständige Schnittstellenstatistiken (MTU, Bandbreite, Duplex, Zähler) |
show system resources | CPU-Leerlauf in %, Speichernutzung, Lastdurchschnitte |
show environment | Netzteile, Lüfterstatus, Temperaturen |
IOS-XE
Der IOS-XE-Producer verwendet NETCONF/YANG-RPCs über SSH (Standardport 830):
Minimal mode:
| YANG-Modell | Beschreibung |
|---|---|
Cisco-IOS-XE-native | Geräteversion und Hostname |
ietf-interfaces | Schnittstellendetails |
Cisco-IOS-XE-device-hardware-oper | Hardware-Inventar |
Cisco-IOS-XE-cdp-oper | CDP-Nachbarerkennung |
Cisco-IOS-XE-native (vrf) | VRF-Definitionen |
Detailed mode adds:
| YANG-Modell | Beschreibung |
|---|---|
Cisco-IOS-XE-bgp-oper | Details zu BGP-Nachbarn |
Cisco-IOS-XE-ospf-oper | OSPF-Prozess und Nachbarstatus |
Cisco-IOS-XE-process-cpu-oper | CPU-Auslastung |
Cisco-IOS-XE-memory-oper | Speicherstatistiken |
OSIRIS-JSON-Ausgabestruktur
Alle drei Producer geben dieselbe OSIRIS-JSON-Hülle aus:
{
"$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": [ ... ]
}
}
Ressourcentypen nach Plattform
Die Ressourcentypen folgen der OSIRIS JSON v1.0-Spezifikation. Standardtypen werden dort verwendet, wo sie definiert sind; herstellerspezifische Typen verwenden den Namespace osiris.cisco.*.
IOS-XE:
network.router- Primäres Gerät (Standard)network.interface- Physische und logische Schnittstellen (Standard)osiris.cisco.interface.lag- Port-Channel- / LAG-Schnittstellen
NX-OS:
osiris.cisco.switch.spine/osiris.cisco.switch.leaf- Gerät (nach Rolle klassifiziert)network.interface- Physische und logische Schnittstellen (Standard)osiris.cisco.interface.lag- Port-Channels
APIC:
osiris.cisco.controller- APIC-Controllerosiris.cisco.switch.spine/osiris.cisco.switch.leaf- Fabric-Switchesosiris.cisco.domain.bridge- Bridge-Domainsnetwork.subnet- Subnetze (Standard)osiris.cisco.l3out- Externe L3-Netzwerkeosiris.cisco.endpoint- Client-Endpoints (nur im detailed mode)
Verbindungstypen
- IOS-XE / NX-OS:
physical.ethernetfür über CDP/LLDP erkannte Links zwischen Schnittstellen - APIC:
containsfür hierarchische Tenant-Einbettung,networkfür Bridge-Domain-Zuordnungen
Gruppentypen nach Plattform
IOS-XE: logical.vrf
NX-OS: logical.vrf, network.vlan, network.vpc
APIC: logical.tenant, logical.vrf, osiris.cisco.epg
Verbindungserkennung
- IOS-XE erkennt Nachbarn über CDP (Cisco Discovery Protocol)
- NX-OS erkennt Nachbarn über LLDP (Link Layer Discovery Protocol)
- APIC verwendet eine Einbettungshierarchie (Tenants -> BDs -> Subnetze -> EPGs) anstelle von Punkt-zu-Punkt-Links
Entfernte Geräte, die über CDP/LLDP erkannt werden, werden als Stub-Ressourcen mit status: unknown hinzugefügt.
Beispiele
IOS-XE - Einzelgerät, minimaler Modus
osirisjson-producer cisco iosxe -h 10.99.0.1 -u admin -p secret
Ausgabe (gekürzt):
{
"$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 - Einzelgerät, detailed mode
osirisjson-producer cisco nxos -h switch01.lab -u admin -p secret --detail detailed
Ausgabe (gekürzt):
{
"$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 - ACI-Fabric-Snapshot
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret --detail detailed
Ausgabe (gekürzt):
{
"$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"]
}
]
}
}
Batch-Modus - Erfassung mehrerer Geräte
Erstellen Sie eine CSV-Inventardatei:
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
Führen Sie den Batch aus:
osirisjson-producer cisco apic -s inventory.csv -o ./output -u admin -p secret
Das resultierende Ausgabeverzeichnis:
output/
AMS-01/
F3/
R301/
POD-A/
apic-01.json
nx-spine-01.json
R302/
POD-B/
xe-router-01.json