Skip to content

Conversation

@josecelano
Copy link
Member

Summary

Add extensible provider infrastructure for multi-provider deployment support.

Closes #206

Changes

Domain Layer (src/domain/provider/)

  • Provider enum with Lxd and Hetzner variants
  • ProviderConfig enum for provider-specific configurations
  • LxdConfig with validated ProfileName
  • HetznerConfig with api_token, server_type, location fields

Application Layer (src/application/.../provider/)

  • ProviderSection enum for JSON deserialization (tagged by "provider" field)
  • LxdProviderSection with raw String for JSON parsing
  • HetznerProviderSection with raw String fields
  • to_provider_config() method for validation and domain conversion

Key Design Decisions

  1. Modular structure - Each provider has its own file for easy extensibility
  2. DDD layer separation - Application uses raw primitives for JSON, domain uses validated types
  3. Serde tagged enums - Clean JSON format with "provider" field for discrimination
  4. Comprehensive test coverage - All tests follow it_should_ naming convention

Testing

  • All 1214 tests pass
  • Pre-commit checks completed successfully

Add extensible provider infrastructure for multi-provider deployment support.

Domain Layer (src/domain/provider/):
- Provider enum with Lxd and Hetzner variants
- ProviderConfig enum for provider-specific configurations
- LxdConfig with validated ProfileName
- HetznerConfig with api_token, server_type, location fields

Application Layer (src/application/.../provider/):
- ProviderSection enum for JSON deserialization (tagged by "provider" field)
- LxdProviderSection with raw String for JSON parsing
- HetznerProviderSection with raw String fields
- to_provider_config() method for validation and domain conversion

Key Design Decisions:
- Modular structure with separate files per provider for extensibility
- DDD layer separation: raw primitives (application) vs validated types (domain)
- Serde tagged enums for clean JSON format
- Comprehensive test coverage following it_should_ naming convention
@josecelano josecelano self-assigned this Dec 1, 2025
@josecelano
Copy link
Member Author

ACK 775fbeb

@josecelano josecelano merged commit 8b22c73 into main Dec 1, 2025
34 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Provider enum and ProviderConfig types to domain layer

2 participants