Productor OSIRIS JSON para Cisco
El productor Cisco de OSIRIS JSON se conecta a las plataformas de infraestructura Cisco (APIC, NX-OS, IOS-XE) y genera instantáneas OSIRIS JSON de la topología de su red, dispositivos, interfaces y conexiones.
Instale el dispatcher principal y el productor Cisco:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-cisco@latest
El dispatcher principal le permite ejecutar osirisjson-producer cisco .... Sin él, invoque directamente el binario del proveedor como osirisjson-producer-cisco ....
Asegúrese de que $GOPATH/bin (o $HOME/go/bin) esté en su PATH. Consulte la página getting started para ver más opciones de instalación.
Plataformas compatibles
ACI / APIC
disponibleControlador de infraestructura de políticas de aplicaciones
Transporte: API REST
NX-OS
disponibleSwitches Nexus para centros de datos
Transporte: CLI NX-API
IOS-XE
disponibleRouters y switches empresariales
Transporte: NETCONF/YANG sobre SSH
Uso de la CLI
El productor Cisco utiliza una CLI de estilo dispatcher con subproductores:
osirisjson-producer cisco <subcommand> [flags]
Modo individual
Conéctese a un dispositivo y guarde un documento OSIRIS JSON como cisco-<type>-<timestamp>-<hostname>.json:
# Instantánea de la fabric ACI mediante APIC
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret
# Instantánea de dispositivo NX-OS
osirisjson-producer cisco nxos -h switch01.example.com -u admin -p secret
# Instantánea de dispositivo IOS-XE
osirisjson-producer cisco iosxe -h router01.example.com -u admin --insecure
Si se omite -p / --password, la CLI solicita la contraseña de forma interactiva.
Modo por lotes
Recopile información de varios dispositivos listados en un archivo CSV. La salida se organiza como una estructura jerárquica de directorios: DC/Floor/Room/Zone/Hostname.json.
osirisjson-producer cisco apic -s datacenter.csv -o ./output -u admin -p secret
Genere una plantilla CSV para empezar:
osirisjson-producer cisco template --generate apic
La plantilla CSV utiliza estas columnas:
| Columna | Obligatoria | Descripción |
|---|---|---|
dc | Nombre del centro de datos (utilizado para la jerarquía de carpetas de salida) | |
floor | Identificador de piso | |
room | Identificador de sala | |
zone | Identificador de zona o pod | |
hostname | sí | Etiqueta del dispositivo utilizada como nombre del archivo de salida |
type | sí | Tipo de productor: apic, nxos, iosxe |
ip | sí | Dirección IP o FQDN del dispositivo de destino |
port | Sustituye el puerto (predeterminado: específico del productor) | |
owner | self (predeterminado), isp o colo - solo metadatos del operador | |
notes | Notas de texto libre (ignoradas por el productor) |
Las credenciales se proporcionan mediante las flags -u/-p y se aplican a todos los destinos del lote.
Referencia de flags
Flags del modo individual
| Flag | Corta | Descripción |
|---|---|---|
--host | -h | Host de destino (IP o FQDN, opcionalmente con :port) |
--username | -u | Nombre de usuario para la autenticación |
--password | -p | Contraseña (omítala para el prompt interactivo) |
--port | -P | Sustituye el puerto (predeterminado: específico del productor) |
--detail | Nivel de detalle: minimal (predeterminado) o detailed | |
--insecure | Omite la verificación del certificado TLS | |
--safe-failure-mode | Gestión de secretos: fail-closed (predeterminado), log-and-redact, off |
Flags del modo por lotes
| Flag | Corta | Descripción |
|---|---|---|
--source | -s | Archivo CSV con los destinos |
--output | -o | Directorio de salida (jerárquico: DC/Floor/Room/Zone/Hostname.json) |
--username | -u | Nombre de usuario predeterminado para todos los destinos |
--password | -p | Contraseña predeterminada para todos los destinos |
Flags globales
| Flag | Descripción |
|---|---|
--version / -v | Muestra la versión y sale |
--help | Muestra la ayuda y sale |
Qué recopila cada plataforma
ACI / APIC
El productor APIC consulta las siguientes clases MO mediante la API REST:
Modo minimal:
| Clase MO | Descripción |
|---|---|
fabricNode | Nodos de la fabric (controladores, spines, leafs) |
topSystem | Atributos del sistema (uptime, estado, MAC de la fabric, MTU del plano de control) |
firmwareRunning | Versiones de firmware en ejecución |
fvTenant | Definiciones de tenant |
fvCtx | Contextos VRF |
fvBD | Bridge domains |
fvSubnet | Subredes |
fvAEPg | Grupos de endpoints de aplicaciones |
l3extOut | Conectividad externa L3 |
faultInst | Instancias de fallo activas |
El modo detailed añade:
| Clase MO | Descripción |
|---|---|
fvCEp | Endpoints de cliente (MAC, encapsulación VLAN, asociación al leaf) |
NX-OS
El productor NX-OS envía comandos CLI NX-API en solicitudes por lotes:
Modo minimal:
| Comando | Descripción |
|---|---|
show version | Modelo del dispositivo, número de serie, versión del SO, uptime |
show inventory | Inventario de hardware (módulos, fuentes de alimentación, ventiladores) |
show interface brief | Nombres de interfaces, estados, velocidades, VLAN |
show vlan brief | ID de VLAN, nombres e interfaces miembro |
show vrf all detail | Definiciones de VRF e interfaces miembro |
show lldp neighbors detail | Descubrimiento de vecinos LLDP |
show vpc brief | Dominio vPC, estado del peer, keepalive |
show port-channel summary | Configuraciones de port-channel |
El modo detailed añade:
| Comando | Descripción |
|---|---|
show interface | Estadísticas completas de interfaces (MTU, ancho de banda, dúplex, contadores) |
show system resources | % de inactividad de CPU, uso de memoria, medias de carga |
show environment | Fuentes de alimentación, estado de ventiladores, temperaturas |
IOS-XE
El productor IOS-XE utiliza RPC de NETCONF/YANG sobre SSH (puerto predeterminado 830):
Modo minimal:
| Modelo YANG | Descripción |
|---|---|
Cisco-IOS-XE-native | Versión del dispositivo y hostname |
ietf-interfaces | Detalles de interfaces |
Cisco-IOS-XE-device-hardware-oper | Inventario de hardware |
Cisco-IOS-XE-cdp-oper | Descubrimiento de vecinos CDP |
Cisco-IOS-XE-native (vrf) | Definiciones de VRF |
El modo detailed añade:
| Modelo YANG | Descripción |
|---|---|
Cisco-IOS-XE-bgp-oper | Detalles de vecinos BGP |
Cisco-IOS-XE-ospf-oper | Proceso OSPF y estado de vecinos |
Cisco-IOS-XE-process-cpu-oper | Utilización de CPU |
Cisco-IOS-XE-memory-oper | Estadísticas de memoria |
Estructura de salida de OSIRIS JSON
Los tres productores emiten el mismo contenedor 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": [ ... ]
}
}
Tipos de recursos por plataforma
Los tipos de recurso siguen la especificación OSIRIS JSON v1.0. Los tipos estándar se usan donde están definidos; los tipos específicos del proveedor usan el espacio de nombres osiris.cisco.*.
IOS-XE:
network.router- Dispositivo principal (estándar)network.interface- Interfaces físicas y lógicas (estándar)osiris.cisco.interface.lag- Interfaces port-channel / LAG
NX-OS:
osiris.cisco.switch.spine/osiris.cisco.switch.leaf- Dispositivo (clasificado por rol)network.interface- Interfaces físicas y lógicas (estándar)osiris.cisco.interface.lag- Port-channels
APIC:
osiris.cisco.controller- Controladores APICosiris.cisco.switch.spine/osiris.cisco.switch.leaf- Switches de fabricosiris.cisco.domain.bridge- Bridge domainsnetwork.subnet- Subredes (estándar)osiris.cisco.l3out- Redes externas L3osiris.cisco.endpoint- Endpoints de cliente (solo en modo detailed)
Tipos de conexión
- IOS-XE / NX-OS:
physical.ethernetpara enlaces entre interfaces descubiertos mediante CDP/LLDP - APIC:
containspara la contención jerárquica de tenants,networkpara asociaciones de bridge domains
Tipos de grupo por plataforma
IOS-XE: logical.vrf
NX-OS: logical.vrf, network.vlan, network.vpc
APIC: logical.tenant, logical.vrf, osiris.cisco.epg
Descubrimiento de conexiones
- IOS-XE descubre vecinos mediante CDP (Cisco Discovery Protocol)
- NX-OS descubre vecinos mediante LLDP (Link Layer Discovery Protocol)
- APIC utiliza jerarquía de contención (tenants -> BDs -> subredes -> EPGs) en lugar de enlaces punto a punto
Los dispositivos remotos descubiertos mediante CDP/LLDP se agregan como recursos stub con status: unknown.
Ejemplos
IOS-XE - dispositivo único, modo minimal
osirisjson-producer cisco iosxe -h 10.99.0.1 -u admin -p secret
Salida (recortada):
{
"$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 único, modo detailed
osirisjson-producer cisco nxos -h switch01.lab -u admin -p secret --detail detailed
Salida (recortada):
{
"$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 - instantánea de la fabric ACI
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret --detail detailed
Salida (recortada):
{
"$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"]
}
]
}
}
Modo por lotes - recopilación multidispositivo
Cree un archivo CSV de 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
Ejecute el lote:
osirisjson-producer cisco apic -s inventory.csv -o ./output -u admin -p secret
El directorio de salida resultante:
output/
AMS-01/
F3/
R301/
POD-A/
apic-01.json
nx-spine-01.json
R302/
POD-B/
xe-router-01.json