Initial commit
This commit is contained in:
571
commands/sonic-config.md
Normal file
571
commands/sonic-config.md
Normal file
@@ -0,0 +1,571 @@
|
||||
---
|
||||
description: Generate SONiC NOS configuration files
|
||||
argument-hint: Optional SONiC requirements
|
||||
---
|
||||
|
||||
You are initiating SONiC (Software for Open Networking in the Cloud) NOS configuration using a structured workflow to create production-ready SONiC configuration files and operational procedures.
|
||||
|
||||
## Workflow Steps
|
||||
|
||||
### 1. Gather Requirements
|
||||
|
||||
If the user provides specific requirements in their message, use those directly. Otherwise, ask the user for:
|
||||
|
||||
**Basic Requirements:**
|
||||
- SONiC version (community or enterprise/vendor-specific)
|
||||
- Platform/hardware (Broadcom, Mellanox, Intel, etc.)
|
||||
- Switch role (Leaf, Spine, ToR, Border, etc.)
|
||||
- Hostname and basic metadata
|
||||
|
||||
**Configuration Type Needed:**
|
||||
- Interface configuration (physical ports, speeds, MTU)
|
||||
- VLAN configuration
|
||||
- Port channel/LAG configuration
|
||||
- BGP routing configuration
|
||||
- OSPF routing configuration
|
||||
- ACL configuration
|
||||
- QoS configuration
|
||||
- Loopback interfaces
|
||||
- Static routes
|
||||
- System management (NTP, syslog, SNMP)
|
||||
|
||||
**For Interface Configuration:**
|
||||
- Interface names (Ethernet0, Ethernet4, etc.)
|
||||
- Speeds (10G, 25G, 40G, 100G, 400G)
|
||||
- Admin status (up/down)
|
||||
- MTU settings (typically 9100 for data centers)
|
||||
- FEC settings (RS, FC)
|
||||
|
||||
**For VLAN Configuration:**
|
||||
- VLAN IDs and descriptions
|
||||
- VLAN member ports
|
||||
- Tagging mode (tagged/untagged)
|
||||
- VLAN interface IP addresses
|
||||
|
||||
**For Port Channel/LAG:**
|
||||
- Port channel interface names
|
||||
- Member interfaces
|
||||
- LACP configuration
|
||||
- Minimum links
|
||||
|
||||
**For BGP Configuration:**
|
||||
- Local ASN
|
||||
- BGP neighbors (IP, ASN, descriptions)
|
||||
- Peer groups
|
||||
- Route policies and prefix lists
|
||||
- Address families (IPv4, IPv6, EVPN)
|
||||
- Authentication
|
||||
|
||||
**For ACL Configuration:**
|
||||
- ACL table names and types (L3, L2, CTRLPLANE)
|
||||
- ACL rules (priorities, actions, match criteria)
|
||||
- Port bindings
|
||||
|
||||
**For QoS Configuration:**
|
||||
- DSCP to TC mapping
|
||||
- TC to queue mapping
|
||||
- Scheduler policies
|
||||
- Port QoS profiles
|
||||
|
||||
### 2. Launch sonic-engineer Agent
|
||||
|
||||
Use the Task tool to launch the sonic-engineer agent with a detailed prompt containing:
|
||||
|
||||
```
|
||||
Generate SONiC configuration for the following requirements:
|
||||
|
||||
[Insert gathered requirements here with all details]
|
||||
|
||||
Please provide:
|
||||
1. Complete config_db.json file
|
||||
2. Equivalent CLI commands for reference
|
||||
3. Step-by-step deployment procedure
|
||||
4. Validation commands specific to this configuration
|
||||
5. Rollback procedure
|
||||
6. Any platform-specific notes or requirements
|
||||
7. Prerequisites (SONiC version, required features)
|
||||
```
|
||||
|
||||
### 3. Review Generated Configuration
|
||||
|
||||
When the agent returns the configuration, review it for:
|
||||
- Valid JSON syntax
|
||||
- Correct SONiC schema structure
|
||||
- All required sections present (DEVICE_METADATA, etc.)
|
||||
- Proper interface naming for the platform
|
||||
- No conflicting configurations
|
||||
- Complete BGP/routing configuration
|
||||
- Appropriate security settings
|
||||
|
||||
### 4. Validate JSON Syntax
|
||||
|
||||
Before deployment, ensure JSON syntax validation:
|
||||
|
||||
```bash
|
||||
# Validate JSON syntax
|
||||
python3 -m json.tool config_db.json
|
||||
|
||||
# Or use jq
|
||||
jq . config_db.json
|
||||
|
||||
# Check for common issues
|
||||
jq 'keys' config_db.json # Show top-level keys
|
||||
```
|
||||
|
||||
### 5. Present Deployment Procedure
|
||||
|
||||
Ensure the generated configuration includes a safe deployment procedure:
|
||||
|
||||
1. **Backup Current Configuration**
|
||||
```bash
|
||||
# Save current running config
|
||||
config save -y
|
||||
|
||||
# Create timestamped backup
|
||||
sudo cp /etc/sonic/config_db.json /etc/sonic/config_db.json.backup.$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
# Save current state
|
||||
show running-config > ~/sonic-config-backup-$(date +%Y%m%d_%H%M%S).txt
|
||||
show interfaces status >> ~/sonic-config-backup-$(date +%Y%m%d_%H%M%S).txt
|
||||
```
|
||||
|
||||
2. **Validate New Configuration**
|
||||
```bash
|
||||
# Validate JSON syntax
|
||||
python3 -m json.tool new_config_db.json
|
||||
|
||||
# Validate SONiC config format
|
||||
sonic-cfggen -j new_config_db.json --print-data
|
||||
|
||||
# Check for required keys
|
||||
jq 'has("DEVICE_METADATA")' new_config_db.json
|
||||
```
|
||||
|
||||
3. **Deploy Configuration**
|
||||
```bash
|
||||
# Copy new configuration
|
||||
sudo cp new_config_db.json /etc/sonic/config_db.json
|
||||
|
||||
# Set correct permissions
|
||||
sudo chown root:root /etc/sonic/config_db.json
|
||||
sudo chmod 644 /etc/sonic/config_db.json
|
||||
```
|
||||
|
||||
4. **Apply Configuration**
|
||||
```bash
|
||||
# Method 1: Load configuration without full restart
|
||||
config load /etc/sonic/config_db.json -y
|
||||
|
||||
# Method 2: Full configuration reload (restarts services)
|
||||
config reload -y
|
||||
|
||||
# Method 3: Load and save
|
||||
config load /etc/sonic/config_db.json -y && config save -y
|
||||
```
|
||||
|
||||
5. **Verify Configuration**
|
||||
```bash
|
||||
# Check interfaces
|
||||
show interfaces status
|
||||
|
||||
# Check IP configuration
|
||||
show ip interfaces
|
||||
|
||||
# Check BGP (if configured)
|
||||
show ip bgp summary
|
||||
|
||||
# Check VLANs (if configured)
|
||||
show vlan brief
|
||||
|
||||
# Check port channels (if configured)
|
||||
show interfaces portchannel
|
||||
|
||||
# Check system status
|
||||
show system-health
|
||||
```
|
||||
|
||||
### 6. Provide Validation Commands
|
||||
|
||||
Include comprehensive validation commands for each configuration type:
|
||||
|
||||
**Interface Validation:**
|
||||
```bash
|
||||
# Show all interface status
|
||||
show interfaces status
|
||||
|
||||
# Show specific interface
|
||||
show interfaces status Ethernet0
|
||||
|
||||
# Show interface counters
|
||||
show interfaces counters
|
||||
|
||||
# Show interface errors
|
||||
show interfaces counters errors
|
||||
|
||||
# Show transceiver information
|
||||
show interfaces transceiver info
|
||||
|
||||
# Show interface description
|
||||
show interfaces description
|
||||
```
|
||||
|
||||
**VLAN Validation:**
|
||||
```bash
|
||||
# Show VLAN configuration
|
||||
show vlan brief
|
||||
|
||||
# Show detailed VLAN config
|
||||
show vlan config
|
||||
|
||||
# Show VLAN member ports
|
||||
show vlan id 100
|
||||
```
|
||||
|
||||
**Port Channel Validation:**
|
||||
```bash
|
||||
# Show port channel summary
|
||||
show interfaces portchannel
|
||||
|
||||
# Show LACP status
|
||||
show lacp neighbor
|
||||
show lacp internal
|
||||
|
||||
# Show port channel details
|
||||
show interface PortChannel1
|
||||
```
|
||||
|
||||
**BGP Validation:**
|
||||
```bash
|
||||
# Show BGP summary
|
||||
show ip bgp summary
|
||||
|
||||
# Show BGP neighbors
|
||||
show ip bgp neighbors
|
||||
|
||||
# Show BGP routes
|
||||
show ip bgp
|
||||
|
||||
# Show received routes from neighbor
|
||||
show ip bgp neighbors 192.168.1.1 received-routes
|
||||
|
||||
# Show advertised routes to neighbor
|
||||
show ip bgp neighbors 192.168.1.1 advertised-routes
|
||||
|
||||
# Show BGP configuration
|
||||
show runningconfiguration bgp
|
||||
```
|
||||
|
||||
**OSPF Validation:**
|
||||
```bash
|
||||
# Show OSPF neighbors
|
||||
show ip ospf neighbor
|
||||
|
||||
# Show OSPF routes
|
||||
show ip ospf route
|
||||
|
||||
# Show OSPF database
|
||||
show ip ospf database
|
||||
|
||||
# Show OSPF interfaces
|
||||
show ip ospf interface
|
||||
```
|
||||
|
||||
**ACL Validation:**
|
||||
```bash
|
||||
# Show ACL tables
|
||||
show acl table
|
||||
|
||||
# Show ACL rules
|
||||
show acl rule
|
||||
|
||||
# Show ACL counters
|
||||
acl-loader show table
|
||||
acl-loader show rule
|
||||
```
|
||||
|
||||
**QoS Validation:**
|
||||
```bash
|
||||
# Show QoS maps
|
||||
show qos map dscp-to-tc
|
||||
show qos map tc-to-queue
|
||||
|
||||
# Show queue counters
|
||||
show queue counters
|
||||
|
||||
# Show priority-group
|
||||
show priority-group
|
||||
```
|
||||
|
||||
**System Validation:**
|
||||
```bash
|
||||
# Show system information
|
||||
show version
|
||||
show platform summary
|
||||
show platform syseeprom
|
||||
|
||||
# Show services
|
||||
show services
|
||||
|
||||
# Show system health
|
||||
show system-health
|
||||
|
||||
# Show running configuration
|
||||
show running-config
|
||||
```
|
||||
|
||||
### 7. Include Troubleshooting Commands
|
||||
|
||||
Provide troubleshooting commands for common issues:
|
||||
|
||||
**Configuration Not Applied:**
|
||||
```bash
|
||||
# Check config_db.json syntax
|
||||
python3 -m json.tool /etc/sonic/config_db.json
|
||||
|
||||
# Check SONiC services
|
||||
show services
|
||||
|
||||
# Restart specific service
|
||||
sudo systemctl restart bgp
|
||||
sudo systemctl restart swss
|
||||
|
||||
# Check service logs
|
||||
sudo journalctl -u bgp -n 100
|
||||
sudo journalctl -u swss -n 100
|
||||
|
||||
# View syslog
|
||||
show logging
|
||||
tail -f /var/log/syslog
|
||||
```
|
||||
|
||||
**Interface Issues:**
|
||||
```bash
|
||||
# Check interface admin state
|
||||
show interfaces status Ethernet0
|
||||
|
||||
# Check physical link
|
||||
show interfaces transceiver info Ethernet0
|
||||
|
||||
# Check interface errors
|
||||
show interfaces counters errors Ethernet0
|
||||
|
||||
# Clear interface counters
|
||||
sonic-clear counters
|
||||
|
||||
# Check ASIC programming
|
||||
show platform switch
|
||||
```
|
||||
|
||||
**BGP Not Establishing:**
|
||||
```bash
|
||||
# Check BGP configuration
|
||||
show runningconfiguration bgp
|
||||
|
||||
# Check BGP neighbors
|
||||
show ip bgp neighbors 192.168.1.1
|
||||
|
||||
# Enable BGP debugging
|
||||
vtysh -c "debug bgp neighbor-events"
|
||||
vtysh -c "debug bgp updates"
|
||||
|
||||
# Check connectivity to neighbor
|
||||
ping 192.168.1.1
|
||||
|
||||
# Check routing table
|
||||
show ip route
|
||||
```
|
||||
|
||||
**VLAN Issues:**
|
||||
```bash
|
||||
# Check VLAN configuration
|
||||
show vlan config
|
||||
|
||||
# Check VLAN member configuration
|
||||
redis-cli -n 4 HGETALL "VLAN_MEMBER|Vlan100|Ethernet8"
|
||||
|
||||
# Check bridge FDB
|
||||
show mac
|
||||
|
||||
# Check VLAN interface
|
||||
show ip interfaces | grep Vlan
|
||||
```
|
||||
|
||||
**Database Issues:**
|
||||
```bash
|
||||
# Access config database (DB 4)
|
||||
redis-cli -n 4
|
||||
|
||||
# Show all keys
|
||||
redis-cli -n 4 KEYS "*"
|
||||
|
||||
# Show specific configuration
|
||||
redis-cli -n 4 HGETALL "PORT|Ethernet0"
|
||||
redis-cli -n 4 HGETALL "DEVICE_METADATA|localhost"
|
||||
|
||||
# Check application database (DB 0)
|
||||
redis-cli -n 0 KEYS "*"
|
||||
```
|
||||
|
||||
### 8. Document Rollback Procedure
|
||||
|
||||
Ensure rollback procedure is clearly documented:
|
||||
|
||||
```bash
|
||||
# Method 1: Restore from backup
|
||||
sudo cp /etc/sonic/config_db.json.backup.YYYYMMDD_HHMMSS /etc/sonic/config_db.json
|
||||
config reload -y
|
||||
|
||||
# Method 2: Load previous working config
|
||||
config load /etc/sonic/config_db.json.backup.YYYYMMDD_HHMMSS -y
|
||||
|
||||
# Method 3: Manual configuration via CLI (temporary)
|
||||
# Use vtysh for routing protocols
|
||||
sudo vtysh
|
||||
# Use config commands for interfaces/VLANs
|
||||
config interface ip add Ethernet0 192.168.1.1/24
|
||||
|
||||
# Method 4: Factory reset (CAUTION)
|
||||
# sudo config-setup factory
|
||||
|
||||
# Verify rollback
|
||||
show interfaces status
|
||||
show ip bgp summary
|
||||
show vlan brief
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
When generating SONiC configurations:
|
||||
|
||||
1. **Configuration Management**
|
||||
- Always backup before changes
|
||||
- Use version control for config_db.json
|
||||
- Test in lab environment first
|
||||
- Document all changes
|
||||
|
||||
2. **Interface Configuration**
|
||||
- Use consistent interface naming
|
||||
- Configure appropriate MTU for network (9100 for data centers)
|
||||
- Enable FEC where appropriate
|
||||
- Add meaningful descriptions
|
||||
|
||||
3. **Routing Configuration**
|
||||
- Use BGP authentication
|
||||
- Implement prefix filtering
|
||||
- Configure maximum-prefix limits
|
||||
- Use BFD for fast convergence
|
||||
|
||||
4. **VLAN Design**
|
||||
- Plan VLAN ID scheme
|
||||
- Use meaningful VLAN descriptions
|
||||
- Separate traffic types appropriately
|
||||
- Configure VLAN interfaces for L3
|
||||
|
||||
5. **High Availability**
|
||||
- Configure redundant uplinks
|
||||
- Use port channels for link aggregation
|
||||
- Implement BFD for fast failure detection
|
||||
- Configure multiple BGP sessions
|
||||
|
||||
6. **Security**
|
||||
- Implement control plane ACLs
|
||||
- Use routing protocol authentication
|
||||
- Configure management ACLs
|
||||
- Enable logging and monitoring
|
||||
|
||||
7. **Operational Excellence**
|
||||
- Configure NTP for time synchronization
|
||||
- Set up syslog to central server
|
||||
- Enable SNMP monitoring
|
||||
- Use consistent naming conventions
|
||||
|
||||
## Common Scenarios
|
||||
|
||||
### Data Center Leaf Switch (BGP Unnumbered)
|
||||
- Underlay BGP with spine neighbors
|
||||
- VLAN configuration for server access
|
||||
- Port channels for server bonding
|
||||
- Loopback for VTEP
|
||||
- ACLs for security
|
||||
|
||||
### Top-of-Rack (ToR) Switch
|
||||
- Access port configuration for servers
|
||||
- Uplinks to spine (port channels)
|
||||
- VLANs for network segmentation
|
||||
- Basic BGP or OSPF routing
|
||||
- QoS policies
|
||||
|
||||
### Spine Switch
|
||||
- High-density 100G/400G interfaces
|
||||
- BGP configuration for all leaf neighbors
|
||||
- Route reflection (if used)
|
||||
- Minimal VLANs (management only)
|
||||
- BFD for fast convergence
|
||||
|
||||
### Border/Edge Switch
|
||||
- External BGP peering
|
||||
- Route filtering and policies
|
||||
- ACLs for security
|
||||
- NAT configuration (if supported)
|
||||
- Internet routing table handling
|
||||
|
||||
## SONiC Architecture Notes
|
||||
|
||||
**Key Components:**
|
||||
- **Redis Database**: Configuration and state storage
|
||||
- **Docker Containers**: Modular service architecture
|
||||
- **SAI**: Switch Abstraction Interface for hardware
|
||||
- **FRR**: Routing protocol daemon (BGP, OSPF, etc.)
|
||||
- **Orchestration Agent**: Translates config to ASIC
|
||||
|
||||
**Database Structure:**
|
||||
- **ConfigDB** (DB 4): Configuration data
|
||||
- **AppDB** (DB 0): Application state
|
||||
- **StateDB** (DB 6): Operational state
|
||||
- **ASIC_DB** (DB 1): Hardware programming
|
||||
|
||||
**Configuration Methods:**
|
||||
1. config_db.json (recommended for automation)
|
||||
2. CLI commands (immediate application)
|
||||
3. OpenConfig/gNMI (enterprise features)
|
||||
4. REST API (if available)
|
||||
|
||||
## Platform Considerations
|
||||
|
||||
**Broadcom-based Switches:**
|
||||
- Common in enterprise and cloud
|
||||
- SAI fully supported
|
||||
- Check BCM shell access if needed
|
||||
|
||||
**Mellanox-based Switches:**
|
||||
- Common in high-performance networks
|
||||
- Spectrum ASIC series
|
||||
- Check SX-SDK version
|
||||
|
||||
**Barefoot/Intel Tofino:**
|
||||
- Programmable pipeline
|
||||
- P4 runtime support
|
||||
- Check platform-specific features
|
||||
|
||||
**Interface Naming:**
|
||||
- Usually Ethernet0, Ethernet4, etc. (increments of 4)
|
||||
- Check platform documentation for mapping
|
||||
- Alias field for human-readable names
|
||||
|
||||
## Notes
|
||||
|
||||
- SONiC uses JSON-based configuration (config_db.json)
|
||||
- Configuration stored in Redis database
|
||||
- Supports both CLI and file-based configuration
|
||||
- Container-based architecture for modularity
|
||||
- Uses FRR for routing protocols (BGP, OSPF, IS-IS)
|
||||
- SAI provides hardware abstraction
|
||||
- Always validate JSON syntax before deployment
|
||||
- Test routing changes in maintenance windows
|
||||
- Monitor ASIC programming after changes
|
||||
|
||||
## Example Task Invocation
|
||||
|
||||
```
|
||||
sonic-config I need a data center leaf switch configuration with ASN 65001, two spine BGP neighbors (192.168.1.1 and 192.168.1.2 both AS 65100), VLAN 100 for servers on Ethernet8-Ethernet24, loopback 10.0.0.1/32, and port channel with Ethernet0 and Ethernet4 for uplink
|
||||
```
|
||||
Reference in New Issue
Block a user