feat: add Infrahub schema for EVPN-VXLAN fabric topology
This commit is contained in:
277
schemas/evpn_fabric.yml
Normal file
277
schemas/evpn_fabric.yml
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user