From c7d5294e590531e953a915836e907cfe563b2cc3 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 13 Feb 2026 14:33:15 +0000 Subject: [PATCH] feat: add Infrahub schema for EVPN-VXLAN fabric topology --- schemas/evpn_fabric.yml | 277 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 schemas/evpn_fabric.yml diff --git a/schemas/evpn_fabric.yml b/schemas/evpn_fabric.yml new file mode 100644 index 0000000..5b77fca --- /dev/null +++ b/schemas/evpn_fabric.yml @@ -0,0 +1,277 @@ +# yaml-language-server: $schema=https://schema.infrahub.app/infrahub/schema/latest.json +--- +version: "1.0" + +generics: + - name: Generic + namespace: Location + include_in_menu: false + hierarchical: true + attributes: + - name: name + kind: Text + unique: true + - name: description + kind: Text + optional: true + +nodes: + # -------------------- Location Hierarchy -------------------- + - name: Datacenter + namespace: Location + label: "Datacenter" + icon: "mdi:server-network" + inherit_from: + - LocationGeneric + parent: "" + children: LocationRoom + display_label: "{{ name__value }}" + + - name: Room + namespace: Location + label: "Room" + icon: "mdi:door" + inherit_from: + - LocationGeneric + parent: LocationDatacenter + children: LocationRack + + - name: Rack + namespace: Location + label: "Rack" + icon: "clarity:rack-server-solid" + inherit_from: + - LocationGeneric + parent: LocationRoom + children: "" + relationships: + - name: devices + peer: InfraDevice + kind: Generic + cardinality: many + optional: true + + # -------------------- Platform & Role -------------------- + - name: Platform + namespace: Infra + label: "Platform" + icon: "mdi:application-cog-outline" + default_filter: name__value + display_label: "{{ name__value }}" + attributes: + - name: name + kind: Text + unique: true + - name: naplam_driver + label: "NAPALM Driver" + kind: Text + optional: true + - name: netmiko_device_type + label: "Netmiko Device Type" + kind: Text + optional: true + - name: containerlab_kind + label: "Containerlab Kind" + kind: Text + optional: true + + # -------------------- ASN -------------------- + - name: AutonomousSystem + namespace: Infra + label: "Autonomous System" + icon: "mdi:bank-circle-outline" + default_filter: name__value + human_friendly_id: ["name__value", "asn__value"] + order_by: ["asn__value"] + display_label: "{{ name__value }} (AS{{ asn__value }})" + attributes: + - name: name + kind: Text + unique: true + - name: asn + kind: Number + unique: true + - name: description + kind: Text + optional: true + + # -------------------- VRF -------------------- + - name: VRF + namespace: Infra + label: "VRF" + icon: "mdi:router" + default_filter: name__value + display_label: "{{ name__value }}" + attributes: + - name: name + kind: Text + unique: true + - name: vni + label: "L3 VNI" + kind: Number + optional: true + - name: description + kind: Text + optional: true + + # -------------------- VLAN -------------------- + - name: VLAN + namespace: Infra + label: "VLAN" + icon: "mdi:lan" + default_filter: name__value + display_label: "VLAN {{ vlan_id__value }} - {{ name__value }}" + order_by: ["vlan_id__value"] + attributes: + - name: name + kind: Text + - name: vlan_id + label: "VLAN ID" + kind: Number + - name: vni + label: "VNI" + kind: Number + optional: true + - name: description + kind: Text + optional: true + relationships: + - name: vrf + peer: InfraVRF + kind: Attribute + cardinality: one + optional: true + + # -------------------- Device -------------------- + - name: Device + namespace: Infra + label: "Device" + icon: "mdi:router" + default_filter: name__value + human_friendly_id: ["name__value"] + display_label: "{{ name__value }}" + order_by: ["name__value"] + attributes: + - name: name + kind: Text + unique: true + - name: role + kind: Dropdown + choices: + - name: spine + label: Spine + color: "#2196F3" + - name: leaf + label: Leaf + color: "#4CAF50" + - name: host + label: Host + color: "#FF9800" + - name: status + kind: Dropdown + choices: + - name: active + label: Active + color: "#009933" + - name: planned + label: Planned + color: "#cc66ff" + - name: maintenance + label: Maintenance + color: "#ffcc00" + default_value: "active" + - name: router_id + label: "Router ID" + kind: IPHost + optional: true + - name: mgmt_ip + label: "Management IP" + kind: IPHost + optional: true + relationships: + - name: platform + peer: InfraPlatform + kind: Attribute + cardinality: one + optional: true + - name: asn + label: "Autonomous System" + peer: InfraAutonomousSystem + kind: Attribute + cardinality: one + optional: true + - name: location + peer: LocationRack + kind: Attribute + cardinality: one + optional: true + - name: interfaces + peer: InfraInterface + kind: Component + cardinality: many + optional: true + - name: mlag_peer + label: "MLAG Peer" + peer: InfraDevice + kind: Generic + cardinality: one + optional: true + + # -------------------- Interface -------------------- + - name: Interface + namespace: Infra + label: "Interface" + icon: "mdi:ethernet" + display_label: "{{ name__value }}" + order_by: ["name__value"] + attributes: + - name: name + kind: Text + - name: description + kind: Text + optional: true + - name: interface_type + label: "Type" + kind: Dropdown + choices: + - name: ethernet + label: Ethernet + - name: loopback + label: Loopback + - name: vlan_svi + label: VLAN SVI + - name: port_channel + label: Port-Channel + - name: vxlan + label: VXLAN + - name: management + label: Management + default_value: "ethernet" + - name: mtu + kind: Number + optional: true + - name: enabled + kind: Boolean + default_value: true + - name: ip_address + label: "IP Address" + kind: IPHost + optional: true + relationships: + - name: device + peer: InfraDevice + kind: Parent + cardinality: one + optional: false + - name: connected_interface + label: "Connected To" + peer: InfraInterface + kind: Generic + cardinality: one + optional: true + - name: vlans + label: "Allowed VLANs" + peer: InfraVLAN + kind: Generic + cardinality: many + optional: true