@@ -54,29 +54,31 @@ func (r *OpenStackBaremetalSet) SetupWebhookWithManager(mgr ctrl.Manager) error
5454 }
5555
5656 return ctrl .NewWebhookManagedBy (mgr ).
57+ WithValidator (OpenStackBaremetalSetCustomValidator ).
5758 For (r ).
5859 Complete ()
5960}
6061
6162// +kubebuilder:webhook:verbs=create;update;delete,path=/validate-baremetal-openstack-org-v1beta1-openstackbaremetalset,mutating=false,failurePolicy=fail,sideEffects=None,groups=baremetal.openstack.org,resources=openstackbaremetalsets,versions=v1beta1,name=vopenstackbaremetalset.kb.io,admissionReviewVersions=v1
6263
63- var _ webhook.Validator = & OpenStackBaremetalSet {}
64+ var OpenStackBaremetalSetCustomValidator webhook.CustomValidator = & OpenStackBaremetalSet {}
6465
6566// ValidateCreate implements webhook.Validator so a webhook will be registered for the type
66- func (r * OpenStackBaremetalSet ) ValidateCreate () (admission.Warnings , error ) {
67- openstackbaremetalsetlog .Info ("validate create" , "name" , r .Name )
67+ func (r * OpenStackBaremetalSet ) ValidateCreate (ctx context.Context , obj runtime.Object ) (admission.Warnings , error ) {
68+ bmSet := obj .(* OpenStackBaremetalSet )
69+ openstackbaremetalsetlog .Info ("validate create" , "name" , bmSet .Name )
6870 var errors field.ErrorList
6971 // Check if OpenStackBaremetalSet name matches RFC1123 for use in labels
7072 validate := validator .New ()
71- if err := validate .Var (r .Name , "hostname_rfc1123" ); err != nil {
73+ if err := validate .Var (bmSet .Name , "hostname_rfc1123" ); err != nil {
7274 openstackbaremetalsetlog .Error (err , "Error validating OpenStackBaremetalSet name, name must follow RFC1123" )
7375 errors = append (errors , field .Invalid (
7476 field .NewPath ("Name" ),
75- r .Name ,
76- fmt .Sprintf ("Error validating OpenStackBaremetalSet name %s, name must follow RFC1123" , r .Name )))
77+ bmSet .Name ,
78+ fmt .Sprintf ("Error validating OpenStackBaremetalSet name %s, name must follow RFC1123" , bmSet .Name )))
7779 return nil , apierrors .NewInvalid (
7880 schema.GroupKind {Group : "baremetal.openstack.org" , Kind : "OpenStackBaremetalSet" },
79- r .Name ,
81+ bmSet .Name ,
8082 errors )
8183 }
8284
@@ -91,14 +93,14 @@ func (r *OpenStackBaremetalSet) ValidateCreate() (admission.Warnings, error) {
9193 baremetalHostsList , err := GetBaremetalHosts (
9294 context .TODO (),
9395 webhookClient ,
94- r .Spec .BmhNamespace ,
95- r .Spec .BmhLabelSelector ,
96+ bmSet .Spec .BmhNamespace ,
97+ bmSet .Spec .BmhLabelSelector ,
9698 )
9799 if err != nil {
98100 return nil , err
99101 }
100102
101- if _ , err := VerifyBaremetalSetScaleUp (openstackbaremetalsetlog , r , baremetalHostsList , & metal3v1.BareMetalHostList {}); err != nil {
103+ if _ , err := VerifyBaremetalSetScaleUp (openstackbaremetalsetlog , bmSet , baremetalHostsList , & metal3v1.BareMetalHostList {}); err != nil {
102104 return nil , err
103105 }
104106
@@ -136,8 +138,9 @@ func (spec OpenStackBaremetalSetTemplateSpec) ValidateTemplate(oldCount int, old
136138}
137139
138140// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
139- func (r * OpenStackBaremetalSet ) ValidateUpdate (old runtime.Object ) (admission.Warnings , error ) {
140- openstackbaremetalsetlog .Info ("validate update" , "name" , r .Name )
141+ func (r * OpenStackBaremetalSet ) ValidateUpdate (ctx context.Context ,
142+ old runtime.Object , new runtime.Object ) (admission.Warnings , error ) {
143+ openstackbaremetalsetlog .Info ("validate update" , "name" , old .(* OpenStackBaremetalSet ).Name )
141144
142145 var ok bool
143146 var oldInstance * OpenStackBaremetalSet
@@ -146,7 +149,7 @@ func (r *OpenStackBaremetalSet) ValidateUpdate(old runtime.Object) (admission.Wa
146149 return nil , fmt .Errorf ("runtime object is not an OpenStackBaremetalSet" )
147150 }
148151
149- if err := r .Spec .ValidateTemplate (len (oldInstance .Spec .BaremetalHosts ),
152+ if err := oldInstance .Spec .ValidateTemplate (len (oldInstance .Spec .BaremetalHosts ),
150153 oldInstance .Spec .OpenStackBaremetalSetTemplateSpec ); err != nil {
151154 return nil , err
152155 }
@@ -156,7 +159,8 @@ func (r *OpenStackBaremetalSet) ValidateUpdate(old runtime.Object) (admission.Wa
156159 // We do this to maintain consistency across the gathered list of BMHs during reconcile.
157160 //
158161 oldCount := len (oldInstance .Spec .BaremetalHosts )
159- newCount := len (r .Spec .BaremetalHosts )
162+ newInstance := new .(* OpenStackBaremetalSet )
163+ newCount := len (newInstance .Spec .BaremetalHosts )
160164
161165 if newCount != oldCount {
162166 //
@@ -166,7 +170,7 @@ func (r *OpenStackBaremetalSet) ValidateUpdate(old runtime.Object) (admission.Wa
166170 // operations for scaling up or down.
167171 //
168172 // TODO: Create a specific context here instead of passing TODO()?
169- if err := VerifyAndSyncBaremetalStatusBmhRefs (context .TODO (), webhookClient , r ); err != nil {
173+ if err := VerifyAndSyncBaremetalStatusBmhRefs (context .TODO (), webhookClient , oldInstance ); err != nil {
170174 return nil , err
171175 }
172176
@@ -178,8 +182,8 @@ func (r *OpenStackBaremetalSet) ValidateUpdate(old runtime.Object) (admission.Wa
178182 baremetalHostsList , err := GetBaremetalHosts (
179183 context .TODO (),
180184 webhookClient ,
181- r .Spec .BmhNamespace ,
182- r .Spec .BmhLabelSelector ,
185+ oldInstance .Spec .BmhNamespace ,
186+ oldInstance .Spec .BmhLabelSelector ,
183187 )
184188 if err != nil {
185189 return nil , err
@@ -189,14 +193,14 @@ func (r *OpenStackBaremetalSet) ValidateUpdate(old runtime.Object) (admission.Wa
189193 existingBaremetalHosts , err := GetBaremetalHosts (
190194 context .TODO (),
191195 webhookClient ,
192- r .Spec .BmhNamespace ,
193- labels .GetLabels (r , labels .GetGroupLabel (ServiceName ), map [string ]string {}),
196+ oldInstance .Spec .BmhNamespace ,
197+ labels .GetLabels (oldInstance , labels .GetGroupLabel (ServiceName ), map [string ]string {}),
194198 )
195199 if err != nil {
196200 return nil , err
197201 }
198202
199- if _ , err := VerifyBaremetalSetScaleUp (openstackbaremetalsetlog , r , baremetalHostsList , existingBaremetalHosts ); err != nil {
203+ if _ , err := VerifyBaremetalSetScaleUp (openstackbaremetalsetlog , newInstance , baremetalHostsList , existingBaremetalHosts ); err != nil {
200204 return nil , err
201205 }
202206 }
@@ -206,8 +210,8 @@ func (r *OpenStackBaremetalSet) ValidateUpdate(old runtime.Object) (admission.Wa
206210}
207211
208212// ValidateDelete implements webhook.Validator so a webhook will be registered for the type
209- func (r * OpenStackBaremetalSet ) ValidateDelete () (admission.Warnings , error ) {
210- openstackbaremetalsetlog .Info ("validate delete" , "name" , r .Name )
213+ func (r * OpenStackBaremetalSet ) ValidateDelete (ctx context. Context , obj runtime. Object ) (admission.Warnings , error ) {
214+ openstackbaremetalsetlog .Info ("validate delete" , "name" , obj .( * OpenStackBaremetalSet ) .Name )
211215
212216 return nil , nil
213217}
0 commit comments