113 lines
6.4 KiB
Markdown
113 lines
6.4 KiB
Markdown
# Infrahub Schema for EVPN-VXLAN Fabric
|
|
|
|
This directory contains the Infrahub schema definitions for modeling an EVPN-VXLAN fabric. The schema is designed to represent the [arista-evpn-vxlan-clab](https://gitea.arnodo.fr/Damien/arista-evpn-vxlan-clab) topology.
|
|
|
|
## Schema Files
|
|
|
|
| File | Description |
|
|
|------|-------------|
|
|
| `base.yml` | Core infrastructure: Device, Interface types, IP Address, Platform, Site |
|
|
| `vlan_vxlan.yml` | VLAN, VNI, VTEP, EVPN Instance |
|
|
| `vrf.yml` | VRF, Route Target, VRF assignments |
|
|
| `bgp.yml` | Autonomous System, BGP Config, Peer Groups, Sessions |
|
|
| `mlag.yml` | MLAG Domain, Peer Config, MLAG Interfaces |
|
|
| `extensions.yml` | Fabric, Underlay Links, Host Connections |
|
|
|
|
## Entity Relationship Diagram
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ FABRIC TOPOLOGY │
|
|
└─────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
┌──────────────┐
|
|
│ InfraFabric │
|
|
└──────┬───────┘
|
|
│
|
|
┌──────────────────────┼──────────────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌────────────┐ ┌─────────────┐ ┌────────────┐
|
|
│ LocationSite│ │ InfraDevice │ │InfraAutono-│
|
|
└────────────┘ │ (spine/ │ │mousSystem │
|
|
│ leaf) │ └─────┬──────┘
|
|
└──────┬──────┘ │
|
|
│ │
|
|
┌────────────────────────────┼─────────────────────┤
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
│InfraInterface│ │InfraMlagDomain│ │InfraBGPRouter│
|
|
│ (generic) │ │ (leaf pair) │ │ Config │
|
|
└──────┬───────┘ └──────────────┘ └──────┬───────┘
|
|
│ │
|
|
│ ┌─────────────────────────┬───────────────────┤
|
|
│ │ │ │
|
|
▼ ▼ ▼ ▼
|
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
│InterfaceTypes│ │InfraBGPPeer- │ │ InfraBGP- │
|
|
│ - Ethernet │ │ Group │ │ Session │
|
|
│ - Loopback │ │ (underlay, │ │ (neighbors) │
|
|
│ - Vlan │ │ evpn) │ └──────────────┘
|
|
│ - Lag │ └──────────────┘
|
|
└──────┬───────┘
|
|
│
|
|
▼
|
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
│InfraIPAddress│◄────►│ InfraVLAN │◄────►│ InfraVNI │
|
|
└──────────────┘ └──────────────┘ └──────────────┘
|
|
│
|
|
▼
|
|
┌──────────────┐
|
|
│ InfraVTEP │
|
|
└──────────────┘
|
|
```
|
|
|
|
## Reference Topology Mapping
|
|
|
|
The schema models this topology from `arista-evpn-vxlan-clab`:
|
|
|
|
| Physical | Infrahub Model |
|
|
|----------|----------------|
|
|
| spine1, spine2 | InfraDevice (role: spine) |
|
|
| leaf1-8 | InfraDevice (role: leaf) |
|
|
| AS 65000 | InfraAutonomousSystem (spines) |
|
|
| AS 65001-65004 | InfraAutonomousSystem (leaf pairs) |
|
|
| VLAN 40, 34, 78 | InfraVLAN + InfraVNI |
|
|
| VLAN 4090, 4091 | InfraVLAN (vlan_type: mlag_peer/mlag_ibgp) |
|
|
| leaf1+leaf2 pair | InfraMlagDomain |
|
|
| Port-Channel999 | InfraInterfaceLag (peer-link) |
|
|
| Port-Channel1 | InfraMlagInterface (host-facing) |
|
|
| Ethernet1-8 | InfraInterfaceEthernet |
|
|
| Loopback0, Loopback1 | InfraInterfaceLoopback |
|
|
| Vxlan1 | InfraVTEP |
|
|
| peer groups | InfraBGPPeerGroup |
|
|
|
|
## Usage
|
|
|
|
### Loading the Schema
|
|
|
|
```bash
|
|
# From the fabric-orchestrator root directory
|
|
infrahubctl schema load schemas/
|
|
```
|
|
|
|
### Validation
|
|
|
|
```bash
|
|
infrahubctl schema check schemas/
|
|
```
|
|
|
|
## Key Design Decisions
|
|
|
|
1. **Generic Interface**: All interface types inherit from `InfraInterface` generic for polymorphic queries
|
|
2. **MLAG as Domain**: MLAG is modeled as a domain containing exactly 2 devices, with per-device config
|
|
3. **BGP Hierarchy**: BGPRouterConfig → PeerGroups → Sessions allows template-based configuration
|
|
4. **VTEP Independence**: VTEP is separate from Device to support shared VTEP scenarios
|
|
5. **EVPN Instance per VLAN**: Allows device-specific RD/RT while referencing common VLAN/VNI
|
|
|
|
## Related Issues
|
|
|
|
- Parent issue: [#41 - Define Infrahub Schema for EVPN-VXLAN Fabric](https://gitea.arnodo.fr/Damien/fabric-orchestrator/issues/41)
|
|
- Depends on: Schema being loaded before transforms (#30, #31, #32, #33)
|