Commit Graph

104 Commits

Author SHA1 Message Date
c2a92c340d fix(schema): rename rd to route_distinguisher in EVPNInstance
Infrahub requires attribute names to have at least 3 characters.

Ref: #41
2026-02-06 08:29:12 +00:00
443642c2a1 fix(schema): rename rd to route_distinguisher (min 3 chars)
Infrahub requires attribute names to have at least 3 characters.

Ref: #41
2026-02-06 08:28:42 +00:00
Damien
ea6b66d639 docs: reformat README tables for better raw readability
Update Markdown tables including InfraHub comparison, Prefect benefits, and project progress phases to use consistent column padding. This improves the visual alignment and readability when viewing the raw source file.
2026-02-06 09:00:27 +01:00
f03698dec5 docs(schema): add schema documentation and ERD
Document all schema files, entity relationships, and mapping
to the reference arista-evpn-vxlan-clab topology.

Ref: #41
2026-02-05 15:54:38 +00:00
bd46d5f046 feat(schema): add extensions schema
Add Fabric, Underlay Link, and Host Connection models
for fabric-wide configuration and topology documentation.

Ref: #41
2026-02-05 15:54:07 +00:00
e3ef0b3763 feat(schema): add MLAG schema
Add models for MLAG Domain, Peer Config, and MLAG Interfaces.
Supports dual-primary detection and heartbeat configuration.

Ref: #41
2026-02-05 15:53:49 +00:00
3e96b0ff1a feat(schema): add BGP schema
Add models for Autonomous System, BGP Router Config, Peer Groups,
BGP Sessions, and Address Families. Supports underlay and EVPN overlay.

Ref: #41
2026-02-05 15:53:32 +00:00
d87ffcaca6 feat(schema): add VRF schema
Add models for VRF, Route Target, and VRF-Device assignments.
Supports L3VNI association for symmetric IRB routing.

Ref: #41
2026-02-05 15:53:11 +00:00
535f24a920 feat(schema): add VLAN and VXLAN schema
Add models for VLAN, VNI, VTEP, VLAN-VNI mappings, and EVPN instances.
Supports L2VNI and L3VNI types for EVPN-VXLAN fabric.

Ref: #41
2026-02-05 15:52:58 +00:00
077917f011 feat(schema): add base infrastructure schema
Add core infrastructure models for Device, Interface, IPAddress,
and Platform based on the arista-evpn-vxlan-clab topology.

Ref: #41
2026-02-05 15:52:36 +00:00
Damien
c6595cda51 docs: replace ASCII architecture diagram with Excalidraw SVG
Replace the text-based ASCII art representation of the system architecture with a linked Excalidraw SVG image. This improves visual clarity, readability, and maintainability of the architectural overview in the README.
2026-02-05 13:03:03 +01:00
383aa6b35f docs: Add Git-as-backend architecture for InfraHub
- Repository now serves as InfraHub backend (schema + data in Git)
- Add data/ directory structure for infrastructure objects
- Add transforms/ for Jinja2 config templates
- Update architecture diagram to show Git-centric workflow
- Add "Repository as InfraHub Backend" section explaining benefits
- Simplify project structure to reflect new approach
2026-02-05 08:48:34 +00:00
77ca22bd0a docs: Update README for InfraHub migration
- Replace NetBox with InfraHub as Source of Truth
- Update architecture diagram
- Explain InfraHub benefits (Git-native, custom schema)
- Update project structure (remove netbox references)
- Update technology stack
- Revise project phases for new approach
2026-02-05 08:42:51 +00:00
Damien
e46946606c Remove fabric provisioning script
The `scripts/provision_fabric.py` script and its associated NetBox
client
module (`src/netbox/`) have been removed. This functionality is no
longer
needed.
2026-02-05 09:38:05 +01:00
Damien
4e598ae400 fix(script): update populate script 2026-02-04 18:23:04 +01:00
Damien
0a2f658a2a fix(scripts): enhance get_or_create logic and parameter handling
- Replace `endpoint.get()` with `endpoint.filter()` in `get_or_create` to handle object retrieval more robustly and avoid potential exceptions with multiple results.
- Decouple `search_params` from `create_params` to correctly handle differences between API filtering keys (e.g., `group_id`, `vrf_id`) and creation keys (e.g., `group`, `vrf`).
- Refine IP address lookups to include `assigned_object_id` in search parameters, preventing ambiguous matches against IPs not assigned to the target interface.
2026-02-04 16:31:50 +01:00
52c9586667 fix: use 'device' instead of 'device_id' for interface creation
NetBox API requires 'device' field for creation, not 'device_id'.
Separated search and create logic for interfaces.
2026-02-04 15:17:30 +00:00
Damien
0de450211d chore: add .envrc to .gitignore
Add .envrc to the .gitignore file to prevent local environment variables
and secrets managed by direnv from being accidentally committed to the
repository.
2026-02-04 16:12:10 +01:00
f4ba38a735 fix: use object_types instead of content_types for NetBox 4.4.x custom fields
The NetBox API changed the field name from content_types to object_types.
2026-02-04 15:08:01 +00:00
3672f25ffc Merge pull request 'feat/netbox-provisioning' (#40) from feat/netbox-provisioning into main
Reviewed-on: #40
2026-02-01 14:47:36 +00:00
ec0150fc01 Update README.md 2026-02-01 14:44:59 +00:00
17888b7425 docs: Update README - remove Kestra comparison, update status
- Remove "Kestra vs Prefect Comparison" section (decision made)
- Update project status to reflect current phase
- Simplify "Why Prefect?" section
- Clean up architecture diagram formatting
2026-01-30 10:22:49 +00:00
6c456a2bd6 docs: migrate README from Kestra to Prefect orchestration
- Replace Kestra references with Prefect
- Update architecture diagram for Python-native flows
- Add Kestra vs Prefect comparison table
- Update project structure for Prefect flows
- Update technology stack table
- Add Prefect flow example with @flow/@task decorators
- Update Getting Started section for Prefect
- Update references and documentation links
2026-01-30 10:18:10 +00:00
1c1b410ce0 docs: use uv instead of pip in README 2026-01-11 16:26:50 +00:00
1564cffd88 docs: add README for provisioning scripts 2026-01-11 16:17:34 +00:00
1052b2ca3d feat: add NetBox provisioning script for fabric topology
Create comprehensive script to populate NetBox with:
- Custom fields (ASN, MLAG, VRF, virtual IP)
- Organization (Site, Manufacturer, DeviceType, DeviceRole)
- Devices (2 spines, 8 leafs, 4 hosts)
- Interfaces (physical, loopbacks, LAGs, SVIs)
- Cables (spine-leaf, MLAG peer-links, host dual-homing)
- IP addresses (loopbacks, P2P links)
- VLANs and VRF with route targets
- Prefixes

Reference: arista-evpn-vxlan-clab topology
Relates to #5
2026-01-11 16:17:14 +00:00
cfb9c8730e docs: add cabling section for fabric topology
- Document NetBox Cable model usage
- Add complete spine-leaf cabling matrix
- Add MLAG peer-link cabling
- Add host dual-homing connections
- Include pynetbox examples for cable retrieval
- Reference arista-evpn-vxlan-clab topology

Relates to #5
2026-01-10 14:57:55 +00:00
0d174cf6b8 Merge pull request 'feat: migrate orchestration layer to Kestra' (#27) from feat/kestra-orchestration into main
Reviewed-on: #27
2026-01-10 14:35:43 +00:00
7be72392b6 docs: update README with Kestra orchestration architecture
- Replace custom Python asyncio/Redis architecture with Kestra
- Update architecture diagram to show Kestra workflow layer
- Add "Why Kestra?" section explaining the choice
- Update project structure for Kestra workflows
- Update technology stack table
- Add Kestra workflow example
- Update references with Kestra documentation
2026-01-10 12:58:53 +00:00
528b65e4c0 Merge pull request 'feat(netbox): Add NetBox API client with v4.4 compatibility' (#22) from feat/netbox-data-model into main
Reviewed-on: #22
2026-01-09 14:26:03 +00:00
darnodo
ac763aa376 fix(netbox): adapt client for NetBox 4.4 API compatibility
- Bump pynetbox dependency to >=7.5.0
- Change get_device_asn to read ASN from device custom field instead of
  filtering ASNs by device (unsupported in NetBox 4.4)
- Remove device_name filter from get_l2vpn_terminations as L2VPN
  terminations cannot be filtered by device in NetBox 4.4
- Refactor get_vrf_interfaces to query IP addresses with VRF filter and
  extract associated interfaces (VRF filtering on interfaces unsupported)
- Add get_interface_mlag_id method to read MLAG ID from interface
  custom field
2026-01-09 10:24:57 +01:00
2f828f43d6 docs: add complete custom fields reference and API compatibility notes
- Add comprehensive custom fields table for Device, Interface, VRF, and IP Address
- Include API examples for custom field creation
- Document working vs non-working API filters for NetBox 4.4
- Add workarounds for filters that don't exist (ASN by device, L2VPN terminations by device)
- Update VRF interface assignment to show IP-based VRF membership
- Add virtual_ip custom field for anycast gateway support
2026-01-08 12:33:17 +00:00
darnodo
b1c46686d2 chore: add missing newline and update dependencies
- Fix missing newline at end of __init__.py
- Add certifi and charset-normalizer packages to uv.lock
- Update lock file with HTTP-related dependencies
2026-01-08 13:02:39 +01:00
darnodo
4799c4cbf2 feat(netbox): Add NetBox API client for fabric intent retrieval
Implements FabricNetBoxClient using pynetbox to fetch:
- Device and interface data
- BGP sessions and peer groups (plugin)
- L2VPN/EVPN VNI mappings
- VRF and route target configuration
- MLAG custom fields

Relates to #5
2026-01-08 13:02:09 +01:00
555f8436f1 docs: Add NetBox data model documentation for fabric intent
Documents how EVPN-VXLAN fabric configuration is represented in NetBox
using native models and the BGP plugin.

Includes:
- Model mapping tables (native + BGP plugin)
- IP addressing scheme
- BGP session configuration
- VXLAN/EVPN L2VPN setup
- MLAG custom fields requirements
- VRF configuration
- Data retrieval examples with pynetbox

Relates to #5
2026-01-08 07:53:37 +00:00
413d87873a Merge pull request 'feat: Add gNMI discovery CLI tools for YANG path exploration' (#21) from feat-discoverytools into main
Reviewed-on: #21
2026-01-07 12:00:05 +00:00
darnodo
2445750f23 docs: format markdown tables and update CLI command syntax
- Align columns in README.md roadmap and technology stack tables
- Update CLI example to use 'uv run fabric-orch' command prefix
- Improve overall markdown table readability
2026-01-07 12:51:14 +01:00
darnodo
97cdc161da docs(gnmi): remove async context manager references from client
Remove outdated async documentation from GNMIClient module:
- Remove async context manager from feature list
- Remove async usage example from class docstring

The client now only documents synchronous usage patterns.
2025-12-31 17:48:29 +01:00
darnodo
5b3517c355 fix: resolve import paths, remove async context managers, clean up CLI
- Change absolute imports to relative imports in gnmi module
- Remove async context manager methods (pygnmi is synchronous)
- Remove unimplemented --depth option from CLI
- Update documentation to reflect sync-only usage
2025-12-31 17:44:21 +01:00
darnodo
8e460225c2 docs: format markdown tables in yang-paths.md
Improve table readability by aligning columns with consistent
spacing and proper markdown table formatting throughout the
YANG paths reference documentation.
2025-12-31 17:18:01 +01:00
darnodo
e355cce4c8 docs: add CLI user guide for fabric-orch commands
Add comprehensive documentation for the fabric-orch CLI tool covering:
- Installation and quick start instructions
- Environment variables for gNMI authentication
- All discover subcommands (capabilities, get, set, subscribe, paths)
- YANG path syntax reference and common paths table
- Output formats and error handling guidance
2025-12-31 17:15:56 +01:00
darnodo
e041dab724 feat(build): configure project tooling and update dependencies
- Replace placeholder deps with click, pygnmi, and rich for CLI functionality
- Add fabric-orch CLI entry point via project.scripts
- Configure hatchling as build backend with wheel/sdist targets
- Add ruff linter configuration for code quality
- Add dev dependency group with ruff
- Alphabetize yang module imports
2025-12-31 09:36:00 +01:00
darnodo
3e76eba46a refactor(yang): remove unused Optional import from paths
The `Optional` type was imported from `typing` in `src/yang/paths.py`
but was not being used in the file. This change removes the unnecessary
import to clean up the code.
2025-12-26 15:59:25 +01:00
darnodo
f8ef64e9b0 docs: update installation steps and reformat markdown tables
- Update the dependency installation command in the main README to use `uv sync` instead of `pip`, reflecting the project's package manager.
- Realign markdown tables in `src/yang/README.md` to improve raw text readability and consistency.
2025-12-26 15:56:17 +01:00
ad3e93b933 Actualiser README.md 2025-12-26 14:48:56 +00:00
a796864aad Actualiser README.md 2025-12-26 14:46:19 +00:00
b864273dfb Actualiser README.md 2025-12-26 14:45:10 +00:00
0f0336296a docs: add README for yang module
Usage examples for all path classes:
- Interfaces, Loopbacks, VLANs
- BGP with AFI-SAFI
- VXLAN VNI mappings
- MLAG, EVPN (with limitations noted)
- Port-Channel
- Subscription helpers

Part of #3
2025-12-26 13:47:00 +00:00
9edf963704 feat: add yang package init
Exports all YANG path classes for easy imports.

Part of #3
2025-12-26 13:42:47 +00:00
f335d1fc33 feat: add YANG path constants module
Python module with validated gNMI YANG paths for:
- Interfaces, Loopbacks, VLANs (OpenConfig)
- BGP with neighbor and AFI-SAFI helpers (OpenConfig)
- VXLAN VNI mappings (Arista experimental)
- MLAG and EVPN config (Arista experimental)
- Port-Channel/LAG paths
- Subscription helpers for fabric monitoring

Part of #3
2025-12-26 13:42:31 +00:00