Files
shopdb-flask/.claude/setup/VM-SNAPSHOT-GUIDE.md
Proudlock bd48814021 Reorganize repository structure and clean up documentation
Clean up and organize the flask-shopdb repository for better
maintainability and discoverability:

## Changes

- Update .gitignore for build artifacts (publish/, data/, 122M total)
- Reorganize .claude/ into 6 subdirectories with README navigation
- Consolidate overlapping MCP setup guides into MCP-QUICK-START.md
- Move deployment docs from root to docs/deployment/
- Archive dated status reports to .claude/archived/
- Delete temporary files (logs, backups, empty reports, ~50K)

## New Structure

.claude/ organized into:
- setup/ - MCP, VM, Hyper-V, GitHub setup guides + scripts (17 files)
- plans/ - Feature plans and protocols (5 files)
- maintenance/ - Deployment checklists and reports (4 files)
- archived/ - Historical documentation (9 files)
- skills/ - Claude Code automation (5 files)
- workflows/ - Security audit workflow (1 file)

docs/deployment/ created with 6 deployment guides:
- LOCAL-DEV-SETUP.md, DOCKER-SETUP.md, DOCKER-PREBUILT-APPROACH.md
- PRODUCTION-READINESS.md, DEPLOY-TO-VM.md, README.md

Root directory cleaned to essential docs only:
- CLAUDE.md, README.md, CONTRIBUTING.md, CHANGELOG.md

Benefits:
- Clear navigation via README.md in each subdirectory
- No duplicate/overlapping documentation
- Large artifacts properly gitignored (won't bloat repository)
- Historical context preserved in archived/

See .claude/CLEANUP-SUMMARY.md for complete details.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-09-11 15:45:05 -04:00

361 lines
9.9 KiB
Markdown

# VM Snapshot Management for ShopDB Testing
Guide for creating and managing Hyper-V VM snapshots for agent testing with Claude Code MCP integration.
---
## Why Snapshots Matter
**Snapshots enable rapid iteration:**
- Test agent installation/uninstallation
- Revert to clean state after failed deployments
- Test different configurations without rebuilding VM
- Capture known-good states (clean install, agent installed, agent configured)
- Compare behavior across configurations
**With MCP integration, Claude can:**
- Deploy agent to VM via SSH
- Run tests and check results
- Revert VM to snapshot if test fails
- Retry with different configuration
- All automated through conversation
---
## Snapshot Strategy
### Baseline Snapshots (Create Once)
| Snapshot Name | Description | When to Use |
|--------------|-------------|-------------|
| `Clean-Install` | Fresh Windows 11, no software | Starting from scratch |
| `Docker-Ready` | Docker Desktop installed and running | Testing Docker deployments |
| `SSH-Enabled` | OpenSSH server configured | Testing SSH/MCP connections |
| `ShopDB-Deployed` | ShopDB running in Docker | Testing agent integration |
### Testing Snapshots (Create/Delete Frequently)
| Snapshot Name | Description | When to Use |
|--------------|-------------|-------------|
| `Agent-Installed` | Agent service installed but not configured | Testing agent configuration changes |
| `Agent-Running` | Agent fully configured and running | Testing plugin changes |
| `Before-Test-{name}` | State before specific test run | Easy rollback after test |
---
## Creating Snapshots
### Method 1: PowerShell (Recommended for Automation)
```powershell
# From host PC (requires Administrator privileges)
# Create snapshot
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "Clean-Install"
# Create snapshot with description
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "Agent-Installed" `
-Notes "ShopDB agent v1.2.3 installed, not yet configured"
# List all snapshots
Get-VMSnapshot -VMName "ShopDB-Test-VM" | Select-Object Name, CreationTime, ParentSnapshotName | Format-Table
# Show snapshot tree
Get-VMSnapshot -VMName "ShopDB-Test-VM" | Format-Table -Property Name, ParentSnapshotName, CreationTime
```
### Method 2: Hyper-V Manager GUI
1. Open **Hyper-V Manager**
2. Select VM in left pane
3. Right-click VM -> **Checkpoint**
4. Enter snapshot name in dialog
5. Click **OK**
### Method 3: Via Claude Code (When MCP VM Server is Connected)
```
You: "Create a snapshot of the VM named 'Before-Agent-Install'"
Claude: [Uses MCP SSH to run PowerShell command on host]
```
---
## Restoring Snapshots
### Method 1: PowerShell
```powershell
# Restore to specific snapshot
Restore-VMSnapshot -Name "Clean-Install" -VMName "ShopDB-Test-VM" -Confirm:$false
# Restore to most recent snapshot
$latest = Get-VMSnapshot -VMName "ShopDB-Test-VM" | Sort-Object CreationTime -Descending | Select-Object -First 1
Restore-VMSnapshot -VMSnapshot $latest -Confirm:$false
```
### Method 2: Hyper-V Manager GUI
1. Open **Hyper-V Manager**
2. Select VM in left pane
3. In bottom **Checkpoints** pane, right-click desired snapshot
4. Select **Apply**
5. Choose:
- **Apply** (restore without creating new snapshot)
- **Apply and Create Checkpoint** (save current state first)
### Method 3: Via Claude Code
```
You: "Revert VM to 'Clean-Install' snapshot"
Claude: [Uses MCP to restore snapshot via PowerShell]
```
---
## Deleting Snapshots
### PowerShell
```powershell
# Delete specific snapshot
Remove-VMSnapshot -VMName "ShopDB-Test-VM" -Name "Before-Test-2024-09-09"
# Delete all snapshots (WARNING: cannot undo)
Get-VMSnapshot -VMName "ShopDB-Test-VM" | Remove-VMSnapshot -Confirm:$false
# Delete snapshots older than 30 days
$cutoff = (Get-Date).AddDays(-30)
Get-VMSnapshot -VMName "ShopDB-Test-VM" |
Where-Object { $_.CreationTime -lt $cutoff } |
Remove-VMSnapshot -Confirm:$false
```
### Notes on Deletion:
- Deleting a snapshot **merges** its changes into parent snapshot
- Does **not** delete the VM state that snapshot represents
- Frees up disk space on host
---
## Snapshot Workflows with Claude Code
### Example 1: Clean Agent Installation Test
```
You: "Test agent installation from scratch"
Claude:
1. [Restore VM to "Docker-Ready" snapshot]
2. [SSH to VM: Copy agent installer]
3. [SSH to VM: Run installer]
4. [SSH to VM: Verify service installed]
5. [MySQL: Check no endpoint records exist yet]
6. [SSH to VM: Start agent service]
7. [MySQL: Wait for endpoint to register]
8. [SSH to VM: Check agent logs for errors]
9. Result: Agent installed successfully, endpoint registered
You: "Something failed, revert and try again"
Claude:
1. [Restore VM to "Docker-Ready" snapshot]
2. [Retry with adjusted configuration]
```
### Example 2: Test Plugin Changes
```
You: "Deploy new plugin version and test on VM"
Claude:
1. [Create snapshot "Before-Plugin-Update"]
2. [Build frontend with new plugin]
3. [Rebuild Docker image]
4. [SSH to VM: Pull new image]
5. [SSH to VM: Restart containers]
6. [Browser MCP: Open https://192.168.100.10:5001]
7. [Test new plugin functionality]
8. Result: Plugin works! (or: Plugin broken, reverting...)
```
### Example 3: Automated Regression Testing
```
You: "Run full regression test suite on VM"
Claude:
1. [Restore to "ShopDB-Deployed" snapshot]
2. [SSH: Install agent]
3. [MySQL: Create test data (fleet alerts, operator reports)]
4. [SSH: Verify agent receives alerts]
5. [SSH: Submit test operator report]
6. [MySQL: Verify report data stored correctly]
7. [SSH: Capture screenshots of tray notifications]
8. [SSH: Check agent logs for errors]
9. [Restore to "ShopDB-Deployed" (clean up test data)]
10. Result: All tests passed
```
---
## Snapshot Storage and Performance
### Disk Space Considerations
- Each snapshot stores **incremental changes** from parent
- First snapshot after large change (OS update) will be large
- Multiple small snapshots are more efficient than few large ones
- Deleting snapshots merges changes (may take time for large snapshots)
### Check Snapshot Disk Usage
```powershell
Get-VMSnapshot -VMName "ShopDB-Test-VM" |
ForEach-Object {
$path = $_.Path
$size = (Get-ChildItem -Path $path -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{
Name = $_.Name
Created = $_.CreationTime
SizeGB = [math]::Round($size, 2)
}
} | Format-Table
```
### Performance Impact
- **Snapshots slow down VM I/O** (each write goes to differencing disk)
- For long-running VMs, merge old snapshots periodically
- Keep snapshot chain depth under 10 for best performance
- Delete snapshots after merging changes into base disk
---
## Recommended Snapshot Schedule
### Initial Setup (Do Once)
```powershell
# 1. Clean Windows 11 install
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "Clean-Install"
# 2. Install Docker Desktop, reboot, then:
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "Docker-Ready"
# 3. Enable SSH (run enable-vm-ssh.ps1 on VM), then:
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "SSH-Enabled"
# 4. Deploy ShopDB (run deploy-to-vm.ps1), then:
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "ShopDB-Deployed"
```
### During Development
```powershell
# Before risky changes
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "Before-$(Get-Date -Format 'yyyyMMdd-HHmm')"
# After successful test
Remove-VMSnapshot -VMName "ShopDB-Test-VM" -Name "Before-*" -Confirm:$false
# Weekly: Clean up old test snapshots
Get-VMSnapshot -VMName "ShopDB-Test-VM" |
Where-Object { $_.Name -like "Before-*" -and $_.CreationTime -lt (Get-Date).AddDays(-7) } |
Remove-VMSnapshot -Confirm:$false
```
---
## Integration with MCP Test Script
The `test-mcp-servers.ps1` script checks for snapshots:
```powershell
# Run test script
.\\.claude\test-mcp-servers.ps1
# Output includes snapshot status:
# [7/7] Checking VM snapshots...
# OK: Found 4 snapshot(s)
# - ShopDB-Test-VM: Clean-Install (2024-09-08 10:30)
# - ShopDB-Test-VM: Docker-Ready (2024-09-08 11:45)
# - ShopDB-Test-VM: SSH-Enabled (2024-09-08 12:15)
# - ShopDB-Test-VM: ShopDB-Deployed (2024-09-09 09:00)
```
---
## Troubleshooting
### Cannot Create Snapshot
**Error:** "The operation cannot be performed while the virtual machine is running"
- Some VM configurations prevent live snapshots
- **Fix:** Shut down VM first, then create snapshot
**Error:** "Not enough disk space"
- Snapshots require free space on host drive
- **Fix:** Delete old snapshots or increase host drive space
### Cannot Restore Snapshot
**Error:** "The checkpoint operation failed"
- VM may be in saved state
- **Fix:** Shut down VM completely, then restore
### Snapshot Chain Too Deep
**Error:** "Performance degraded due to snapshot chain"
- Too many snapshots slow down VM I/O
- **Fix:** Merge snapshots by deleting intermediate ones
---
## Quick Reference
```powershell
# Create snapshot
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "MySnapshot"
# List snapshots
Get-VMSnapshot -VMName "ShopDB-Test-VM"
# Restore snapshot
Restore-VMSnapshot -Name "MySnapshot" -VMName "ShopDB-Test-VM" -Confirm:$false
# Delete snapshot
Remove-VMSnapshot -Name "MySnapshot" -VMName "ShopDB-Test-VM"
# Delete all snapshots
Get-VMSnapshot -VMName "ShopDB-Test-VM" | Remove-VMSnapshot -Confirm:$false
# Export VM (with snapshots)
Export-VM -Name "ShopDB-Test-VM" -Path "C:\VM-Backups"
# Get snapshot disk usage
Get-VMSnapshot -VMName "ShopDB-Test-VM" |
Select-Object Name, @{N='SizeMB';E={(Get-ChildItem $_.Path -Recurse | Measure-Object Length -Sum).Sum / 1MB}}
```
---
## Next Steps
1. **Create baseline snapshots** using recommended schedule
2. **Test snapshot restore** to verify it works
3. **Run test-mcp-servers.ps1** to verify MCP integration
4. **Practice snapshot workflow** with Claude Code
5. **Set up automated snapshot cleanup** script for weekly maintenance
---
## Related Documentation
- **Setup SSH:** `.claude/setup-vm-ssh.md`
- **Test MCP Servers:** `.claude/test-mcp-servers.ps1`
- **Deploy to VM:** `DEPLOY-TO-VM.md`
- **VM Connectivity:** `test-vm-connectivity.ps1`