- Extract 9 skill files from command knowledge: - mcp-tools-reference.md: Complete NetBox MCP tools reference - system-discovery.md: Bash commands for system info gathering - device-registration.md: Device registration workflow - sync-workflow.md: Machine sync process - audit-workflow.md: Data quality audit checks - ip-management.md: IP/prefix management and conflict detection - topology-generation.md: Mermaid diagram generation - change-audit.md: NetBox change audit workflow - visual-header.md: Standard visual header pattern - Slim all 11 commands to under 60 lines: - cmdb-sync.md: 348 -> 57 lines - cmdb-register.md: 334 -> 51 lines - ip-conflicts.md: 238 -> 58 lines - cmdb-audit.md: 207 -> 58 lines - cmdb-topology.md: 194 -> 54 lines - initial-setup.md: 176 -> 74 lines - change-audit.md: 175 -> 57 lines - cmdb-site.md: 68 -> 50 lines - cmdb-ip.md: 65 -> 52 lines - cmdb-device.md: 64 -> 55 lines - cmdb-search.md: 46 lines (unchanged) - Update agent to reference skills for best practices - Preserve existing netbox-patterns skill Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
192 lines
4.4 KiB
Markdown
192 lines
4.4 KiB
Markdown
# Sync Workflow Skill
|
|
|
|
How to synchronize machine state with NetBox.
|
|
|
|
## Prerequisites
|
|
|
|
Load these skills:
|
|
- `system-discovery` - Bash commands for system info
|
|
- `mcp-tools-reference` - MCP tool reference
|
|
|
|
## Sync Workflow
|
|
|
|
### Phase 1: Device Lookup
|
|
|
|
```
|
|
dcim_list_devices name=<hostname>
|
|
```
|
|
|
|
If not found, suggest `/cmdb-register` first.
|
|
|
|
If found:
|
|
- Store device ID and current field values
|
|
- Fetch interfaces: `dcim_list_interfaces device_id=<device_id>`
|
|
- Fetch IPs: `ipam_list_ip_addresses device_id=<device_id>`
|
|
- Check clusters/VMs: `virt_list_clusters`, `virt_list_vms cluster=<cluster_id>`
|
|
|
|
### Phase 2: Current State Discovery
|
|
|
|
Use commands from `system-discovery` skill.
|
|
|
|
### Phase 3: Comparison
|
|
|
|
#### Device Attributes
|
|
| Field | Compare |
|
|
|-------|---------|
|
|
| Platform | OS version changed? |
|
|
| Status | Still active? |
|
|
| Serial | Match? |
|
|
| Description | Keep existing |
|
|
|
|
#### Network Interfaces
|
|
| Change Type | Detection |
|
|
|-------------|-----------|
|
|
| New interface | Exists locally but not in NetBox |
|
|
| Removed interface | In NetBox but not locally |
|
|
| Changed MAC | MAC address different |
|
|
| Interface type | Type mismatch |
|
|
|
|
#### IP Addresses
|
|
| Change Type | Detection |
|
|
|-------------|-----------|
|
|
| New IP | Exists locally but not in NetBox |
|
|
| Removed IP | In NetBox but not locally |
|
|
| Primary IP changed | Default route interface changed |
|
|
|
|
#### Docker Containers
|
|
| Change Type | Detection |
|
|
|-------------|-----------|
|
|
| New container | Running locally but no VM in cluster |
|
|
| Stopped container | VM exists but container not running |
|
|
| Resource change | vCPUs/memory different |
|
|
|
|
### Phase 4: Diff Report
|
|
|
|
```markdown
|
|
## Sync Diff Report
|
|
|
|
**Device:** <hostname> (ID: <device_id>)
|
|
**NetBox URL:** https://netbox.example.com/dcim/devices/<id>/
|
|
|
|
### Device Attributes
|
|
| Field | NetBox Value | Current Value | Action |
|
|
|-------|--------------|---------------|--------|
|
|
| Platform | Ubuntu 22.04 | Ubuntu 24.04 | UPDATE |
|
|
|
|
### Network Interfaces
|
|
|
|
#### New Interfaces (will create)
|
|
| Interface | Type | MAC | IPs |
|
|
|-----------|------|-----|-----|
|
|
| tailscale0 | virtual | - | 100.x.x.x/32 |
|
|
|
|
#### Removed Interfaces (will mark offline)
|
|
| Interface | Type | Reason |
|
|
|-----------|------|--------|
|
|
| eth1 | 1000base-t | Not found locally |
|
|
|
|
#### Changed Interfaces
|
|
| Interface | Field | Old | New |
|
|
|-----------|-------|-----|-----|
|
|
| eth0 | mac_address | aa:bb:cc:00:00:00 | aa:bb:cc:11:11:11 |
|
|
|
|
### IP Addresses
|
|
|
|
#### New IPs (will create)
|
|
- 192.168.1.150/24 on eth0
|
|
|
|
#### Removed IPs (will unassign)
|
|
- 192.168.1.100/24 from eth0
|
|
|
|
### Docker Containers
|
|
|
|
#### New Containers (will create VMs)
|
|
| Container | Image | Role |
|
|
|-----------|-------|------|
|
|
| media_lidarr | linuxserver/lidarr | Media Management |
|
|
|
|
### Summary
|
|
- **Updates:** X
|
|
- **Creates:** Y
|
|
- **Removals/Offline:** Z
|
|
```
|
|
|
|
### Phase 5: Apply Updates
|
|
|
|
#### Device Updates
|
|
```
|
|
dcim_update_device id=<device_id> platform=<new_platform_id>
|
|
```
|
|
|
|
#### Interface Updates
|
|
New:
|
|
```
|
|
dcim_create_interface device=<device_id> name=<name> type=<type>
|
|
```
|
|
|
|
Removed (mark offline):
|
|
```
|
|
dcim_update_interface id=<id> enabled=false description="Marked offline by cmdb-sync"
|
|
```
|
|
|
|
Changed:
|
|
```
|
|
dcim_update_interface id=<id> mac_address=<new_mac>
|
|
```
|
|
|
|
#### IP Address Updates
|
|
New:
|
|
```
|
|
ipam_create_ip_address address=<ip/prefix> assigned_object_type="dcim.interface" assigned_object_id=<id>
|
|
```
|
|
|
|
Removed (unassign):
|
|
```
|
|
ipam_update_ip_address id=<id> assigned_object_type=null assigned_object_id=null
|
|
```
|
|
|
|
#### Primary IP Update
|
|
```
|
|
dcim_update_device id=<device_id> primary_ip4=<new_primary_ip_id>
|
|
```
|
|
|
|
#### Container/VM Updates
|
|
New:
|
|
```
|
|
virt_create_vm name=<name> cluster=<cluster_id> status="active"
|
|
```
|
|
|
|
Stopped:
|
|
```
|
|
virt_update_vm id=<id> status="offline"
|
|
```
|
|
|
|
### Phase 6: Journal Entry
|
|
|
|
```
|
|
extras_create_journal_entry
|
|
assigned_object_type="dcim.device"
|
|
assigned_object_id=<device_id>
|
|
comments="Device synced via /cmdb-sync command\n\nChanges applied:\n- <list>"
|
|
```
|
|
|
|
## Sync Modes
|
|
|
|
### Dry Run Mode
|
|
- Complete phases 1-4 (lookup, discovery, compare, diff report)
|
|
- Skip phases 5-6 (no updates, no journal)
|
|
- End with: "Dry run complete. No changes applied."
|
|
|
|
### Full Sync Mode
|
|
- Skip user confirmation
|
|
- Update all fields even if unchanged (force refresh)
|
|
|
|
## Error Handling
|
|
|
|
| Error | Action |
|
|
|-------|--------|
|
|
| Device not found | Suggest `/cmdb-register` |
|
|
| Permission denied | Note which failed, continue others |
|
|
| Cluster not found | Offer to create or skip container sync |
|
|
| API errors | Log error, continue with remaining |
|