Skip to content

Commit 22ea0a3

Browse files
Merge pull request #301 from stuggi/endpoint_webhook
Add webhook to validate service override endpoint type
2 parents 79b9029 + 27a852c commit 22ea0a3

File tree

5 files changed

+90
-8
lines changed

5 files changed

+90
-8
lines changed

api/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.20
55
require (
66
github.com/onsi/ginkgo/v2 v2.17.2
77
github.com/onsi/gomega v1.33.0
8-
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240429052447-09a614506ca6
8+
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240522141801-d6e03083e82a
99
k8s.io/api v0.28.9
1010
k8s.io/apimachinery v0.28.9
1111
k8s.io/client-go v0.28.9

api/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g
6868
github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc=
6969
github.com/onsi/gomega v1.33.0 h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE=
7070
github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY=
71-
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240429052447-09a614506ca6 h1:WLsG3Ko+phW5xZJjncypLWGASoLqKrt05qN9Zxsad6g=
72-
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240429052447-09a614506ca6/go.mod h1:lYhFzul37AR/6gAhTAA1KKWbOlzB3F/7014lejn883c=
71+
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240522141801-d6e03083e82a h1:kcASVA9sZg9DtggyJlN6JZE6pIenJgXivFK6ry7WUVM=
72+
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240522141801-d6e03083e82a/go.mod h1:lYhFzul37AR/6gAhTAA1KKWbOlzB3F/7014lejn883c=
7373
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
7474
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
7575
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=

api/v1beta1/octavia_webhook.go

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,13 @@ limitations under the License.
1717
package v1beta1
1818

1919
import (
20+
"fmt"
21+
22+
"github.com/openstack-k8s-operators/lib-common/modules/common/service"
23+
apierrors "k8s.io/apimachinery/pkg/api/errors"
2024
"k8s.io/apimachinery/pkg/runtime"
25+
"k8s.io/apimachinery/pkg/runtime/schema"
26+
"k8s.io/apimachinery/pkg/util/validation/field"
2127
ctrl "sigs.k8s.io/controller-runtime"
2228
logf "sigs.k8s.io/controller-runtime/pkg/log"
2329
"sigs.k8s.io/controller-runtime/pkg/webhook"
@@ -95,18 +101,94 @@ var _ webhook.Validator = &Octavia{}
95101
func (r *Octavia) ValidateCreate() (admission.Warnings, error) {
96102
octavialog.Info("validate create", "name", r.Name)
97103

98-
// TODO(user): fill in your validation logic upon object creation.
104+
var allErrs field.ErrorList
105+
basePath := field.NewPath("spec")
106+
if err := r.Spec.ValidateCreate(basePath); err != nil {
107+
allErrs = append(allErrs, err...)
108+
}
109+
110+
if len(allErrs) != 0 {
111+
return nil, apierrors.NewInvalid(
112+
schema.GroupKind{Group: "octavia.openstack.org", Kind: "Octavia"},
113+
r.Name, allErrs)
114+
}
115+
99116
return nil, nil
100117
}
101118

119+
// ValidateCreate - Exported function wrapping non-exported validate functions,
120+
// this function can be called externally to validate an octavia spec.
121+
func (r *OctaviaSpec) ValidateCreate(basePath *field.Path) field.ErrorList {
122+
var allErrs field.ErrorList
123+
124+
// validate the service override key is valid
125+
allErrs = append(allErrs, service.ValidateRoutedOverrides(
126+
basePath.Child("octaviaAPI").Child("override").Child("service"),
127+
r.OctaviaAPI.Override.Service)...)
128+
129+
return allErrs
130+
}
131+
132+
func (r *OctaviaSpecCore) ValidateCreate(basePath *field.Path) field.ErrorList {
133+
var allErrs field.ErrorList
134+
135+
// validate the service override key is valid
136+
allErrs = append(allErrs, service.ValidateRoutedOverrides(
137+
basePath.Child("octaviaAPI").Child("override").Child("service"),
138+
r.OctaviaAPI.Override.Service)...)
139+
140+
return allErrs
141+
}
142+
102143
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
103144
func (r *Octavia) ValidateUpdate(old runtime.Object) (admission.Warnings, error) {
104145
octavialog.Info("validate update", "name", r.Name)
105146

106-
// TODO(user): fill in your validation logic upon object update.
147+
oldOctavia, ok := old.(*Octavia)
148+
if !ok || oldOctavia == nil {
149+
return nil, apierrors.NewInternalError(fmt.Errorf("unable to convert existing object"))
150+
}
151+
152+
var allErrs field.ErrorList
153+
basePath := field.NewPath("spec")
154+
155+
if err := r.Spec.ValidateUpdate(oldOctavia.Spec, basePath); err != nil {
156+
allErrs = append(allErrs, err...)
157+
}
158+
159+
if len(allErrs) != 0 {
160+
return nil, apierrors.NewInvalid(
161+
schema.GroupKind{Group: "octavia.openstack.org", Kind: "Octavia"},
162+
r.Name, allErrs)
163+
}
164+
107165
return nil, nil
108166
}
109167

168+
// ValidateUpdate - Exported function wrapping non-exported validate functions,
169+
// this function can be called externally to validate an barbican spec.
170+
func (r *OctaviaSpec) ValidateUpdate(old OctaviaSpec, basePath *field.Path) field.ErrorList {
171+
var allErrs field.ErrorList
172+
173+
// validate the service override key is valid
174+
allErrs = append(allErrs, service.ValidateRoutedOverrides(
175+
basePath.Child("octaviaAPI").Child("override").Child("service"),
176+
r.OctaviaAPI.Override.Service)...)
177+
178+
return allErrs
179+
}
180+
181+
func (r *OctaviaSpecCore) ValidateUpdate(old OctaviaSpecCore, basePath *field.Path) field.ErrorList {
182+
var allErrs field.ErrorList
183+
184+
// validate the service override key is valid
185+
allErrs = append(allErrs, service.ValidateRoutedOverrides(
186+
basePath.Child("octaviaAPI").Child("override").Child("service"),
187+
r.OctaviaAPI.Override.Service)...)
188+
189+
return allErrs
190+
}
191+
110192
// ValidateDelete implements webhook.Validator so a webhook will be registered for the type
111193
func (r *Octavia) ValidateDelete() (admission.Warnings, error) {
112194
octavialog.Info("validate delete", "name", r.Name)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/onsi/gomega v1.33.0
1111
github.com/openstack-k8s-operators/infra-operator/apis v0.3.1-0.20240429104248-25176c735750
1212
github.com/openstack-k8s-operators/keystone-operator/api v0.3.1-0.20240429164853-7e1e3b111ee9
13-
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240429052447-09a614506ca6
13+
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240522141801-d6e03083e82a
1414
github.com/openstack-k8s-operators/lib-common/modules/openstack v0.3.1-0.20240429052447-09a614506ca6
1515
github.com/openstack-k8s-operators/mariadb-operator/api v0.3.1-0.20240429121622-952f44520872
1616
github.com/openstack-k8s-operators/octavia-operator/api v0.0.0-00010101000000-000000000000

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ github.com/openstack-k8s-operators/infra-operator/apis v0.3.1-0.20240429104248-2
7878
github.com/openstack-k8s-operators/infra-operator/apis v0.3.1-0.20240429104248-25176c735750/go.mod h1:QN2DJpfEc+mbvvfhoCuJ/UhQzvw12Mf+8nS0QX1HGIg=
7979
github.com/openstack-k8s-operators/keystone-operator/api v0.3.1-0.20240429164853-7e1e3b111ee9 h1:aS7xUxC/uOXfw0T4ARTu0G1qb6eJ0WnB2JRv9donPOE=
8080
github.com/openstack-k8s-operators/keystone-operator/api v0.3.1-0.20240429164853-7e1e3b111ee9/go.mod h1:Y/ge/l24phVaJb9S8mYRjtnDkohFkX/KEOUXLArcyvQ=
81-
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240429052447-09a614506ca6 h1:WLsG3Ko+phW5xZJjncypLWGASoLqKrt05qN9Zxsad6g=
82-
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240429052447-09a614506ca6/go.mod h1:lYhFzul37AR/6gAhTAA1KKWbOlzB3F/7014lejn883c=
81+
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240522141801-d6e03083e82a h1:kcASVA9sZg9DtggyJlN6JZE6pIenJgXivFK6ry7WUVM=
82+
github.com/openstack-k8s-operators/lib-common/modules/common v0.3.1-0.20240522141801-d6e03083e82a/go.mod h1:lYhFzul37AR/6gAhTAA1KKWbOlzB3F/7014lejn883c=
8383
github.com/openstack-k8s-operators/lib-common/modules/openstack v0.3.1-0.20240429052447-09a614506ca6 h1:/mhzQQ9FF70z00zZD7dpgOoNXvEu9q68oob3oAiJW08=
8484
github.com/openstack-k8s-operators/lib-common/modules/openstack v0.3.1-0.20240429052447-09a614506ca6/go.mod h1:mrRNYeg8jb1zgGsufpN1/IB3sdbaST8btTBLwQ+taaA=
8585
github.com/openstack-k8s-operators/mariadb-operator/api v0.3.1-0.20240429121622-952f44520872 h1:ViWyS1AQ2mTn/sS0CA9GVw0+BuGpazpUSjSBUzdX3NE=

0 commit comments

Comments
 (0)