docs: Simplify README, link to issues for phase tracking
This commit is contained in:
59
README.md
59
README.md
@@ -67,45 +67,16 @@ Reference: [arista-evpn-vxlan-clab](https://gitea.arnodo.fr/Damien/arista-evpn-v
|
|||||||
|
|
||||||
## 📋 Project Phases
|
## 📋 Project Phases
|
||||||
|
|
||||||
### Phase 1: YANG Path Discovery (Weeks 1-2)
|
Progress is tracked via issues. See [all issues](https://gitea.arnodo.fr/Damien/fabric-orchestrator/issues) or filter by phase:
|
||||||
> **Goal**: Map Arista EOS 4.35.0F YANG models and validate gNMI connectivity
|
|
||||||
|
|
||||||
- [ ] Enable and test gNMI on cEOS devices
|
| Phase | Description | Issues |
|
||||||
- [ ] Explore available YANG models (OpenConfig vs Native Arista)
|
|-------|-------------|--------|
|
||||||
- [ ] Document working paths for: VLANs, Interfaces, BGP, VXLAN, MLAG
|
| **Phase 1** | YANG Path Discovery - Map EOS 4.35.0F YANG models, validate gNMI | [phase-1-yang-discovery](https://gitea.arnodo.fr/Damien/fabric-orchestrator/issues?labels=7) |
|
||||||
- [ ] Create discovery tooling for path exploration
|
| **Phase 2** | Minimal Reconciler - VLANs/VNIs, diff engine, CLI plan/apply | [phase-2-minimal-reconciler](https://gitea.arnodo.fr/Damien/fabric-orchestrator/issues?labels=8) |
|
||||||
- [ ] Build YANG path reference documentation
|
| **Phase 3** | Full Fabric - BGP, MLAG, VRFs, dependency ordering | [phase-3-full-fabric](https://gitea.arnodo.fr/Damien/fabric-orchestrator/issues?labels=9) |
|
||||||
|
| **Phase 4** | Event-Driven - gNMI Subscribe, drift detection, webhooks | [phase-4-event-driven](https://gitea.arnodo.fr/Damien/fabric-orchestrator/issues?labels=10) |
|
||||||
|
|
||||||
### Phase 2: Minimal Reconciler (Weeks 3-4)
|
📌 **Project Board**: [View Kanban](https://gitea.arnodo.fr/Damien/fabric-orchestrator/projects)
|
||||||
> **Goal**: Prove the reconciliation pattern with VLANs and VNI mappings
|
|
||||||
|
|
||||||
- [ ] Define NetBox ConfigContext schema for intent
|
|
||||||
- [ ] Implement NetBox → YANG path mapper (VLANs only)
|
|
||||||
- [ ] Build basic diff engine (current vs desired state)
|
|
||||||
- [ ] Implement gNMI Get for state retrieval
|
|
||||||
- [ ] Implement gNMI Set for atomic changes
|
|
||||||
- [ ] Create CLI with `plan` and `apply` commands
|
|
||||||
|
|
||||||
### Phase 3: Full Fabric Coverage (Weeks 5-8)
|
|
||||||
> **Goal**: Extend to complete EVPN-VXLAN fabric configuration
|
|
||||||
|
|
||||||
- [ ] Add BGP underlay configuration
|
|
||||||
- [ ] Add BGP EVPN overlay configuration
|
|
||||||
- [ ] Add MLAG configuration (with coordinated peer updates)
|
|
||||||
- [ ] Add VRF and L3 VXLAN support
|
|
||||||
- [ ] Add interface configuration
|
|
||||||
- [ ] Implement dependency ordering for changes
|
|
||||||
- [ ] Add rollback capability
|
|
||||||
|
|
||||||
### Phase 4: Event-Driven Automation (Weeks 9-10)
|
|
||||||
> **Goal**: Real-time drift detection and NetBox webhook integration
|
|
||||||
|
|
||||||
- [ ] Implement gNMI Subscribe for config change telemetry
|
|
||||||
- [ ] Build drift detection engine
|
|
||||||
- [ ] Add NetBox webhook receiver (FastAPI)
|
|
||||||
- [ ] Implement event bus (Redis/NATS)
|
|
||||||
- [ ] Add auto-remediation option
|
|
||||||
- [ ] Create operational dashboard/logging
|
|
||||||
|
|
||||||
## 📁 Project Structure
|
## 📁 Project Structure
|
||||||
|
|
||||||
@@ -119,33 +90,23 @@ fabric-orchestrator/
|
|||||||
│ ├── cli.py # CLI interface (plan, apply, drift)
|
│ ├── cli.py # CLI interface (plan, apply, drift)
|
||||||
│ ├── api.py # FastAPI server for webhooks
|
│ ├── api.py # FastAPI server for webhooks
|
||||||
│ ├── reconciler/
|
│ ├── reconciler/
|
||||||
│ │ ├── __init__.py
|
|
||||||
│ │ ├── engine.py # Core reconciliation logic
|
│ │ ├── engine.py # Core reconciliation logic
|
||||||
│ │ ├── diff.py # State comparison
|
│ │ ├── diff.py # State comparison
|
||||||
│ │ └── planner.py # Change ordering/dependencies
|
│ │ └── planner.py # Change ordering/dependencies
|
||||||
│ ├── yang/
|
│ ├── yang/
|
||||||
│ │ ├── __init__.py
|
|
||||||
│ │ ├── mapper.py # NetBox intent → YANG paths
|
│ │ ├── mapper.py # NetBox intent → YANG paths
|
||||||
│ │ ├── paths.py # YANG path definitions
|
│ │ ├── paths.py # YANG path definitions
|
||||||
│ │ └── validators.py # Schema validation
|
│ │ └── validators.py # Schema validation
|
||||||
│ ├── gnmi/
|
│ ├── gnmi/
|
||||||
│ │ ├── __init__.py
|
|
||||||
│ │ ├── client.py # gNMI client wrapper
|
│ │ ├── client.py # gNMI client wrapper
|
||||||
│ │ └── transactions.py # Atomic operations
|
│ │ └── transactions.py # Atomic operations
|
||||||
│ ├── netbox/
|
│ ├── netbox/
|
||||||
│ │ ├── __init__.py
|
|
||||||
│ │ ├── client.py # NetBox API client
|
│ │ ├── client.py # NetBox API client
|
||||||
│ │ └── models.py # Intent data models
|
│ │ └── models.py # Intent data models
|
||||||
│ └── events/
|
│ └── events/
|
||||||
│ ├── __init__.py
|
|
||||||
│ ├── handlers.py # Event handlers
|
│ ├── handlers.py # Event handlers
|
||||||
│ └── bus.py # Event bus (Redis)
|
│ └── bus.py # Event bus (Redis)
|
||||||
├── tests/
|
├── tests/
|
||||||
│ ├── test_reconciler.py
|
|
||||||
│ ├── test_yang_mapper.py
|
|
||||||
│ └── fixtures/
|
|
||||||
│ ├── netbox_intent.json
|
|
||||||
│ └── device_state.json
|
|
||||||
└── docs/
|
└── docs/
|
||||||
├── architecture.md
|
├── architecture.md
|
||||||
├── yang-paths.md # Documented YANG paths
|
├── yang-paths.md # Documented YANG paths
|
||||||
@@ -182,10 +143,6 @@ fabric-orchestrator/
|
|||||||
- [Arista BGP EVPN Configuration Example](https://overlaid.net/2019/01/27/arista-bgp-evpn-configuration-example/)
|
- [Arista BGP EVPN Configuration Example](https://overlaid.net/2019/01/27/arista-bgp-evpn-configuration-example/)
|
||||||
- [Arista EVPN Deployment Guide](https://www.arista.com/en/solutions/evpn-vxlan)
|
- [Arista EVPN Deployment Guide](https://www.arista.com/en/solutions/evpn-vxlan)
|
||||||
|
|
||||||
### Event-Driven Automation
|
|
||||||
- [NetBox Webhooks](https://docs.netbox.dev/en/stable/integrations/webhooks/)
|
|
||||||
- [Event-Driven Ansible](https://www.ansible.com/blog/introducing-event-driven-ansible)
|
|
||||||
|
|
||||||
## 🚀 Getting Started
|
## 🚀 Getting Started
|
||||||
|
|
||||||
*Coming in Phase 1*
|
*Coming in Phase 1*
|
||||||
|
|||||||
Reference in New Issue
Block a user