diff --git a/schemas/base.yml b/schemas/base.yml new file mode 100644 index 0000000..8bf762f --- /dev/null +++ b/schemas/base.yml @@ -0,0 +1,336 @@ +# Base Infrastructure Schema for EVPN-VXLAN Fabric +# This schema defines core infrastructure objects required for fabric orchestration +--- +version: "1.0" +generics: + - name: Interface + namespace: Infra + description: Generic interface - parent for all interface types + label: Interface + include_in_menu: false + hierarchical: false + attributes: + - name: name + kind: Text + description: Interface name (e.g., Ethernet1, Loopback0) + - name: description + kind: Text + optional: true + - name: enabled + kind: Boolean + default_value: true + - name: mtu + kind: Number + optional: true + description: Maximum Transmission Unit + relationships: + - name: device + peer: InfraDevice + cardinality: one + kind: Parent + - name: ip_addresses + peer: InfraIPAddress + cardinality: many + kind: Component + +nodes: + # ============================================================================= + # Location + # ============================================================================= + - name: Site + namespace: Location + description: Physical site or data center + label: Site + icon: mingcute--building-4-line + default_filter: name__value + order_by: + - name__value + display_labels: + - name__value + attributes: + - name: name + kind: Text + unique: true + - name: description + kind: Text + optional: true + - name: facility + kind: Text + optional: true + description: Facility identifier or code + + # ============================================================================= + # Platform + # ============================================================================= + - name: Platform + namespace: Infra + description: Device platform/OS (e.g., Arista EOS, Cisco NX-OS) + label: Platform + icon: mdi--chip + default_filter: name__value + order_by: + - name__value + display_labels: + - name__value + attributes: + - name: name + kind: Text + unique: true + description: Platform name (e.g., arista_eos, cisco_nxos) + - name: description + kind: Text + optional: true + - name: napalm_driver + kind: Text + optional: true + description: NAPALM driver name + - name: netmiko_device_type + kind: Text + optional: true + description: Netmiko device type + + # ============================================================================= + # Device + # ============================================================================= + - name: Device + namespace: Infra + description: Network device (spine, leaf, etc.) + label: Device + icon: mdi--server-network + default_filter: name__value + order_by: + - name__value + display_labels: + - name__value + attributes: + - name: name + kind: Text + unique: true + description: Device hostname + - name: description + kind: Text + optional: true + - name: role + kind: Dropdown + choices: + - name: spine + label: Spine + color: "#3b82f6" + - name: leaf + label: Leaf + color: "#22c55e" + - name: border_leaf + label: Border Leaf + color: "#f59e0b" + description: Fabric role + - name: router_id + kind: IPHost + optional: true + description: BGP Router ID (typically Loopback0) + - name: status + kind: Dropdown + default_value: active + choices: + - name: active + label: Active + color: "#22c55e" + - name: planned + label: Planned + color: "#3b82f6" + - name: maintenance + label: Maintenance + color: "#f59e0b" + - name: decommissioned + label: Decommissioned + color: "#ef4444" + relationships: + - name: site + peer: LocationSite + cardinality: one + optional: true + - name: platform + peer: InfraPlatform + cardinality: one + optional: true + - name: asn + peer: InfraAutonomousSystem + cardinality: one + optional: true + description: BGP Autonomous System + - name: interfaces + peer: InfraInterface + cardinality: many + kind: Component + - name: mlag_domain + peer: InfraMlagDomain + cardinality: one + optional: true + + # ============================================================================= + # Interface Types (inherit from InfraInterface generic) + # ============================================================================= + - name: InterfaceEthernet + namespace: Infra + description: Physical Ethernet interface + label: Ethernet Interface + icon: mdi--ethernet + inherit_from: + - InfraInterface + default_filter: name__value + display_labels: + - name__value + attributes: + - name: speed + kind: Dropdown + optional: true + choices: + - name: "1000" + label: 1 Gbps + - name: "10000" + label: 10 Gbps + - name: "25000" + label: 25 Gbps + - name: "40000" + label: 40 Gbps + - name: "100000" + label: 100 Gbps + - name: mode + kind: Dropdown + optional: true + choices: + - name: access + label: Access + - name: trunk + label: Trunk + - name: routed + label: Routed (L3) + description: Switchport mode + relationships: + - name: lag + peer: InfraInterfaceLag + cardinality: one + optional: true + description: Parent LAG interface + - name: connected_interface + peer: InfraInterfaceEthernet + cardinality: one + optional: true + description: Connected peer interface + + - name: InterfaceLoopback + namespace: Infra + description: Loopback interface + label: Loopback Interface + icon: mdi--reload + inherit_from: + - InfraInterface + default_filter: name__value + display_labels: + - name__value + + - name: InterfaceVlan + namespace: Infra + description: VLAN SVI interface + label: VLAN Interface + icon: mdi--lan + inherit_from: + - InfraInterface + default_filter: name__value + display_labels: + - name__value + relationships: + - name: vlan + peer: InfraVLAN + cardinality: one + optional: true + + - name: InterfaceLag + namespace: Infra + description: Link Aggregation (Port-Channel) interface + label: LAG Interface + icon: mdi--link-variant + inherit_from: + - InfraInterface + default_filter: name__value + display_labels: + - name__value + attributes: + - name: lacp_mode + kind: Dropdown + optional: true + choices: + - name: active + label: Active + - name: passive + label: Passive + - name: static + label: Static (No LACP) + - name: mlag_id + kind: Number + optional: true + description: MLAG interface ID + relationships: + - name: members + peer: InfraInterfaceEthernet + cardinality: many + kind: Component + + - name: InterfaceVxlan + namespace: Infra + description: VXLAN tunnel interface + label: VXLAN Interface + icon: mdi--tunnel + inherit_from: + - InfraInterface + default_filter: name__value + display_labels: + - name__value + attributes: + - name: udp_port + kind: Number + default_value: 4789 + relationships: + - name: source_interface + peer: InfraInterfaceLoopback + cardinality: one + description: VTEP source interface (typically Loopback1) + + # ============================================================================= + # IP Address + # ============================================================================= + - name: IPAddress + namespace: Infra + description: IP Address assignment + label: IP Address + icon: mdi--ip-network + default_filter: address__value + order_by: + - address__value + display_labels: + - address__value + attributes: + - name: address + kind: IPNetwork + description: IP address with prefix (e.g., 10.0.1.1/31) + - name: description + kind: Text + optional: true + - name: status + kind: Dropdown + default_value: active + choices: + - name: active + label: Active + color: "#22c55e" + - name: reserved + label: Reserved + color: "#3b82f6" + - name: deprecated + label: Deprecated + color: "#ef4444" + relationships: + - name: interface + peer: InfraInterface + cardinality: one + optional: true + kind: Parent