Skip to main content

Supported capabilities

This is a reference design that covers a defined set of AVD capabilities on Infrahub โ€” it is not a full replacement for every AVD feature. Uncommon or highly customized AVD options may not be modeled. Use the matrix below to check the status of a capability before planning a deployment.

Status key: โœ… Supported today ยท ๐ŸŸก Partial / confirm scope ยท โฌœ Not yet

note

Some boundaries below are marked confirm scope and are being finalized with the maintainers. Where a row says confirm, treat the exact edge as undecided rather than guaranteed.

AVD example scenario coverageโ€‹

Status of the official AVD example designs this reference design covers. Gaps are closed with native schema where a capability is reusable and first-class, and with the avd_custom_hostvars escape hatch where a full native model would be disproportionate (niche, single-scenario, pass-through).

Each scenario has its own loadable fabric design; every device renders valid PyAVD EOS configuration (0 validation violations) on a fresh instance.

AVD example scenarioStatusFabricDesign
Single-DC L3LSโœ…Fabric-L3LSeBGP underlay, EVPN/VXLAN L3LS.
Single-DC Multi-Pod L3LS (5-stage Clos)โœ…Fabric-L3LS-MultiPod-A6 super-spines + 3 pods; super-spines as EVPN route servers; tenants as vlan-aware bundles (evpn_vlan_aware_bundles).
Dual-DC L3LSโœ…Fabric-L3LS-Multi-DomainEVPN DC Gateway (next-hop-self) + DCI l3_edge p2p links, via avd_custom_hostvars.
L2LS fabric (standalone)โœ…Fabric-L2LSunderlay none โ†’ l2spine + l2leaf, pure Layer-2 (no VNI/VXLAN/EVPN), MLAG both tiers, two MLAG rack pairs; overlay-free Evpn.Tenant (MY_FABRIC) with tag-scoped VLANs BLUE-NET/GREEN-NET/ORANGE-NET and per-tier MSTP priorities (l2spine 4096 / l2leaf 16384), mirroring the AVD l2ls-fabric example. Host endpoints sit on leaf access ports via per-color access profiles (one untagged VLAN each, PortFast edge). The example's dual-homed FIREWALL (trunk Port-Channel to both spines) is not modeled โ€” deliberately deferred, see below.
Campus fabricโœ…Fabric-Campusunderlay ospf โ†’ l3spine core with anycast SVIs (Evpn.Svi) + l2leaf access; dot1x/PoE via escape hatch.
ISIS-LDP IPVPNโœ…Fabric-ISIS-LDPunderlay isis-ldp โ†’ p core + pe edge; per-customer L3VPN VRFs (Evpn.Tenant/Ipam.VRF).

The non-L3LS designs are driven by the fabric underlay_routing_protocol, which the pod/rack generators map to the correct device roles (gated so eBGP L3LS fabrics are unaffected).

Deferred โ€” L2LS spine-attached firewall. The upstream l2ls-fabric example dual-homes a firewall to both l2spine switches as a trunk Port-Channel. Modeling it needs a connected endpoint attachable to spine-tier devices, which the current endpoint/cabling path does not cover (it cables endpoints to a rack's leaves). It was scoped out rather than forced through avd_custom_hostvars, so the L2LS example is feature-complete for the fabric, services and host endpoints but includes no firewall. Everything else in that design is modeled natively.

Services are modeled schema-first: L2 VLANs (L2LS), anycast SVIs on the campus l3spine core, and per-customer L3VPN VRFs on the ISIS-LDP PE are all Ipam.VLAN / Evpn.Tenant / Ipam.VRF / Evpn.Svi objects rendered by the generator โ€” the same service model as the L3LS fabrics. The avd_custom_hostvars escape hatch is reserved for capabilities the schema does not yet model โ€” EVPN DC Gateway remote-peers and campus dot1x/PoE โ€” a deliberate, documented niche exception (native modeling of those is future schema work). Native-vs-escape-hatch guidance is in the developer guide.

Fabric generationโ€‹

CapabilityStatusNotes
Generate a full fabric (Fabric โ†’ Pod โ†’ Rack โ†’ Device) from a designโœ…Super-spines, spines, and leaves are created from device templates โ€” no per-device host_vars authored manually.
Cable devices together automaticallyโœ…Uplinks and device-to-device links created by the generators.
Regenerate idempotentlyโœ…Checksum-based change detection skips work when nothing changed; re-running is safe.

Addressing & numberingโ€‹

CapabilityStatusNotes
Allocate loopback, interconnect, and management prefixes/IPs from poolsโœ…Drawn from branch-aware pools so parallel work does not collide.
Allocate DCI point-to-point /31 prefixes from fabric DCI pool rolesโœ…Generated DCI l3_edge addressing resolves from NetworkFabric.fabric_ip_pools role dci first, legacy NetworkFabric.dci_pool second, and deterministic Fabric Supernet fallback when the required DCI prefix-pool role is missing.
Allocate BGP ASNs and node IDs from poolsโœ…Assigned automatically during generation.

Services (VLAN / EVPN / VRF / MLAG / LAG / routing)โ€‹

CapabilityStatusNotes
Model VLANs and L2 domainsโœ…Defined in the source of truth and rendered into config.
Fabric-level EVPN settingsโœ…Fabric EVPN overlay configuration. Exact EVPN depth is being confirmed.
EVPN Multi-Domain Gateway on Border Leafs๐ŸŸกModels Fabric-owned EvpnDomain objects with domain-owned local EvpnGatewayGroup children for border_leaf devices, then emits PyAVD EVPN Gateway hostvars for All-Active Multihoming only. Pods remain selected context and must point at the group's local domain. MLAG, Anycast IP, route-server, and route-reflector gateway models are not included.
EVPN L3 VRFs๐ŸŸกWired into the PyAVD hostvar generator and produce config. The maintainers flagged we don't do VRF and route targets โ€” confirm whether the exclusion is VRF-lite, route-leaking, or explicit route targets.
MLAG (domain + peer)๐ŸŸกModeled and wired into hostvars; confirm supported scope.
Server LAG๐ŸŸกModeled and wired into hostvars; confirm supported scope.
BGP peer groups๐ŸŸกWired into hostvars and produce config; confirm supported scope.
DCI links between Border Leafsโœ…NetworkLink objects with role=dci reuse shared physical endpoints and generate PyAVD l3_edge.p2p_links; external networks and EVPN Gateway are out of scope for this phase.
Route targets๐ŸŸกModeled but AVD-derived (not fed as input).
Prefix lists, route maps, static routes๐ŸŸกReconciled from AVD output via the backfill generator, not authored as inputs.

Rendering & artifactsโ€‹

CapabilityStatusNotes
Render Arista EOS device configurations (PyAVD)โœ…Deploy-ready per-device EOS CLI, as downloadable artifacts.
Fabric and per-device documentation (Markdown)โœ…Generated from the same source of truth as the config.
Cabling plan (CSV)โœ…One row per connection for the field/cabling team.
Computed interface descriptionsโœ…Consistent, auto-maintained interface descriptions.
ANTA test catalog (per device, YAML)โœ…Catalog generation is included (gated by the fabric anta_enabled flag). Execution is not yet included โ€” see below.

Validation (ANTA)โ€‹

CapabilityStatusNotes
ANTA test-catalog generationโœ…The avd_anta_catalog transform, gated by anta_enabled.
ANTA execution / block-merge-on-failureโฌœRunning the tests and blocking merges on failure is on the roadmap.

Validation (CloudVision)โ€‹

CapabilityStatusNotes
CloudVision config validation in a proposed changeโœ…The cv-config-validation check deploys the rendered configs to a CloudVision workspace and blocks the proposed change on a failed build. Opt in per fabric with cloudvision_managed. See CloudVision Validation.
Workspace tracking and review linkโœ…Each workspace is recorded as a CloudvisionWorkspace object and its URL posted to the proposed change.
Workspace submission๐ŸŸกSubmission runs from a CoreCustomWebhook on proposed-change merge, or manually via invoke submit-cv-workspace. The shipped webhook target is a placeholder URL, not a production receiver.
CloudVision change-control managementโฌœOut of scope for this phase.

Labโ€‹

CapabilityStatusNotes
ContainerLab topology per fabricโœ…The containerlab_topology artifact renders every device and link the fabric owns; kinds, images, and interface mappings come from schema attributes. See ContainerLab.
Deploying the generated topologyโœ…ansible/deploy_clab.yml stages the topology, EOS configs, and bind sources on a ContainerLab host and deploys them. The Semaphore template fetches and stages only โ€” it does not deploy.
ISIS-LDP devices in the generated topologyโฌœThe p, pe, and rr roles are excluded; their interface naming is not validated against ContainerLab.

Deploymentโ€‹

CapabilityStatusNotes
Deploy configurations to devicesโœ…Through the bundled Ansible runner or CloudVision (CVP/CVaaS).

Interfaces & change managementโ€‹

CapabilityStatusNotes
Self-service portal (Streamlit) for guided provisioningโœ…Alongside the Infrahub Web UI, GraphQL API, and MCP.
Branches, proposed changes, approvals, full lineageโœ…Standard Infrahub platform change management.
Approval rules that vary by service typeโฌœYou can require approvals, but per-service approval rules are on the roadmap.

Brownfield & coverageโ€‹

CapabilityStatusNotes
Self-serve brownfield import๐ŸŸกModeling an existing fabric and importing configs via Infrahub Sync is done today in a guided engagement, not as a download-and-try path.
Every AVD featureโฌœThis reference design covers a defined set of AVD inputs and scenarios, implemented per customer; uncommon or highly custom options may not be modeled.

Fabric pool managementโ€‹

CapabilityStatusNotes
Role-driven fabric pool collectionโœ…NetworkFabric.fabric_ip_pools covers Management, Loopback, Loopback VTEP, Fabric Point-to-Point, DCI, and Fabric Supernet roles.
Pod-scoped pool collection and containment validationโœ…NetworkPod.pod_ip_pools supports pod Loopback, VTEP, Fabric Point-to-Point, MLAG, and MLAG Peering roles with parent-fabric containment checks.
Legacy pool migration compatibilityโœ…Legacy fabric and pod pool relationships remain optional and seed data is dual-populated during migration.
Deterministic fallback/default poolsโœ…Fabric Supernet fallback creates stable prefix pools; MLAG defaults use stable /31 pool objects.