@@ -143,23 +143,67 @@ def to_template_config(self) -> dict[str, Any]:
143143 @classmethod
144144 def from_domain (cls , template ) -> "TemplateDTO" :
145145 """Convert domain template to DTO."""
146- template_data = (
147- template .model_dump () if hasattr (template , "model_dump" ) else vars (template )
148- )
149- dto_field_names = cls .model_fields .keys ()
150- dto_data = {
151- field_name : template_data [field_name ]
152- for field_name in dto_field_names
153- if field_name in template_data and field_name != "provider_config"
154- }
155-
156- provider_type = dto_data .get ("provider_type" )
146+ provider_type = getattr (template , "provider_type" , None )
147+ provider_config : Optional [BaseModel ] = None
157148 if provider_type :
158- dto_data ["provider_config" ] = TemplateExtensionRegistry .create_extension_config (
149+ template_data = (
150+ template .model_dump () if hasattr (template , "model_dump" ) else vars (template )
151+ )
152+ provider_config = TemplateExtensionRegistry .create_extension_config (
159153 str (provider_type ), template_data
160154 )
161155
162- return cls .model_validate (dto_data )
156+ return cls (
157+ # Core fields
158+ template_id = template .template_id ,
159+ name = getattr (template , "name" , None ),
160+ description = getattr (template , "description" , None ),
161+ # Instance configuration
162+ image_id = getattr (template , "image_id" , None ),
163+ max_instances = getattr (template , "max_instances" , 1 ),
164+ # Machine types configuration
165+ machine_types = getattr (template , "machine_types" , {}),
166+ machine_types_ondemand = getattr (template , "machine_types_ondemand" , {}),
167+ machine_types_priority = getattr (template , "machine_types_priority" , {}),
168+ # Network configuration
169+ subnet_ids = getattr (template , "subnet_ids" , []),
170+ security_group_ids = getattr (template , "security_group_ids" , []),
171+ network_zones = getattr (template , "network_zones" , []),
172+ public_ip_assignment = getattr (template , "public_ip_assignment" , None ),
173+ # Pricing and allocation
174+ price_type = getattr (template , "price_type" , "ondemand" ),
175+ allocation_strategy = getattr (template , "allocation_strategy" , None ),
176+ max_price = getattr (template , "max_price" , None ),
177+ # Storage configuration
178+ root_device_volume_size = getattr (template , "root_device_volume_size" , None ),
179+ volume_type = getattr (template , "volume_type" , None ),
180+ iops = getattr (template , "iops" , None ),
181+ throughput = getattr (template , "throughput" , None ),
182+ storage_encryption = getattr (template , "storage_encryption" , None ),
183+ encryption_key = getattr (template , "encryption_key" , None ),
184+ # Access and security
185+ key_name = getattr (template , "key_name" , None ),
186+ user_data = getattr (template , "user_data" , None ),
187+ instance_profile = getattr (template , "instance_profile" , None ),
188+ # Advanced configuration
189+ monitoring_enabled = getattr (template , "monitoring_enabled" , None ),
190+ # Metadata
191+ tags = getattr (template , "tags" , {}),
192+ metadata = getattr (template , "metadata" , {}),
193+ provider_config = provider_config ,
194+ provider_data = getattr (template , "provider_data" , {}),
195+ # Provider identification
196+ provider_type = provider_type ,
197+ provider_name = getattr (template , "provider_name" , None ),
198+ provider_api = getattr (template , "provider_api" , None ),
199+ # Timestamps
200+ created_at = getattr (template , "created_at" , None ),
201+ updated_at = getattr (template , "updated_at" , None ),
202+ # Active status
203+ is_active = getattr (template , "is_active" , True ),
204+ # Legacy fields
205+ version = getattr (template , "version" , None ),
206+ )
163207
164208
165209@dataclass
0 commit comments