@@ -36,102 +36,118 @@ class AzureTemplateExtensionConfig(BaseModel):
3636
3737 # Azure DTO-only fields preserved by TemplateDTO.provider_config round-trips.
3838 resource_group : Optional [AzureResourceGroupName ] = Field (
39- None , description = "Azure resource group for the template"
39+ default = None , description = "Azure resource group for the template"
4040 )
41- location : Optional [str ] = Field (None , description = "Azure location for the template" )
41+ location : Optional [str ] = Field (default = None , description = "Azure location for the template" )
4242 subscription_id : Optional [str ] = Field (
43- None , description = "Azure subscription override for the template"
43+ default = None , description = "Azure subscription override for the template"
4444 )
45- vmss_name : Optional [str ] = Field (None , description = "Explicit VMSS name" )
45+ vmss_name : Optional [str ] = Field (default = None , description = "Explicit VMSS name" )
4646 orchestration_mode : Optional [AzureVMSSOrchestrationMode ] = Field (
47- None , description = "VMSS orchestration mode"
47+ default = None , description = "VMSS orchestration mode"
4848 )
4949 platform_fault_domain_count : Optional [int ] = Field (
50- None , description = "Fault domain count for Flexible orchestration"
50+ default = None , description = "Fault domain count for Flexible orchestration"
5151 )
5252 single_placement_group : Optional [bool ] = Field (
53- None , description = "Restrict VMSS to a single placement group"
53+ default = None , description = "Restrict VMSS to a single placement group"
54+ )
55+ image : Optional [AzureImageReference ] = Field (
56+ default = None , description = "Azure VM image reference"
57+ )
58+ eviction_policy : Optional [AzureEvictionPolicy ] = Field (
59+ default = None , description = "Spot eviction policy"
60+ )
61+ billing_profile_max_price : Optional [float ] = Field (
62+ default = None , description = "Maximum Spot VM price"
63+ )
64+ spot_percentage : Optional [int ] = Field (
65+ default = None , description = "Desired percentage of Spot VMs"
5466 )
55- image : Optional [AzureImageReference ] = Field (None , description = "Azure VM image reference" )
56- eviction_policy : Optional [AzureEvictionPolicy ] = Field (None , description = "Spot eviction policy" )
57- billing_profile_max_price : Optional [float ] = Field (None , description = "Maximum Spot VM price" )
58- spot_percentage : Optional [int ] = Field (None , description = "Desired percentage of Spot VMs" )
5967 base_regular_priority_count : Optional [int ] = Field (
60- None , description = "Base regular-priority VM count for priority mix"
68+ default = None , description = "Base regular-priority VM count for priority mix"
69+ )
70+ spot_restore_enabled : Optional [bool ] = Field (
71+ default = None , description = "Enable Spot Try-Restore"
6172 )
62- spot_restore_enabled : Optional [bool ] = Field (None , description = "Enable Spot Try-Restore" )
6373 spot_restore_timeout : Optional [str ] = Field (
64- None , description = "ISO 8601 Spot Try-Restore timeout"
74+ default = None , description = "ISO 8601 Spot Try-Restore timeout"
6575 )
6676 spot_placement_score_enabled : Optional [bool ] = Field (
67- None , description = "Enable Azure Spot Placement Score planning before launch"
77+ default = None , description = "Enable Azure Spot Placement Score planning before launch"
6878 )
6979 placement_split_strategy : Optional [PlacementSplitStrategy ] = Field (
70- None , description = "How Spot Placement Score launches split capacity"
80+ default = None , description = "How Spot Placement Score launches split capacity"
7181 )
7282 placement_primary_share_percent : Optional [int ] = Field (
73- None , description = "Capacity percentage assigned to the top placement candidate"
83+ default = None , description = "Capacity percentage assigned to the top placement candidate"
7484 )
7585 placement_regions : Optional [list [str ]] = Field (
76- None , description = "Azure regions considered for Spot Placement Score planning"
86+ default = None , description = "Azure regions considered for Spot Placement Score planning"
7787 )
7888 placement_zones : Optional [list [str ]] = Field (
79- None , description = "Azure zones considered for Spot Placement Score planning"
89+ default = None , description = "Azure zones considered for Spot Placement Score planning"
8090 )
81- zones : Optional [list [str ]] = Field (None , description = "Availability zones" )
82- zone_balance : Optional [bool ] = Field (None , description = "Enable zone balancing" )
91+ zones : Optional [list [str ]] = Field (default = None , description = "Availability zones" )
92+ zone_balance : Optional [bool ] = Field (default = None , description = "Enable zone balancing" )
8393 proximity_placement_group_id : Optional [AzureProximityPlacementGroupId ] = Field (
84- None , description = "Proximity placement group ARM resource ID"
94+ default = None , description = "Proximity placement group ARM resource ID"
8595 )
8696 capacity_reservation_group_id : Optional [AzureCapacityReservationGroupId ] = Field (
87- None , description = "Capacity reservation group ARM resource ID"
97+ default = None , description = "Capacity reservation group ARM resource ID"
8898 )
89- os_disk : Optional [AzureOSDiskConfig ] = Field (None , description = "OS disk config" )
90- data_disks : Optional [list [AzureDataDisk ]] = Field (None , description = "Data disks" )
99+ os_disk : Optional [AzureOSDiskConfig ] = Field (default = None , description = "OS disk config" )
100+ data_disks : Optional [list [AzureDataDisk ]] = Field (default = None , description = "Data disks" )
91101 network_config : Optional [AzureNetworkConfig ] = Field (
92- None , description = "Azure networking config"
102+ default = None , description = "Azure networking config"
103+ )
104+ security_type : Optional [AzureSecurityType ] = Field (default = None , description = "VM security type" )
105+ secure_boot_enabled : Optional [bool ] = Field (default = None , description = "Enable UEFI Secure Boot" )
106+ vtpm_enabled : Optional [bool ] = Field (default = None , description = "Enable vTPM" )
107+ encryption_at_host : Optional [bool ] = Field (
108+ default = None , description = "Enable host-based encryption"
93109 )
94- security_type : Optional [AzureSecurityType ] = Field (None , description = "VM security type" )
95- secure_boot_enabled : Optional [bool ] = Field (None , description = "Enable UEFI Secure Boot" )
96- vtpm_enabled : Optional [bool ] = Field (None , description = "Enable vTPM" )
97- encryption_at_host : Optional [bool ] = Field (None , description = "Enable host-based encryption" )
98110 disk_encryption_set_id : Optional [AzureDiskEncryptionSetId ] = Field (
99- None , description = "Disk encryption set ARM resource ID"
111+ default = None , description = "Disk encryption set ARM resource ID"
112+ )
113+ ssh_key_name : Optional [str ] = Field (
114+ default = None , description = "Azure SSH Public Key resource name"
100115 )
101- ssh_key_name : Optional [str ] = Field (None , description = "Azure SSH Public Key resource name" )
102- ssh_public_keys : Optional [list [str ]] = Field (None , description = "Inline SSH public keys" )
116+ ssh_public_keys : Optional [list [str ]] = Field (default = None , description = "Inline SSH public keys" )
103117 user_assigned_identity_ids : Optional [list [str ]] = Field (
104- None , description = "User-assigned managed identity ARM resource IDs"
118+ default = None , description = "User-assigned managed identity ARM resource IDs"
105119 )
106120 system_assigned_identity : Optional [bool ] = Field (
107- None , description = "Enable system-assigned managed identity"
121+ default = None , description = "Enable system-assigned managed identity"
108122 )
109- custom_data : Optional [str ] = Field (None , description = "Base64 custom-data payload" )
123+ custom_data : Optional [str ] = Field (default = None , description = "Base64 custom-data payload" )
110124 extension_profile : Optional [list [dict [str , Any ]]] = Field (
111- None , description = "VMSS extension definitions"
125+ default = None , description = "VMSS extension definitions"
112126 )
113- overprovision : Optional [bool ] = Field (None , description = "Enable VMSS overprovisioning" )
127+ overprovision : Optional [bool ] = Field (default = None , description = "Enable VMSS overprovisioning" )
114128 upgrade_policy_mode : Optional [AzureUpgradePolicyMode ] = Field (
115- None , description = "VMSS upgrade policy mode"
129+ default = None , description = "VMSS upgrade policy mode"
116130 )
117131 provider_api_spec : Optional [dict [str , Any ]] = Field (
118- None , description = "Raw Azure provider request payload override"
132+ default = None , description = "Raw Azure provider request payload override"
119133 )
120134 provider_api_spec_file : Optional [str ] = Field (
121- None , description = "Path to a native Azure provider spec file"
135+ default = None , description = "Path to a native Azure provider spec file"
122136 )
123- cluster_name : Optional [str ] = Field (None , description = "CycleCloud cluster name" )
124- node_array : Optional [str ] = Field (None , description = "CycleCloud node array" )
125- cyclecloud_url : Optional [str ] = Field (None , description = "CycleCloud API URL" )
137+ cluster_name : Optional [str ] = Field (default = None , description = "CycleCloud cluster name" )
138+ node_array : Optional [str ] = Field (default = None , description = "CycleCloud node array" )
139+ cyclecloud_url : Optional [str ] = Field (default = None , description = "CycleCloud API URL" )
126140 cyclecloud_credential_path : Optional [str ] = Field (
127- None , description = "CycleCloud credential reference path"
141+ default = None , description = "CycleCloud credential reference path"
128142 )
129143 cyclecloud_verify_ssl : Optional [bool ] = Field (
130- None , description = "CycleCloud SSL verification setting"
144+ default = None , description = "CycleCloud SSL verification setting"
131145 )
132- cyclecloud_auth_mode : Optional [str ] = Field (None , description = "CycleCloud auth mode override" )
133- cyclecloud_aad_scope : Optional [str ] = Field (None , description = "CycleCloud AAD scope" )
134- provider_api : Optional [AzureProviderApi ] = Field (None , description = "Azure provider API" )
146+ cyclecloud_auth_mode : Optional [str ] = Field (
147+ default = None , description = "CycleCloud auth mode override"
148+ )
149+ cyclecloud_aad_scope : Optional [str ] = Field (default = None , description = "CycleCloud AAD scope" )
150+ provider_api : Optional [AzureProviderApi ] = Field (default = None , description = "Azure provider API" )
135151
136152 # VM configuration
137153 vm_size : Optional [str ] = Field (
@@ -152,16 +168,18 @@ class AzureTemplateExtensionConfig(BaseModel):
152168 )
153169
154170 # Pricing
155- priority : AzurePriority = Field (AzurePriority .REGULAR , description = "Default VM priority" )
171+ priority : AzurePriority = Field (
172+ default = AzurePriority .REGULAR , description = "Default VM priority"
173+ )
156174
157175 # OS disk
158- os_disk_type : Optional [str ] = Field (None , description = "Default OS disk type" )
176+ os_disk_type : Optional [str ] = Field (default = None , description = "Default OS disk type" )
159177 os_disk_size_gb : Optional [int ] = Field (
160- None , description = "OS disk size in GiB (None = image default)"
178+ default = None , description = "OS disk size in GiB (None = image default)"
161179 )
162180
163181 # Identity
164- admin_username : str = Field ("azureuser" , description = "Default admin username" )
182+ admin_username : str = Field (default = "azureuser" , description = "Default admin username" )
165183
166184 # Freeform attributes
167185 node_attributes : dict [str , Any ] = Field (
0 commit comments