@@ -26,6 +26,7 @@ import (
2626 common_webhook "github.com/openstack-k8s-operators/lib-common/modules/common/webhook"
2727 mariadbv1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1"
2828 placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1"
29+ watcherv1 "github.com/openstack-k8s-operators/watcher-operator/api/v1beta1"
2930 "golang.org/x/exp/maps"
3031 "golang.org/x/exp/slices"
3132 apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -244,6 +245,12 @@ func (r *OpenStackControlPlane) checkDepsEnabled(name string) string {
244245 if ! (r .Spec .Rabbitmq .Enabled && r .Spec .Keystone .Enabled ) {
245246 reqs = "RabbitMQ, Keystone"
246247 }
248+ case "Watcher" :
249+ if ! (r .Spec .Galera .Enabled && r .Spec .Memcached .Enabled && r .Spec .Rabbitmq .Enabled &&
250+ r .Spec .Keystone .Enabled && r .Spec .Telemetry .Enabled && * r .Spec .Telemetry .Template .Ceilometer .Enabled &&
251+ * r .Spec .Telemetry .Template .MetricStorage .Enabled ) {
252+ reqs = "Galera, Memcached, RabbitMQ, Keystone, Telemetry, Telemetry.Ceilometer, Telemetry.MetricStorage"
253+ }
247254 }
248255
249256 // If "reqs" is not the empty string, we have missing requirements
@@ -345,6 +352,11 @@ func (r *OpenStackControlPlane) ValidateCreateServices(basePath *field.Path) (ad
345352 errors = append (errors , validateTLSOverrideSpec (& r .Spec .Designate .APIOverride .Route , basePath .Child ("designate" ).Child ("apiOverride" ).Child ("route" ))... )
346353 }
347354
355+ if r .Spec .Watcher .Enabled {
356+ errors = append (errors , r .Spec .Watcher .Template .ValidateCreate (basePath .Child ("watcher" ).Child ("template" ), r .Namespace )... )
357+ errors = append (errors , validateTLSOverrideSpec (& r .Spec .Watcher .APIOverride .Route , basePath .Child ("watcher" ).Child ("apiOverride" ).Child ("route" ))... )
358+ }
359+
348360 // Validation for remaining services...
349361 if r .Spec .Galera .Enabled {
350362 for key , s := range * r .Spec .Galera .Templates {
@@ -533,6 +545,14 @@ func (r *OpenStackControlPlane) ValidateUpdateServices(old OpenStackControlPlane
533545 errors = append (errors , validateTLSOverrideSpec (& r .Spec .Designate .APIOverride .Route , basePath .Child ("designate" ).Child ("apiOverride" ).Child ("route" ))... )
534546 }
535547
548+ if r .Spec .Watcher .Enabled {
549+ if old .Watcher .Template == nil {
550+ old .Watcher .Template = & watcherv1.WatcherSpecCore {}
551+ }
552+ errors = append (errors , r .Spec .Watcher .Template .ValidateUpdate (* old .Watcher .Template , basePath .Child ("watcher" ).Child ("template" ), r .Namespace )... )
553+ errors = append (errors , validateTLSOverrideSpec (& r .Spec .Watcher .APIOverride .Route , basePath .Child ("watcher" ).Child ("apiOverride" ).Child ("route" ))... )
554+ }
555+
536556 if r .Spec .Memcached .Enabled {
537557 if r .Spec .Memcached .Templates != nil {
538558 err := common_webhook .ValidateDNS1123Label (
@@ -680,6 +700,12 @@ func (r *OpenStackControlPlane) ValidateServiceDependencies(basePath *field.Path
680700 allErrs = append (allErrs , err )
681701 }
682702 }
703+ if r .Spec .Watcher .Enabled {
704+ if depErrorMsg := r .checkDepsEnabled ("Watcher" ); depErrorMsg != "" {
705+ err := field .Invalid (basePath .Child ("watcher" ).Child ("enabled" ), r .Spec .Watcher .Enabled , depErrorMsg )
706+ allErrs = append (allErrs , err )
707+ }
708+ }
683709
684710 return allErrs
685711}
@@ -1031,6 +1057,24 @@ func (r *OpenStackControlPlane) DefaultServices() {
10311057 }
10321058 }
10331059
1060+ // Watcher
1061+ if r .Spec .Watcher .Enabled || r .Spec .Watcher .Template != nil {
1062+ if r .Spec .Watcher .Template == nil {
1063+ r .Spec .Watcher .Template = & watcherv1.WatcherSpecCore {}
1064+ }
1065+ r .Spec .Watcher .Template .Default ()
1066+
1067+ if r .Spec .Watcher .Enabled {
1068+ initializeOverrideSpec (& r .Spec .Watcher .APIOverride .Route , true )
1069+ r .Spec .Watcher .Template .SetDefaultRouteAnnotations (r .Spec .Watcher .APIOverride .Route .Annotations )
1070+ }
1071+
1072+ // Default DatabaseInstance
1073+ if r .Spec .Watcher .Template .DatabaseInstance == nil || * r .Spec .Watcher .Template .DatabaseInstance == "" {
1074+ r .Spec .Watcher .Template .DatabaseInstance = ptr .To ("openstack" )
1075+ }
1076+ }
1077+
10341078}
10351079
10361080// DefaultLabel - adding default label to the OpenStackControlPlane
0 commit comments