Cisco Config Builder SaaS
Production-ready network device configuration management platform.
Overview
Cisco Config Builder is a web-based SaaS for managing Cisco device configurations through an intuitive GUI. Build, validate, and deploy network configs to devices securely via SSH.
Key Features
- 🎨 Intuitive configuration builder GUI
- ✅ Real-time configuration validation
- 📊 Live CLI preview
- 🔒 Secure SSH push with confirmation
- 📝 Complete audit logging
- 🔄 Rollback capability
- 🧪 Dry-run mode
Tech Stack
- Backend: FastAPI + SQLAlchemy + PostgreSQL
- Frontend: React + TypeScript
- Network: Netmiko + SSH
- Auth: JWT
- DevOps: Docker + Docker Compose
Quick Start
Prerequisites
- Docker & Docker Compose
- Python 3.11+ (for local development)
- Node.js 20+ (for local development)
Development Setup
# Backend
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
export DATABASE_URL="postgresql://cisco_user:cisco_pass@localhost:5432/cisco_builder"
python run.py
# Frontend (new terminal)
cd frontend
npm install
npm run dev
# Database (PostgreSQL)
# Use docker-compose from docker/ folder or install PostgreSQL locally
docker-compose -f docker/docker-compose.yml up postgres
Production Deployment
# Build and run all services
./startup.sh
# Or manually:
docker-compose -f docker/docker-compose.yml up -d
Architecture
Backend Structure
backend/
├── app/
│ ├── core/ # Config, database, security
│ ├── models/ # SQLAlchemy ORM models
│ ├── schemas/ # Pydantic request/response schemas
│ ├── routers/ # API endpoints (auth, projects, devices, etc.)
│ ├── cli/ # CLI generation engine
│ ├── validation/ # Config validator
│ ├── ssh/ # Netmiko SSH executor
│ └── main.py # FastAPI app
├── tests/ # Unit and integration tests
└── requirements.txt
Frontend Structure
frontend/
├── src/
│ ├── components/ # React components (wizard, preview, modals)
│ ├── pages/ # Page components
│ ├── services/ # API client
│ ├── hooks/ # Custom hooks
│ ├── types/ # TypeScript types
│ └── styles/ # Global styles
└── package.json
API Documentation
Authentication
POST /api/v1/auth/register
POST /api/v1/auth/login
Projects
GET /api/v1/projects
POST /api/v1/projects
GET /api/v1/projects/{id}
PUT /api/v1/projects/{id}
DELETE /api/v1/projects/{id}
Devices
GET /api/v1/devices
POST /api/v1/devices
GET /api/v1/devices/{id}
PUT /api/v1/devices/{id}
DELETE /api/v1/devices/{id}
Configurations
GET /api/v1/configurations
POST /api/v1/configurations
GET /api/v1/configurations/{id}
PUT /api/v1/configurations/{id}
POST /api/v1/configurations/{id}/validate
POST /api/v1/configurations/{id}/generate
POST /api/v1/configurations/{id}/push
Full OpenAPI documentation available at: http://localhost:8000/api/v1/docs
Security Model
Credentials
- Never stored plaintext - Use encryption (Fernet) for in-transit encryption only
- SSH credentials passed at push time - Not stored in database
- Optional encrypted storage for trusted environments (Vault recommended)
Access Control
- JWT-based authentication
- Per-project ownership
- User isolation
Audit Trail
- All push operations logged to
push_logstable - Timestamps, usernames, commands, device output
- Pre-push backup (running-config)
- Rollback metadata
SSH Safety
- Dry-run mode (validation only)
- Explicit confirmation required before push
- Connection timeout: 30s
- Command preview before execution
- Device output logged
Configuration Data Model
Example config_data JSON:
{
"hostname": "SWITCH-01",
"vlans": [
{"id": 10, "name": "USERS"},
{"id": 20, "name": "SERVERS"}
],
"interfaces": [
{
"name": "GigabitEthernet0/1",
"description": "Access Port",
"type": "access",
"vlan": 10,
"enabled": true
},
{
"name": "GigabitEthernet0/24",
"description": "Uplink",
"type": "trunk",
"trunk_vlans": [10, 20],
"enabled": true
}
],
"routes": [
{
"destination": "10.0.0.0/24",
"gateway": "192.168.1.1",
"metric": 1
}
]
}
Validation Engine
The validator checks for:
- ✅ VLAN ID range (1-4094)
- ✅ No duplicate VLANs
- ✅ Interface VLAN references
- ✅ IP address overlaps
- ✅ NAT configuration completeness
- ⚠️ Warnings for trunk VLAN mismatches, missing ACL rules, etc.
Netmiko Integration
Supported device types:
cisco_ios- IOS devicescisco_xe- IOS-XE devicescisco_xr- IOS-XR devices
Commands executed in order:
- Backup running-config (optional)
- Execute configuration commands
- Verify success
- Save to startup-config
- Log to audit trail
Testing
# Run tests
cd backend
pytest
# With coverage
pytest --cov=app tests/
Roadmap
MVP (Current)
- ✅ Basic device management
- ✅ VLAN, interface, routing config
- ✅ CLI generation
- ✅ Validation
- ✅ SSH push
V1
- Multi-device batch operations
- Config templates & macros
- CCNA/CCNP lab presets
- IPv6 support
- Export to PDF/TXT
- Config diff/history
- Role-based access (RBAC)
V2
- Multi-vendor support (Juniper, Arista, etc.)
- API-driven config sync
- Slack/Teams integration
- Advanced scheduling
- Terraform export
License
Proprietary - Cisco Config Builder SaaS
Support
For issues, questions, or feature requests:
- 📧 support@ciscoconfigbuilder.io
- 🐛 GitHub Issues
- 💬 Community Slack
Built with ❤️ for network engineers
Description
Languages
Python
93.2%
TypeScript
3%
CSS
2.1%
Shell
1%
HTML
0.7%