provisioning/docs/MIGRATION_GUIDE.md
2025-10-07 11:12:02 +01:00

326 lines
8.4 KiB
Markdown

# Migration Guide: Target-Based Configuration System
## Overview
This guide walks through migrating from the old `config.defaults.toml` system to the new workspace-based target configuration system.
## Migration Path
```
Old System New System
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
config.defaults.toml → ~/workspaces/{name}/config/provisioning.yaml
config.user.toml → ~/Library/Application Support/provisioning/ws_{name}.yaml
providers/{name}/config → ~/workspaces/{name}/config/providers/{name}.toml
→ ~/workspaces/{name}/config/platform/{service}.toml
```
## Step-by-Step Migration
### 1. Pre-Migration Check
```bash
# Check current configuration
provisioning env
# Backup current configuration
cp -r provisioning/config provisioning/config.backup.$(date +%Y%m%d)
```
### 2. Run Migration Script (Dry Run)
```bash
# Preview what will be done
./provisioning/scripts/migrate-to-target-configs.nu \
--workspace-name "my-project" \
--dry-run
```
### 3. Execute Migration
```bash
# Run with backup
./provisioning/scripts/migrate-to-target-configs.nu \
--workspace-name "my-project" \
--backup
# Or specify custom workspace path
./provisioning/scripts/migrate-to-target-configs.nu \
--workspace-name "my-project" \
--workspace-path "$HOME/my-custom-path" \
--backup
```
### 4. Verify Migration
```bash
# Validate workspace configuration
provisioning workspace config validate
# Check workspace status
provisioning workspace info
# List all workspaces
provisioning workspace list
```
### 5. Test Configuration
```bash
# Test with new configuration
provisioning --check server list
# Test provider configuration
provisioning provider validate aws
# Test platform configuration
provisioning platform orchestrator status
```
### 6. Update Environment Variables (if any)
```bash
# Old approach (no longer needed)
# export PROVISIONING_CONFIG_PATH="/path/to/config.defaults.toml"
# New approach - workspace is auto-detected from context
# Or set explicitly:
export PROVISIONING_WORKSPACE="my-project"
```
### 7. Clean Up Old Configuration
```bash
# After verifying everything works
rm provisioning/config/config.defaults.toml
rm provisioning/config/config.user.toml
# Keep backup for reference
# provisioning/config.backup.YYYYMMDD/
```
## Migration Script Options
### Required Arguments
- `--workspace-name`: Name for the new workspace (default: "default")
### Optional Arguments
- `--workspace-path`: Custom path for workspace (default: `~/workspaces/{name}`)
- `--dry-run`: Preview migration without making changes
- `--backup`: Create backup of old configuration files
### Examples
```bash
# Basic migration with default workspace
./provisioning/scripts/migrate-to-target-configs.nu --backup
# Custom workspace name
./provisioning/scripts/migrate-to-target-configs.nu \
--workspace-name "production" \
--backup
# Custom workspace path
./provisioning/scripts/migrate-to-target-configs.nu \
--workspace-name "staging" \
--workspace-path "/opt/workspaces/staging" \
--backup
# Dry run first
./provisioning/scripts/migrate-to-target-configs.nu \
--workspace-name "production" \
--dry-run
```
## New Workspace Structure
After migration, your workspace will look like:
```
~/workspaces/{name}/
├── config/
│ ├── provisioning.yaml # Main workspace config
│ ├── providers/
│ │ ├── aws.toml # AWS provider config
│ │ ├── upcloud.toml # UpCloud provider config
│ │ └── local.toml # Local provider config
│ └── platform/
│ ├── orchestrator.toml # Orchestrator config
│ ├── control-center.toml # Control center config
│ └── kms.toml # KMS config
├── infra/
│ └── {infra-name}/ # Infrastructure definitions
├── .cache/ # Cache directory
└── .runtime/ # Runtime data
```
User context stored at:
```
~/Library/Application Support/provisioning/
└── ws_{name}.yaml # User workspace context
```
## Configuration Schema Validation
### Validate Workspace Config
```bash
# Validate main workspace configuration
provisioning workspace config validate
# Validate specific provider
provisioning provider validate aws
# Validate platform service
provisioning platform validate orchestrator
```
### Manual Validation
```nushell
use provisioning/core/nulib/lib_provisioning/config/schema_validator.nu *
# Validate workspace config
let config = (open ~/workspaces/my-project/config/provisioning.yaml | from yaml)
let result = (validate-workspace-config $config)
print-validation-results $result
# Validate provider config
let aws_config = (open ~/workspaces/my-project/config/providers/aws.toml | from toml)
let result = (validate-provider-config "aws" $aws_config)
print-validation-results $result
```
## Troubleshooting
### Migration Fails
**Problem**: Migration script fails with "workspace path already exists"
**Solution**:
```bash
# Use merge mode
# The script will prompt for confirmation
./provisioning/scripts/migrate-to-target-configs.nu --workspace-name "existing"
# Or choose different workspace name
./provisioning/scripts/migrate-to-target-configs.nu --workspace-name "existing-v2"
```
### Config Not Found
**Problem**: Commands can't find configuration after migration
**Solution**:
```bash
# Check workspace context
provisioning workspace info
# Ensure workspace is active
provisioning workspace activate my-project
# Manually set workspace
export PROVISIONING_WORKSPACE="my-project"
```
### Validation Errors
**Problem**: Configuration validation fails after migration
**Solution**:
```bash
# Check validation output
provisioning workspace config validate
# Review and fix errors in config files
vim ~/workspaces/my-project/config/provisioning.yaml
# Validate again
provisioning workspace config validate
```
### Provider Configuration Issues
**Problem**: Provider authentication fails after migration
**Solution**:
```bash
# Check provider configuration
cat ~/workspaces/my-project/config/providers/aws.toml
# Update credentials
vim ~/workspaces/my-project/config/providers/aws.toml
# Validate provider config
provisioning provider validate aws
```
## Testing Migration
Run the test suite to verify migration:
```bash
# Run configuration validation tests
nu provisioning/tests/config_validation_tests.nu
# Run integration tests
provisioning test --workspace my-project
# Test specific functionality
provisioning --check server list
provisioning --check taskserv list
```
## Rollback Procedure
If migration causes issues, rollback:
```bash
# Restore old configuration
cp -r provisioning/config.backup.YYYYMMDD/* provisioning/config/
# Remove new workspace
rm -rf ~/workspaces/my-project
rm ~/Library/Application\ Support/provisioning/ws_my-project.yaml
# Unset workspace environment variable
unset PROVISIONING_WORKSPACE
# Verify old config works
provisioning env
```
## Migration Checklist
- [ ] Backup current configuration
- [ ] Run migration script in dry-run mode
- [ ] Review dry-run output
- [ ] Execute migration with backup
- [ ] Verify workspace structure created
- [ ] Validate all configurations
- [ ] Test provider authentication
- [ ] Test platform services
- [ ] Run test suite
- [ ] Update documentation/scripts if needed
- [ ] Clean up old configuration files
- [ ] Document any custom changes
## Next Steps
After successful migration:
1. **Review Workspace Configuration**: Customize `provisioning.yaml` for your needs
2. **Configure Providers**: Update provider configs in `config/providers/`
3. **Configure Platform Services**: Update platform configs in `config/platform/`
4. **Test Operations**: Run `--check` mode commands to verify
5. **Update CI/CD**: Update pipelines to use new workspace system
6. **Document Changes**: Update team documentation
## Additional Resources
- [Workspace Configuration Schema](../config/workspace.schema.toml)
- [Provider Configuration Schemas](../extensions/providers/*/config.schema.toml)
- [Platform Configuration Schemas](../platform/*/config.schema.toml)
- [Configuration Validation Guide](./CONFIG_VALIDATION.md)
- [Workspace Management Guide](./WORKSPACE_GUIDE.md)