Workspace Management Guide
This document provides comprehensive guidance on setting up and using development workspaces, including the path resolution system, testing infrastructure, and workspace tools usage.
Table of Contents
- Overview
- Workspace Architecture
- Setup and Initialization
- Path Resolution System
- Configuration Management
- Extension Development
- Runtime Management
- Health Monitoring
- Backup and Restore
- Troubleshooting
Overview
The workspace system provides isolated development environments for the provisioning project, enabling:
- User Isolation: Each developer has their own workspace with isolated runtime data
- Configuration Cascading: Hierarchical configuration from workspace to core system
- Extension Development: Template-based extension development with testing
- Path Resolution: Smart path resolution with workspace-aware fallbacks
- Health Monitoring: Comprehensive health checks with automatic repairs
- Backup/Restore: Complete workspace backup and restore capabilities
Location: /workspace/
Main Tool: workspace/tools/workspace.nu
Workspace Architecture
Directory Structure
workspace/
├── config/ # Development configuration
│ ├── dev-defaults.toml # Development environment defaults
│ ├── test-defaults.toml # Testing environment configuration
│ ├── local-overrides.toml.example # User customization template
│ └── {user}.toml # User-specific configurations
├── extensions/ # Extension development
│ ├── providers/ # Custom provider extensions
│ │ ├── template/ # Provider development template
│ │ └── {user}/ # User-specific providers
│ ├── taskservs/ # Custom task service extensions
│ │ ├── template/ # Task service template
│ │ └── {user}/ # User-specific task services
│ └── clusters/ # Custom cluster extensions
│ ├── template/ # Cluster template
│ └── {user}/ # User-specific clusters
├── infra/ # Development infrastructure
│ ├── examples/ # Example infrastructures
│ │ ├── minimal/ # Minimal learning setup
│ │ ├── development/ # Full development environment
│ │ └── testing/ # Testing infrastructure
│ ├── local/ # Local development setups
│ └── {user}/ # User-specific infrastructures
├── lib/ # Workspace libraries
│ └── path-resolver.nu # Path resolution system
├── runtime/ # Runtime data (per-user isolation)
│ ├── workspaces/{user}/ # User workspace data
│ ├── cache/{user}/ # User-specific cache
│ ├── state/{user}/ # User state management
│ ├── logs/{user}/ # User application logs
│ └── data/{user}/ # User database files
└── tools/ # Workspace management tools
├── workspace.nu # Main workspace interface
├── init-workspace.nu # Workspace initialization
├── workspace-health.nu # Health monitoring
├── backup-workspace.nu # Backup management
├── restore-workspace.nu # Restore functionality
├── reset-workspace.nu # Workspace reset
└── runtime-manager.nu # Runtime data management
Component Integration
Workspace → Core Integration:
- Workspace paths take priority over core paths
- Extensions discovered automatically from workspace
- Configuration cascades from workspace to core defaults
- Runtime data completely isolated per user
Development Workflow:
- Initialize personal workspace
- Configure development environment
- Develop extensions and infrastructure
- Test locally with isolated environment
- Deploy to shared infrastructure
Setup and Initialization
Quick Start
# Navigate to workspace
cd workspace/tools
# Initialize workspace with defaults
nu workspace.nu init
# Initialize with specific options
nu workspace.nu init --user-name developer --infra-name my-dev-infra
Complete Initialization
# Full initialization with all options
nu workspace.nu init \
--user-name developer \
--infra-name development-env \
--workspace-type development \
--template full \
--overwrite \
--create-examples
Initialization Parameters:
--user-name: User identifier (defaults to$env.USER)--infra-name: Infrastructure name for this workspace--workspace-type: Type (development,testing,production)--template: Template to use (minimal,full,custom)--overwrite: Overwrite existing workspace--create-examples: Create example configurations and infrastructure
Post-Initialization Setup
Verify Installation:
# Check workspace health
nu workspace.nu health --detailed
# Show workspace status
nu workspace.nu status --detailed
# List workspace contents
nu workspace.nu list
Configure Development Environment:
# Create user-specific configuration
cp workspace/config/local-overrides.toml.example workspace/config/$USER.toml
# Edit configuration
$EDITOR workspace/config/$USER.toml
Path Resolution System
The workspace implements a sophisticated path resolution system that prioritizes workspace paths while providing fallbacks to core system paths.
Resolution Hierarchy
Resolution Order:
- Workspace User Paths:
workspace/{type}/{user}/{name} - Workspace Shared Paths:
workspace/{type}/{name} - Workspace Templates:
workspace/{type}/template/{name} - Core System Paths:
core/{type}/{name}(fallback)
Using Path Resolution
# Import path resolver
use workspace/lib/path-resolver.nu
# Resolve configuration with workspace awareness
let config_path = (path-resolver resolve_path "config" "user" --workspace-user "developer")
# Resolve with automatic fallback to core
let extension_path = (path-resolver resolve_path "extensions" "custom-provider" --fallback-to-core)
# Create missing directories during resolution
let new_path = (path-resolver resolve_path "infra" "my-infra" --create-missing)
Configuration Resolution
Hierarchical Configuration Loading:
# Resolve configuration with full hierarchy
let config = (path-resolver resolve_config "user" --workspace-user "developer")
# Load environment-specific configuration
let dev_config = (path-resolver resolve_config "development" --workspace-user "developer")
# Get merged configuration with all overrides
let merged = (path-resolver resolve_config "merged" --workspace-user "developer" --include-overrides)
Extension Discovery
Automatic Extension Discovery:
# Find custom provider extension
let provider = (path-resolver resolve_extension "providers" "my-aws-provider")
# Discover all available task services
let taskservs = (path-resolver list_extensions "taskservs" --include-core)
# Find cluster definition
let cluster = (path-resolver resolve_extension "clusters" "development-cluster")
Health Checking
Workspace Health Validation:
# Check workspace health with automatic fixes
let health = (path-resolver check_workspace_health --workspace-user "developer" --fix-issues)
# Validate path resolution chain
let validation = (path-resolver validate_paths --workspace-user "developer" --repair-broken)
# Check runtime directories
let runtime_status = (path-resolver check_runtime_health --workspace-user "developer")
Configuration Management
Configuration Hierarchy
Configuration Cascade:
- User Configuration:
workspace/config/{user}.toml - Environment Defaults:
workspace/config/{env}-defaults.toml - Workspace Defaults:
workspace/config/dev-defaults.toml - Core System Defaults:
config.defaults.toml
Environment-Specific Configuration
Development Environment (workspace/config/dev-defaults.toml):
[core]
name = "provisioning-dev"
version = "dev-${git.branch}"
[development]
auto_reload = true
verbose_logging = true
experimental_features = true
hot_reload_templates = true
[http]
use_curl = false
timeout = 30
retry_count = 3
[cache]
enabled = true
ttl = 300
refresh_interval = 60
[logging]
level = "debug"
file_rotation = true
max_size = "10MB"
Testing Environment (workspace/config/test-defaults.toml):
[core]
name = "provisioning-test"
version = "test-${build.timestamp}"
[testing]
mock_providers = true
ephemeral_resources = true
parallel_tests = true
cleanup_after_test = true
[http]
use_curl = true
timeout = 10
retry_count = 1
[cache]
enabled = false
mock_responses = true
[logging]
level = "info"
test_output = true
User Configuration Example
User-Specific Configuration (workspace/config/{user}.toml):
[core]
name = "provisioning-${workspace.user}"
version = "1.0.0-dev"
[infra]
current = "${workspace.user}-development"
default_provider = "upcloud"
[workspace]
user = "developer"
type = "development"
infra_name = "developer-dev"
[development]
preferred_editor = "code"
auto_backup = true
backup_interval = "1h"
[paths]
# Custom paths for this user
templates = "~/custom-templates"
extensions = "~/my-extensions"
[git]
auto_commit = false
commit_message_template = "[${workspace.user}] ${change.type}: ${change.description}"
[notifications]
slack_webhook = "https://hooks.slack.com/..."
email = "developer@company.com"
Configuration Commands
Workspace Configuration Management:
# Show current configuration
nu workspace.nu config show
# Validate configuration
nu workspace.nu config validate --user-name developer
# Edit user configuration
nu workspace.nu config edit --user-name developer
# Show configuration hierarchy
nu workspace.nu config hierarchy --user-name developer
# Merge configurations for debugging
nu workspace.nu config merge --user-name developer --output merged-config.toml
Extension Development
Extension Types
The workspace provides templates and tools for developing three types of extensions:
- Providers: Cloud provider implementations
- Task Services: Infrastructure service components
- Clusters: Complete deployment solutions
Provider Extension Development
Create New Provider:
# Copy template
cp -r workspace/extensions/providers/template workspace/extensions/providers/my-provider
# Initialize provider
cd workspace/extensions/providers/my-provider
nu init.nu --provider-name my-provider --author developer
Provider Structure:
workspace/extensions/providers/my-provider/
├── kcl/
│ ├── provider.k # Provider configuration schema
│ ├── server.k # Server configuration
│ └── version.k # Version management
├── nulib/
│ ├── provider.nu # Main provider implementation
│ ├── servers.nu # Server management
│ └── auth.nu # Authentication handling
├── templates/
│ ├── server.j2 # Server configuration template
│ └── network.j2 # Network configuration template
├── tests/
│ ├── unit/ # Unit tests
│ └── integration/ # Integration tests
└── README.md
Test Provider:
# Run provider tests
nu workspace/extensions/providers/my-provider/nulib/provider.nu test
# Test with dry-run
nu workspace/extensions/providers/my-provider/nulib/provider.nu create-server --dry-run
# Integration test
nu workspace/extensions/providers/my-provider/tests/integration/basic-test.nu
Task Service Extension Development
Create New Task Service:
# Copy template
cp -r workspace/extensions/taskservs/template workspace/extensions/taskservs/my-service
# Initialize service
cd workspace/extensions/taskservs/my-service
nu init.nu --service-name my-service --service-type database
Task Service Structure:
workspace/extensions/taskservs/my-service/
├── kcl/
│ ├── taskserv.k # Service configuration schema
│ ├── version.k # Version configuration with GitHub integration
│ └── kcl.mod # KCL module dependencies
├── nushell/
│ ├── taskserv.nu # Main service implementation
│ ├── install.nu # Installation logic
│ ├── uninstall.nu # Removal logic
│ └── check-updates.nu # Version checking
├── templates/
│ ├── config.j2 # Service configuration template
│ ├── systemd.j2 # Systemd service template
│ └── compose.j2 # Docker Compose template
└── manifests/
├── deployment.yaml # Kubernetes deployment
└── service.yaml # Kubernetes service
Cluster Extension Development
Create New Cluster:
# Copy template
cp -r workspace/extensions/clusters/template workspace/extensions/clusters/my-cluster
# Initialize cluster
cd workspace/extensions/clusters/my-cluster
nu init.nu --cluster-name my-cluster --cluster-type web-stack
Testing Extensions:
# Test extension syntax
nu workspace.nu tools validate-extension providers/my-provider
# Run extension tests
nu workspace.nu tools test-extension taskservs/my-service
# Integration test with infrastructure
nu workspace.nu tools deploy-test clusters/my-cluster --infra test-env
Runtime Management
Runtime Data Organization
Per-User Isolation:
runtime/
├── workspaces/
│ ├── developer/ # Developer's workspace data
│ │ ├── current-infra # Current infrastructure context
│ │ ├── settings.toml # Runtime settings
│ │ └── extensions/ # Extension runtime data
│ └── tester/ # Tester's workspace data
├── cache/
│ ├── developer/ # Developer's cache
│ │ ├── providers/ # Provider API cache
│ │ ├── images/ # Container image cache
│ │ └── downloads/ # Downloaded artifacts
│ └── tester/ # Tester's cache
├── state/
│ ├── developer/ # Developer's state
│ │ ├── deployments/ # Deployment state
│ │ └── workflows/ # Workflow state
│ └── tester/ # Tester's state
├── logs/
│ ├── developer/ # Developer's logs
│ │ ├── provisioning.log
│ │ ├── orchestrator.log
│ │ └── extensions/
│ └── tester/ # Tester's logs
└── data/
├── developer/ # Developer's data
│ ├── database.db # Local database
│ └── backups/ # Local backups
└── tester/ # Tester's data
Runtime Management Commands
Initialize Runtime Environment:
# Initialize for current user
nu workspace/tools/runtime-manager.nu init
# Initialize for specific user
nu workspace/tools/runtime-manager.nu init --user-name developer
Runtime Cleanup:
# Clean cache older than 30 days
nu workspace/tools/runtime-manager.nu cleanup --type cache --age 30d
# Clean logs with rotation
nu workspace/tools/runtime-manager.nu cleanup --type logs --rotate
# Clean temporary files
nu workspace/tools/runtime-manager.nu cleanup --type temp --force
Log Management:
# View recent logs
nu workspace/tools/runtime-manager.nu logs --action tail --lines 100
# Follow logs in real-time
nu workspace/tools/runtime-manager.nu logs --action tail --follow
# Rotate large log files
nu workspace/tools/runtime-manager.nu logs --action rotate
# Archive old logs
nu workspace/tools/runtime-manager.nu logs --action archive --older-than 7d
Cache Management:
# Show cache statistics
nu workspace/tools/runtime-manager.nu cache --action stats
# Optimize cache
nu workspace/tools/runtime-manager.nu cache --action optimize
# Clear specific cache
nu workspace/tools/runtime-manager.nu cache --action clear --type providers
# Refresh cache
nu workspace/tools/runtime-manager.nu cache --action refresh --selective
Monitoring:
# Monitor runtime usage
nu workspace/tools/runtime-manager.nu monitor --duration 5m --interval 30s
# Check disk usage
nu workspace/tools/runtime-manager.nu monitor --type disk
# Monitor active processes
nu workspace/tools/runtime-manager.nu monitor --type processes --workspace-user developer
Health Monitoring
Health Check System
The workspace provides comprehensive health monitoring with automatic repair capabilities.
Health Check Components:
- Directory Structure: Validates workspace directory integrity
- Configuration Files: Checks configuration syntax and completeness
- Runtime Environment: Validates runtime data and permissions
- Extension Status: Checks extension functionality
- Resource Usage: Monitors disk space and memory usage
- Integration Status: Tests integration with core system
Health Commands
Basic Health Check:
# Quick health check
nu workspace.nu health
# Detailed health check with all components
nu workspace.nu health --detailed
# Health check with automatic fixes
nu workspace.nu health --fix-issues
# Export health report
nu workspace.nu health --report-format json > health-report.json
Component-Specific Health Checks:
# Check directory structure
nu workspace/tools/workspace-health.nu check-directories --workspace-user developer
# Validate configuration files
nu workspace/tools/workspace-health.nu check-config --workspace-user developer
# Check runtime environment
nu workspace/tools/workspace-health.nu check-runtime --workspace-user developer
# Test extension functionality
nu workspace/tools/workspace-health.nu check-extensions --workspace-user developer
Health Monitoring Output
Example Health Report:
{
"workspace_health": {
"user": "developer",
"timestamp": "2025-09-25T14:30:22Z",
"overall_status": "healthy",
"checks": {
"directories": {
"status": "healthy",
"issues": [],
"auto_fixed": []
},
"configuration": {
"status": "warning",
"issues": [
"User configuration missing default provider"
],
"auto_fixed": [
"Created missing user configuration file"
]
},
"runtime": {
"status": "healthy",
"disk_usage": "1.2GB",
"cache_size": "450MB",
"log_size": "120MB"
},
"extensions": {
"status": "healthy",
"providers": 2,
"taskservs": 5,
"clusters": 1
}
},
"recommendations": [
"Consider cleaning cache (>400MB)",
"Rotate logs (>100MB)"
]
}
}
Automatic Fixes
Auto-Fix Capabilities:
- Missing Directories: Creates missing workspace directories
- Broken Symlinks: Repairs or removes broken symbolic links
- Configuration Issues: Creates missing configuration files with defaults
- Permission Problems: Fixes file and directory permissions
- Corrupted Cache: Clears and rebuilds corrupted cache entries
- Log Rotation: Rotates large log files automatically
Backup and Restore
Backup System
Backup Components:
- Configuration: All workspace configuration files
- Extensions: Custom extensions and templates
- Runtime Data: User-specific runtime data (optional)
- Logs: Application logs (optional)
- Cache: Cache data (optional)
Backup Commands
Create Backup:
# Basic backup
nu workspace.nu backup
# Backup with auto-generated name
nu workspace.nu backup --auto-name
# Comprehensive backup including logs and cache
nu workspace.nu backup --auto-name --include-logs --include-cache
# Backup specific components
nu workspace.nu backup --components config,extensions --name my-backup
Backup Options:
--auto-name: Generate timestamp-based backup name--include-logs: Include application logs--include-cache: Include cache data--components: Specify components to backup--compress: Create compressed backup archive--encrypt: Encrypt backup with age/sops--remote: Upload to remote storage (S3, etc.)
Restore System
List Available Backups:
# List all backups
nu workspace.nu restore --list-backups
# List backups with details
nu workspace.nu restore --list-backups --detailed
# Show backup contents
nu workspace.nu restore --show-contents --backup-name workspace-developer-20250925_143022
Restore Operations:
# Restore latest backup
nu workspace.nu restore --latest
# Restore specific backup
nu workspace.nu restore --backup-name workspace-developer-20250925_143022
# Selective restore
nu workspace.nu restore --selective --backup-name my-backup
# Restore to different user
nu workspace.nu restore --backup-name my-backup --restore-to different-user
Advanced Restore Options:
--selective: Choose components to restore interactively--restore-to: Restore to different user workspace--merge: Merge with existing workspace (don’t overwrite)--dry-run: Show what would be restored without doing it--verify: Verify backup integrity before restore
Reset and Cleanup
Workspace Reset:
# Reset with backup
nu workspace.nu reset --backup-first
# Reset keeping configuration
nu workspace.nu reset --backup-first --keep-config
# Complete reset (dangerous)
nu workspace.nu reset --force --no-backup
Cleanup Operations:
# Clean old data with dry-run
nu workspace.nu cleanup --type old --age 14d --dry-run
# Clean cache forcefully
nu workspace.nu cleanup --type cache --force
# Clean specific user data
nu workspace.nu cleanup --user-name old-user --type all
Troubleshooting
Common Issues
Workspace Not Found
Error: Workspace for user 'developer' not found
# Solution: Initialize workspace
nu workspace.nu init --user-name developer
Path Resolution Errors
Error: Path resolution failed for config/user
# Solution: Fix with health check
nu workspace.nu health --fix-issues
# Manual fix
nu workspace/lib/path-resolver.nu resolve_path "config" "user" --create-missing
Configuration Errors
Error: Invalid configuration syntax in user.toml
# Solution: Validate and fix configuration
nu workspace.nu config validate --user-name developer
# Reset to defaults
cp workspace/config/local-overrides.toml.example workspace/config/developer.toml
Runtime Issues
Error: Runtime directory permissions error
# Solution: Reinitialize runtime
nu workspace/tools/runtime-manager.nu init --user-name developer --force
# Fix permissions manually
chmod -R 755 workspace/runtime/workspaces/developer
Extension Issues
Error: Extension 'my-provider' not found or invalid
# Solution: Validate extension
nu workspace.nu tools validate-extension providers/my-provider
# Reinitialize extension from template
cp -r workspace/extensions/providers/template workspace/extensions/providers/my-provider
Debug Mode
Enable Debug Logging:
# Set debug environment
export PROVISIONING_DEBUG=true
export PROVISIONING_LOG_LEVEL=debug
export PROVISIONING_WORKSPACE_USER=developer
# Run with debug
nu workspace.nu health --detailed
Performance Issues
Slow Operations:
# Check disk space
df -h workspace/
# Check runtime data size
du -h workspace/runtime/workspaces/developer/
# Optimize workspace
nu workspace.nu cleanup --type cache
nu workspace/tools/runtime-manager.nu cache --action optimize
Recovery Procedures
Corrupted Workspace:
# 1. Backup current state
nu workspace.nu backup --name corrupted-backup --force
# 2. Reset workspace
nu workspace.nu reset --backup-first
# 3. Restore from known good backup
nu workspace.nu restore --latest-known-good
# 4. Validate health
nu workspace.nu health --detailed --fix-issues
Data Loss Prevention:
- Enable automatic backups:
backup_interval = "1h"in user config - Use version control for custom extensions
- Regular health checks:
nu workspace.nu health - Monitor disk space and set up alerts
This workspace management system provides a robust foundation for development while maintaining isolation and providing comprehensive tools for maintenance and troubleshooting.