326 lines
8.4 KiB
Markdown
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)
|