@@ -102,6 +102,76 @@ func ValidateOSDisk(osDisk OSDisk, fieldPath *field.Path) field.ErrorList {
102102
103103 allErrs = append (allErrs , validateStorageAccountType (osDisk .ManagedDisk .StorageAccountType , fieldPath )... )
104104
105+ if errs := ValidateManagedDisk (osDisk .ManagedDisk , osDisk .ManagedDisk , fieldPath .Child ("managedDisk" )); len (errs ) > 0 {
106+ allErrs = append (allErrs , errs ... )
107+ }
108+
109+ if err := validateDiffDiskSetings (osDisk .DiffDiskSettings , fieldPath .Child ("diffDiskSettings" )); err != nil {
110+ allErrs = append (allErrs , err )
111+ }
112+
113+ if osDisk .DiffDiskSettings != nil && osDisk .DiffDiskSettings .Option == string (compute .Local ) && osDisk .ManagedDisk .StorageAccountType != "Standard_LRS" {
114+ allErrs = append (allErrs , field .Invalid (
115+ fieldPath .Child ("managedDisks" ).Child ("storageAccountType" ),
116+ osDisk .ManagedDisk .StorageAccountType ,
117+ "storageAccountType must be Standard_LRS when diffDiskSettings.option is 'Local'" ,
118+ ))
119+ }
120+
121+ return allErrs
122+ }
123+
124+ // ValidateManagedDisk validates updates to the ManagedDisk field.
125+ func ValidateManagedDisk (old , new ManagedDisk , fieldPath * field.Path ) field.ErrorList {
126+ allErrs := field.ErrorList {}
127+
128+ if old .StorageAccountType != new .StorageAccountType {
129+ allErrs = append (allErrs , field .Invalid (fieldPath .Child ("storageAccountType" ), new , "changing storage account type after machine creation is not allowed" ))
130+ }
131+
132+ return allErrs
133+ }
134+
135+ func validateDiffDiskSetings (d * DiffDiskSettings , fldPath * field.Path ) * field.Error {
136+ if d != nil {
137+ if d .Option != string (compute .Local ) {
138+ return field .Invalid (
139+ fldPath .Child ("option" ),
140+ d ,
141+ fmt .Sprintf ("changing ephemeral os settings after machine creation is not allowed" ),
142+ )
143+ }
144+ }
145+ return nil
146+ }
147+
148+ func validateDiffDiskSettingsUpdate (old , new * DiffDiskSettings , fieldPath * field.Path ) field.ErrorList {
149+ allErrs := field.ErrorList {}
150+ fldPath := fieldPath .Child ("diffDiskSettings" )
151+
152+ if old == nil && new != nil {
153+ allErrs = append (allErrs , field .Invalid (fldPath , new , fmt .Sprintf ("enabling ephemeral os after machine creation is not allowed" )))
154+ return allErrs
155+ }
156+ if old != nil && new == nil {
157+ allErrs = append (allErrs , field .Invalid (fldPath , new , fmt .Sprintf ("disabling ephemeral os after machine creation is not allowed" )))
158+ return allErrs
159+ }
160+
161+ if old != nil && new != nil {
162+ if old .Option != new .Option {
163+ allErrs = append (
164+ allErrs ,
165+ field .Invalid (
166+ fldPath .Child ("option" ),
167+ new ,
168+ fmt .Sprintf ("changing ephemeral os settings after machine creation is not allowed" ),
169+ ),
170+ )
171+ return allErrs
172+ }
173+ }
174+
105175 return allErrs
106176}
107177
0 commit comments