@@ -17,30 +17,20 @@ limitations under the License.
1717package v1beta1
1818
1919import (
20+ "fmt"
21+ "reflect"
22+
2023 apierrors "k8s.io/apimachinery/pkg/api/errors"
2124 "k8s.io/apimachinery/pkg/runtime"
2225 "k8s.io/apimachinery/pkg/runtime/schema"
2326 "k8s.io/apimachinery/pkg/util/validation/field"
24- ctrl "sigs.k8s.io/controller-runtime"
2527 logf "sigs.k8s.io/controller-runtime/pkg/log"
26- "sigs.k8s.io/controller-runtime/pkg/webhook"
2728 "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
2829)
2930
3031var openstackdataplanedeploymentlog = logf .Log .WithName ("openstackdataplanedeployment-resource" )
3132
32- // SetupWebhookWithManager sets up the webhook with the Manager
33- func (r * OpenStackDataPlaneDeployment ) SetupWebhookWithManager (mgr ctrl.Manager ) error {
34- return ctrl .NewWebhookManagedBy (mgr ).For (r ).Complete ()
35- }
36-
37- // TODO(user): EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
38-
39- // +kubebuilder:webhook:path=/mutate-dataplane-openstack-org-v1beta1-openstackdataplanedeployment,mutating=true,failurePolicy=fail,sideEffects=None,groups=dataplane.openstack.org,resources=openstackdataplanedeployments,verbs=create;update,versions=v1beta1,name=mopenstackdataplanedeployment.kb.io,admissionReviewVersions=v1
40-
41- var _ webhook.Defaulter = & OpenStackDataPlaneDeployment {}
42-
43- // Default implements webhook.Defaulter so a webhook will be registered for the type
33+ // Default sets default values for the OpenStackDataPlaneDeployment
4434func (r * OpenStackDataPlaneDeployment ) Default () {
4535
4636 openstackdataplanedeploymentlog .Info ("default" , "name" , r .Name )
@@ -49,15 +39,12 @@ func (r *OpenStackDataPlaneDeployment) Default() {
4939
5040// Default - set defaults for this OpenStackDataPlaneDeployment
5141func (spec * OpenStackDataPlaneDeploymentSpec ) Default () {
52-
42+ if spec .ServicesOverride == nil {
43+ spec .ServicesOverride = []string {}
44+ }
5345}
5446
55- // TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation.
56- // +kubebuilder:webhook:path=/validate-dataplane-openstack-org-v1beta1-openstackdataplanedeployment,mutating=false,failurePolicy=fail,sideEffects=None,groups=dataplane.openstack.org,resources=openstackdataplanedeployments,verbs=create;update,versions=v1beta1,name=vopenstackdataplanedeployment.kb.io,admissionReviewVersions=v1
57-
58- var _ webhook.Validator = & OpenStackDataPlaneDeployment {}
59-
60- // ValidateCreate implements webhook.Validator so a webhook will be registered for the type
47+ // ValidateCreate validates the OpenStackDataPlaneDeployment on creation
6148func (r * OpenStackDataPlaneDeployment ) ValidateCreate () (admission.Warnings , error ) {
6249
6350 openstackdataplanedeploymentlog .Info ("validate create" , "name" , r .Name )
@@ -86,7 +73,14 @@ func (spec *OpenStackDataPlaneDeploymentSpec) ValidateCreate() field.ErrorList {
8673func (r * OpenStackDataPlaneDeployment ) ValidateUpdate (original runtime.Object ) (admission.Warnings , error ) {
8774 openstackdataplanedeploymentlog .Info ("validate update" , "name" , r .Name )
8875
89- errors := r .Spec .ValidateUpdate ()
76+ oldDeployment , ok := original .(* OpenStackDataPlaneDeployment )
77+ if ! ok {
78+ return nil , apierrors .NewInternalError (field .InternalError (
79+ field .NewPath ("spec" ),
80+ fmt .Errorf ("expected OpenStackDataPlaneDeployment, got %T" , original )))
81+ }
82+
83+ errors := r .Spec .ValidateUpdate (oldDeployment .Spec )
9084
9185 if len (errors ) != 0 {
9286 openstackdataplanedeploymentlog .Info ("validation failed" , "name" , r .Name )
@@ -101,8 +95,20 @@ func (r *OpenStackDataPlaneDeployment) ValidateUpdate(original runtime.Object) (
10195}
10296
10397// ValidateUpdate validates the OpenStackDataPlaneDeploymentSpec on update
104- func (spec * OpenStackDataPlaneDeploymentSpec ) ValidateUpdate () field.ErrorList {
105- // TODO(user): fill in your validation logic upon object update.
98+ func (spec * OpenStackDataPlaneDeploymentSpec ) ValidateUpdate (old OpenStackDataPlaneDeploymentSpec ) field.ErrorList {
99+ newCopy := * spec
100+ newCopy .Default ()
101+ old .Default ()
102+
103+ if ! reflect .DeepEqual (newCopy , old ) {
104+ return field.ErrorList {
105+ field .Invalid (
106+ field .NewPath ("spec" ),
107+ "object" ,
108+ "OpenStackDataPlaneDeployment Spec is immutable" ,
109+ ),
110+ }
111+ }
106112
107113 return field.ErrorList {}
108114}
0 commit comments