Skip to content

Commit e101b68

Browse files
authored
Merge pull request #1409 from shivi28/azure_558_again
Immutable validation added for Azuremachine update
2 parents 66e4073 + 98d7f67 commit e101b68

File tree

3 files changed

+437
-108
lines changed

3 files changed

+437
-108
lines changed

api/v1alpha4/azuremachine_validation.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -205,29 +205,6 @@ func ValidateDataDisksUpdate(oldDataDisks, newDataDisks []DataDisk, fieldPath *f
205205
return allErrs
206206
}
207207

208-
func validateDiffDiskSettingsUpdate(old, new *DiffDiskSettings, fieldPath *field.Path) field.ErrorList {
209-
allErrs := field.ErrorList{}
210-
fldPath := fieldPath.Child("diffDiskSettings")
211-
212-
if old == nil && new != nil {
213-
allErrs = append(allErrs, field.Invalid(fldPath, new, "enabling ephemeral os after machine creation is not allowed"))
214-
return allErrs
215-
}
216-
if old != nil && new == nil {
217-
allErrs = append(allErrs, field.Invalid(fldPath, new, "disabling ephemeral os after machine creation is not allowed"))
218-
return allErrs
219-
}
220-
221-
if old != nil && new != nil {
222-
if old.Option != new.Option {
223-
msg := "changing ephemeral os settings after machine creation is not allowed"
224-
return append(allErrs, field.Invalid(fldPath.Child("option"), new, msg))
225-
}
226-
}
227-
228-
return allErrs
229-
}
230-
231208
func validateManagedDisksUpdate(old, new *ManagedDiskParameters, fieldPath *field.Path) field.ErrorList {
232209
allErrs := field.ErrorList{}
233210
fieldErrMsg := "changing managed disk options after machine creation is not allowed"

api/v1alpha4/azuremachine_webhook.go

Lines changed: 66 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package v1alpha4
1818

1919
import (
20+
"reflect"
21+
2022
apierrors "k8s.io/apimachinery/pkg/api/errors"
2123
"k8s.io/apimachinery/pkg/runtime"
2224
"k8s.io/apimachinery/pkg/util/validation/field"
@@ -81,44 +83,88 @@ func (m *AzureMachine) ValidateUpdate(oldRaw runtime.Object) error {
8183
var allErrs field.ErrorList
8284
old := oldRaw.(*AzureMachine)
8385

84-
if errs := ValidateImage(m.Spec.Image, field.NewPath("image")); len(errs) > 0 {
85-
allErrs = append(allErrs, errs...)
86+
if !reflect.DeepEqual(m.Spec.Image, old.Spec.Image) {
87+
allErrs = append(allErrs,
88+
field.Invalid(field.NewPath("spec", "image"),
89+
m.Spec.Image, "field is immutable"),
90+
)
8691
}
8792

88-
if errs := ValidateOSDisk(m.Spec.OSDisk, field.NewPath("osDisk")); len(errs) > 0 {
89-
allErrs = append(allErrs, errs...)
93+
if !reflect.DeepEqual(m.Spec.Identity, old.Spec.Identity) {
94+
allErrs = append(allErrs,
95+
field.Invalid(field.NewPath("spec", "identity"),
96+
m.Spec.Identity, "field is immutable"),
97+
)
9098
}
9199

92-
if errs := ValidateSSHKey(m.Spec.SSHPublicKey, field.NewPath("sshPublicKey")); len(errs) > 0 {
93-
allErrs = append(allErrs, errs...)
100+
if !reflect.DeepEqual(m.Spec.UserAssignedIdentities, old.Spec.UserAssignedIdentities) {
101+
allErrs = append(allErrs,
102+
field.Invalid(field.NewPath("spec", "userAssignedIdentities"),
103+
m.Spec.UserAssignedIdentities, "field is immutable"),
104+
)
94105
}
95106

96-
if errs := ValidateSystemAssignedIdentity(m.Spec.Identity, old.Spec.RoleAssignmentName, m.Spec.RoleAssignmentName, field.NewPath("roleAssignmentName")); len(errs) > 0 {
97-
allErrs = append(allErrs, errs...)
107+
if !reflect.DeepEqual(m.Spec.RoleAssignmentName, old.Spec.RoleAssignmentName) {
108+
allErrs = append(allErrs,
109+
field.Invalid(field.NewPath("spec", "roleAssignmentName"),
110+
m.Spec.RoleAssignmentName, "field is immutable"),
111+
)
98112
}
99113

100-
if errs := ValidateUserAssignedIdentity(m.Spec.Identity, m.Spec.UserAssignedIdentities, field.NewPath("userAssignedIdentities")); len(errs) > 0 {
101-
allErrs = append(allErrs, errs...)
114+
if !reflect.DeepEqual(m.Spec.OSDisk, old.Spec.OSDisk) {
115+
allErrs = append(allErrs,
116+
field.Invalid(field.NewPath("spec", "osDisk"),
117+
m.Spec.OSDisk, "field is immutable"),
118+
)
102119
}
103120

104-
if errs := ValidateDataDisks(m.Spec.DataDisks, field.NewPath("dataDisks")); len(errs) > 0 {
105-
allErrs = append(allErrs, errs...)
121+
if !reflect.DeepEqual(m.Spec.DataDisks, old.Spec.DataDisks) {
122+
allErrs = append(allErrs,
123+
field.Invalid(field.NewPath("spec", "dataDisks"),
124+
m.Spec.DataDisks, "field is immutable"),
125+
)
106126
}
107127

108-
if errs := ValidateDataDisksUpdate(old.Spec.DataDisks, m.Spec.DataDisks, field.NewPath("dataDisks")); len(errs) > 0 {
109-
allErrs = append(allErrs, errs...)
128+
if !reflect.DeepEqual(m.Spec.SSHPublicKey, old.Spec.SSHPublicKey) {
129+
allErrs = append(allErrs,
130+
field.Invalid(field.NewPath("spec", "sshPublicKey"),
131+
m.Spec.SSHPublicKey, "field is immutable"),
132+
)
110133
}
111134

112-
if errs := validateManagedDisksUpdate(old.Spec.OSDisk.ManagedDisk, old.Spec.OSDisk.ManagedDisk, field.NewPath("osDisk").Child("managedDisk")); len(errs) > 0 {
113-
allErrs = append(allErrs, errs...)
135+
if !reflect.DeepEqual(m.Spec.AllocatePublicIP, old.Spec.AllocatePublicIP) {
136+
allErrs = append(allErrs,
137+
field.Invalid(field.NewPath("spec", "allocatePublicIP"),
138+
m.Spec.AllocatePublicIP, "field is immutable"),
139+
)
114140
}
115141

116-
if errs := validateManagedDisk(m.Spec.OSDisk.ManagedDisk, field.NewPath("osDisk").Child("managedDisk"), true); len(errs) > 0 {
117-
allErrs = append(allErrs, errs...)
142+
if !reflect.DeepEqual(m.Spec.EnableIPForwarding, old.Spec.EnableIPForwarding) {
143+
allErrs = append(allErrs,
144+
field.Invalid(field.NewPath("spec", "enableIPForwarding"),
145+
m.Spec.EnableIPForwarding, "field is immutable"),
146+
)
118147
}
119148

120-
if errs := validateDiffDiskSettingsUpdate(old.Spec.OSDisk.DiffDiskSettings, m.Spec.OSDisk.DiffDiskSettings, field.NewPath("osDisk").Child("diffDiskSettings")); len(errs) > 0 {
121-
allErrs = append(allErrs, errs...)
149+
if !reflect.DeepEqual(m.Spec.AcceleratedNetworking, old.Spec.AcceleratedNetworking) {
150+
allErrs = append(allErrs,
151+
field.Invalid(field.NewPath("spec", "acceleratedNetworking"),
152+
m.Spec.AcceleratedNetworking, "field is immutable"),
153+
)
154+
}
155+
156+
if !reflect.DeepEqual(m.Spec.SpotVMOptions, old.Spec.SpotVMOptions) {
157+
allErrs = append(allErrs,
158+
field.Invalid(field.NewPath("spec", "spotVMOptions"),
159+
m.Spec.SpotVMOptions, "field is immutable"),
160+
)
161+
}
162+
163+
if !reflect.DeepEqual(m.Spec.SecurityProfile, old.Spec.SecurityProfile) {
164+
allErrs = append(allErrs,
165+
field.Invalid(field.NewPath("spec", "securityProfile"),
166+
m.Spec.SecurityProfile, "field is immutable"),
167+
)
122168
}
123169

124170
if len(allErrs) == 0 {

0 commit comments

Comments
 (0)