Produtor OSIRIS JSON para Cisco
O produtor Cisco do OSIRIS JSON conecta-se às plataformas de infraestrutura Cisco (APIC, NX-OS, IOS-XE) e gera snapshots OSIRIS JSON da topologia da sua rede, dispositivos, interfaces e conexões.
Instale o dispatcher principal e o produtor Cisco:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-cisco@latest
O dispatcher principal permite executar osirisjson-producer cisco .... Sem ele, invoque o binário do fornecedor diretamente como osirisjson-producer-cisco ....
Certifique-se de que $GOPATH/bin (ou $HOME/go/bin) esteja no seu PATH. Consulte a página primeiros passos para mais opções de instalação.
Plataformas compatíveis
ACI / APIC
disponívelControlador de Infraestrutura por Política de Aplicação
Transporte: API REST
NX-OS
disponívelSwitches de data center Nexus
Transporte: CLI NX-API
IOS-XE
disponívelRoteadores e switches corporativos
Transporte: NETCONF/YANG sobre SSH
Uso da CLI
O produtor Cisco usa uma CLI no estilo dispatcher com subprodutores:
osirisjson-producer cisco <subcommand> [flags]
Modo único
Conecte-se a um dispositivo e salve um documento OSIRIS JSON como cisco-<type>-<timestamp>-<hostname>.json:
# Snapshot de fabric ACI via APIC
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret
# Snapshot de dispositivo NX-OS
osirisjson-producer cisco nxos -h switch01.example.com -u admin -p secret
# Snapshot de dispositivo IOS-XE
osirisjson-producer cisco iosxe -h router01.example.com -u admin --insecure
Se -p / --password for omitido, a CLI solicitará interativamente.
Modo em lote
Colete dados de vários dispositivos listados em um arquivo CSV. A saída é organizada como uma estrutura hierárquica de diretórios: DC/Floor/Room/Zone/Hostname.json.
osirisjson-producer cisco apic -s datacenter.csv -o ./output -u admin -p secret
Gere um modelo CSV para começar:
osirisjson-producer cisco template --generate apic
O modelo CSV usa estas colunas:
| Coluna | Obrigatória | Descrição |
|---|---|---|
dc | Nome do data center (usado para a hierarquia de pastas de saída) | |
floor | Identificador do andar | |
room | Identificador da sala | |
zone | Identificador da zona ou pod | |
hostname | sim | Rótulo do dispositivo usado como nome do arquivo de saída |
type | sim | Tipo de produtor: apic, nxos, iosxe |
ip | sim | Endereço IP ou FQDN do dispositivo de destino |
port | Sobrescreve a porta (padrão: específica do produtor) | |
owner | self (padrão), isp ou colo - apenas metadados do operador | |
notes | Notas em texto livre (ignoradas pelo produtor) |
As credenciais são fornecidas pelas flags -u/-p e se aplicam a todos os alvos do lote.
Referência de flags
Flags do modo único
| Flag | Curta | Descrição |
|---|---|---|
--host | -h | Host de destino (IP ou FQDN, opcionalmente com :port) |
--username | -u | Nome de usuário para autenticação |
--password | -p | Senha (omita para solicitação interativa) |
--port | -P | Sobrescreve a porta (padrão: específica do produtor) |
--detail | Nível de detalhe: minimal (padrão) ou detailed | |
--insecure | Ignora a verificação do certificado TLS | |
--safe-failure-mode | Tratamento de segredos: fail-closed (padrão), log-and-redact, off |
Flags do modo em lote
| Flag | Curta | Descrição |
|---|---|---|
--source | -s | Arquivo CSV com os alvos |
--output | -o | Diretório de saída (hierárquico: DC/Floor/Room/Zone/Hostname.json) |
--username | -u | Nome de usuário padrão para todos os alvos |
--password | -p | Senha padrão para todos os alvos |
Flags globais
| Flag | Descrição |
|---|---|
--version / -v | Exibe a versão e sai |
--help | Exibe a ajuda e sai |
O que cada plataforma coleta
ACI / APIC
O produtor APIC consulta as seguintes classes MO via API REST:
Modo minimal:
| Classe MO | Descrição |
|---|---|
fabricNode | Nós da fabric (controladores, spines, leafs) |
topSystem | Atributos do sistema (uptime, estado, MAC da fabric, MTU do plano de controle) |
firmwareRunning | Versões de firmware em execução |
fvTenant | Definições de tenant |
fvCtx | Contextos VRF |
fvBD | Bridge domains |
fvSubnet | Sub-redes |
fvAEPg | Grupos de endpoints de aplicação |
l3extOut | Conectividade externa L3 |
faultInst | Instâncias de falha ativas |
O modo detailed adiciona:
| Classe MO | Descrição |
|---|---|
fvCEp | Endpoints de clientes (MAC, encapsulamento VLAN, associação ao leaf) |
NX-OS
O produtor NX-OS envia comandos CLI NX-API em requisições em lote:
Modo minimal:
| Comando | Descrição |
|---|---|
show version | Modelo do dispositivo, número de série, versão do SO, uptime |
show inventory | Inventário de hardware (módulos, fontes de alimentação, ventoinhas) |
show interface brief | Nomes das interfaces, estados, velocidades, VLANs |
show vlan brief | IDs de VLAN, nomes e interfaces membro |
show vrf all detail | Definições de VRF e interfaces membro |
show lldp neighbors detail | Descoberta de vizinhos LLDP |
show vpc brief | Domínio vPC, status do peer, keepalive |
show port-channel summary | Configurações de port-channel |
O modo detailed adiciona:
| Comando | Descrição |
|---|---|
show interface | Estatísticas completas da interface (MTU, largura de banda, duplex, contadores) |
show system resources | % de ociosidade da CPU, uso de memória, médias de carga |
show environment | Fontes de alimentação, status das ventoinhas, temperaturas |
IOS-XE
O produtor IOS-XE usa RPCs NETCONF/YANG sobre SSH (porta padrão 830):
Modo minimal:
| Modelo YANG | Descrição |
|---|---|
Cisco-IOS-XE-native | Versão do dispositivo e hostname |
ietf-interfaces | Detalhes das interfaces |
Cisco-IOS-XE-device-hardware-oper | Inventário de hardware |
Cisco-IOS-XE-cdp-oper | Descoberta de vizinhos CDP |
Cisco-IOS-XE-native (vrf) | Definições de VRF |
O modo detailed adiciona:
| Modelo YANG | Descrição |
|---|---|
Cisco-IOS-XE-bgp-oper | Detalhes dos vizinhos BGP |
Cisco-IOS-XE-ospf-oper | Processo OSPF e estado dos vizinhos |
Cisco-IOS-XE-process-cpu-oper | Utilização de CPU |
Cisco-IOS-XE-memory-oper | Estatísticas de memória |
Estrutura de saída do OSIRIS JSON
Todos os três produtores emitem o mesmo envelope 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 recurso por plataforma
Os tipos de recurso seguem a especificação OSIRIS JSON v1.0. Tipos padrão são usados onde definidos; tipos específicos do fornecedor usam o namespace osiris.cisco.*.
IOS-XE:
network.router- Dispositivo principal (padrão)network.interface- Interfaces físicas e lógicas (padrão)osiris.cisco.interface.lag- Interfaces port-channel / LAG
NX-OS:
osiris.cisco.switch.spine/osiris.cisco.switch.leaf- Dispositivo (classificado por função)network.interface- Interfaces físicas e lógicas (padrão)osiris.cisco.interface.lag- Port-channels
APIC:
osiris.cisco.controller- Controladores APICosiris.cisco.switch.spine/osiris.cisco.switch.leaf- Switches da fabricosiris.cisco.domain.bridge- Bridge domainsnetwork.subnet- Sub-redes (padrão)osiris.cisco.l3out- Redes externas L3osiris.cisco.endpoint- Endpoints de clientes (somente no modo detailed)
Tipos de conexão
- IOS-XE / NX-OS:
physical.ethernetpara links entre interfaces descobertos via CDP/LLDP - APIC:
containspara contenção hierárquica de tenants,networkpara associações 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
Descoberta de conexões
- IOS-XE descobre vizinhos via CDP (Cisco Discovery Protocol)
- NX-OS descobre vizinhos via LLDP (Link Layer Discovery Protocol)
- APIC usa hierarquia de contenção (tenants -> BDs -> sub-redes -> EPGs) em vez de links ponto a ponto
Dispositivos remotos descobertos via CDP/LLDP são adicionados como recursos stub com status: unknown.
Exemplos
IOS-XE - dispositivo único, modo minimal
osirisjson-producer cisco iosxe -h 10.99.0.1 -u admin -p secret
Saída (resumida):
{
"$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
Saída (resumida):
{
"$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 da fabric ACI
osirisjson-producer cisco apic -h 10.0.0.1 -u admin -p secret --detail detailed
Saída (resumida):
{
"$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 em lote - coleta de múltiplos dispositivos
Crie um arquivo CSV de inventário:
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
Execute o lote:
osirisjson-producer cisco apic -s inventory.csv -o ./output -u admin -p secret
O diretório de saída resultante:
output/
AMS-01/
F3/
R301/
POD-A/
apic-01.json
nx-spine-01.json
R302/
POD-B/
xe-router-01.json