@@ -44,6 +44,7 @@ import (
4444 glancev1 "github.com/openstack-k8s-operators/glance-operator/api/v1beta1"
4545 "github.com/openstack-k8s-operators/glance-operator/pkg/glance"
4646 "github.com/openstack-k8s-operators/glance-operator/pkg/glanceapi"
47+ horizonv1 "github.com/openstack-k8s-operators/horizon-operator/api/v1beta1"
4748 memcachedv1 "github.com/openstack-k8s-operators/infra-operator/apis/memcached/v1beta1"
4849 topologyv1 "github.com/openstack-k8s-operators/infra-operator/apis/topology/v1beta1"
4950 keystonev1 "github.com/openstack-k8s-operators/keystone-operator/api/v1beta1"
@@ -83,6 +84,7 @@ func (r *GlanceAPIReconciler) GetLogger(ctx context.Context) logr.Logger {
8384// +kubebuilder:rbac:groups=glance.openstack.org,resources=glanceapis/status,verbs=get;update;patch
8485// +kubebuilder:rbac:groups=glance.openstack.org,resources=glanceapis/finalizers,verbs=update;patch
8586// +kubebuilder:rbac:groups=cinder.openstack.org,resources=cinders,verbs=get;list;watch
87+ // +kubebuilder:rbac:groups=horizon.openstack.org,resources=horizons,verbs=get;list;watch
8688// +kubebuilder:rbac:groups=core,resources=secrets,verbs=get;list;watch;create;update;patch;delete;
8789// +kubebuilder:rbac:groups=apps,resources=statefulsets,verbs=get;list;watch;create;update;patch;delete
8890// +kubebuilder:rbac:groups=apps,resources=statefulsets/status,verbs=get;list;watch
@@ -333,6 +335,7 @@ func (r *GlanceAPIReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Man
333335 return nil
334336 }
335337
338+ // Watch for changes in memcached used by Glance
336339 memcachedFn := func (_ context.Context , o client.Object ) []reconcile.Request {
337340 result := []reconcile.Request {}
338341
@@ -385,6 +388,9 @@ func (r *GlanceAPIReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Man
385388 Watches (& keystonev1.KeystoneAPI {},
386389 handler .EnqueueRequestsFromMapFunc (r .findObjectForSrc ),
387390 builder .WithPredicates (keystonev1 .KeystoneAPIStatusChangedPredicate )).
391+ Watches (& horizonv1.Horizon {},
392+ handler .EnqueueRequestsFromMapFunc (r .findObjectForSrc ),
393+ builder .WithPredicates (horizonv1 .HorizonEndpointChangedPredicate )).
388394 Complete (r )
389395}
390396
@@ -1278,6 +1284,11 @@ func (r *GlanceAPIReconciler) generateServiceConfig(
12781284 templateParameters ["TransportURL" ] = string (notificationBusSecret .Data ["transport_url" ])
12791285 }
12801286
1287+ // Try to get Horizon endpoint and setup CORS section if the CR is found
1288+ if horizonEndpoint , err := r .GetHorizonEndpoint (ctx , h , instance ); err == nil {
1289+ templateParameters ["HorizonEndpoint" ] = horizonEndpoint
1290+ }
1291+
12811292 // 00-default.conf will be regenerated as we have a ln -s of the
12821293 // templates/glance/config directory
12831294 // Do not generate -scripts as they are inherited from the top-level CR
@@ -1633,3 +1644,26 @@ func (r *GlanceAPIReconciler) glanceAPIRefresh(
16331644 }
16341645 return nil
16351646}
1647+
1648+ // GetHorizonEndpoint - Returns the horizon endpoint set in the CR .Status
1649+ func (r * GlanceAPIReconciler ) GetHorizonEndpoint (
1650+ ctx context.Context ,
1651+ h * helper.Helper ,
1652+ instance * glancev1.GlanceAPI ,
1653+ ) (string , error ) {
1654+ Log := r .GetLogger (ctx )
1655+
1656+ horizon , err := horizonv1 .GetHorizon (ctx , h , instance .Namespace )
1657+ if err != nil {
1658+ Log .Info ("Error getting Horizon CR" )
1659+ return "" , err
1660+ }
1661+
1662+ ep , err := horizon .GetEndpoint ()
1663+ if err != nil {
1664+ Log .Info ("No endpoint present in the Status" )
1665+ return "" , err
1666+ }
1667+
1668+ return ep , nil
1669+ }
0 commit comments