@@ -377,6 +377,39 @@ func (r *GlanceAPIReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Man
377377 return nil
378378 }
379379
380+ keystoneOverrideSecretFn := func (_ context.Context , o client.Object ) []reconcile.Request {
381+ secret := o .(* corev1.Secret )
382+ result := []reconcile.Request {}
383+ // get all GlanceAPI CRs
384+ glances := & glancev1.GlanceAPIList {}
385+ listOpts := []client.ListOption {
386+ client .InNamespace (o .GetNamespace ()),
387+ }
388+ if err := r .Client .List (context .Background (), glances , listOpts ... ); err != nil {
389+ Log .Error (err , "Unable to retrieve GlanceAPI CRs %v" )
390+ return nil
391+ }
392+ // Check if the secret has a specific label
393+ if ls := secret .GetLabels (); ls != nil {
394+ lSelector := labels .GetLabelSelector (ls )
395+ kSelector := labels .GetLabelSelector (keystonev1 .KeystoneOverridesLabelSelector )
396+ if labels .EqualLabelSelectors (lSelector , kSelector ) {
397+ for _ , cr := range glances .Items {
398+ name := client.ObjectKey {
399+ Namespace : o .GetNamespace (),
400+ Name : cr .Name ,
401+ }
402+ // append the request for this particular glance instance
403+ result = append (result , reconcile.Request {NamespacedName : name })
404+ }
405+ }
406+ }
407+ if len (result ) > 0 {
408+ return result
409+ }
410+ return nil
411+ }
412+
380413 return ctrl .NewControllerManagedBy (mgr ).
381414 For (& glancev1.GlanceAPI {}).
382415 Owns (& keystonev1.KeystoneEndpoint {}).
@@ -385,6 +418,8 @@ func (r *GlanceAPIReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Man
385418 Owns (& appsv1.StatefulSet {}).
386419 Watches (& corev1.Secret {},
387420 handler .EnqueueRequestsFromMapFunc (svcSecretFn )).
421+ Watches (& corev1.Secret {},
422+ handler .EnqueueRequestsFromMapFunc (keystoneOverrideSecretFn )).
388423 Watches (& networkv1.NetworkAttachmentDefinition {},
389424 handler .EnqueueRequestsFromMapFunc (nadFn )).
390425 Watches (
@@ -1174,6 +1209,9 @@ func (r *GlanceAPIReconciler) generateServiceConfig(
11741209 }
11751210 customData [glance .CustomServiceConfigSecretsFileName ] = customSecrets
11761211
1212+ // Collect the keystone information required to render the config templates
1213+ // in a dedicated structure. By doing this it is easy enough to process any
1214+ // parameter override
11771215 keystoneAPI , err := keystonev1 .GetKeystoneAPI (ctx , h , instance .Namespace , map [string ]string {})
11781216 // KeystoneAPI not available we should not aggregate the error and continue
11791217 if err != nil {
@@ -1188,6 +1226,28 @@ func (r *GlanceAPIReconciler) generateServiceConfig(
11881226 return err
11891227 }
11901228
1229+ keystoneData := map [string ]string {
1230+ "www_authenticate_uri" : keystonePublicURL ,
1231+ "auth_url" : keystoneInternalURL ,
1232+ "region" : keystoneAPI .GetRegion (),
1233+ }
1234+
1235+ // Get keystoneOverrides
1236+ keystoneOverrides , err := keystonev1 .GetKeystoneOverrides (
1237+ ctx ,
1238+ h ,
1239+ instance .Namespace ,
1240+ keystonev1 .KeystoneOverridesLabelSelector ,
1241+ )
1242+ if err != nil {
1243+ return err
1244+ }
1245+
1246+ // Merge overrides into keystoneData
1247+ for k , v := range keystoneOverrides {
1248+ keystoneData [k ] = v
1249+ }
1250+
11911251 ospSecret , _ , err := secret .GetSecret (ctx , h , instance .Spec .Secret , instance .Namespace )
11921252 if err != nil {
11931253 return err
@@ -1224,8 +1284,9 @@ func (r *GlanceAPIReconciler) generateServiceConfig(
12241284 templateParameters := map [string ]interface {}{
12251285 "ServiceUser" : instance .Spec .ServiceUser ,
12261286 "ServicePassword" : string (ospSecret .Data [instance .Spec .PasswordSelectors .Service ]),
1227- "KeystoneInternalURL" : keystoneInternalURL ,
1228- "KeystonePublicURL" : keystonePublicURL ,
1287+ "KeystoneInternalURL" : keystoneData ["auth_url" ],
1288+ "KeystonePublicURL" : keystoneData ["www_authenticate_uri" ],
1289+ "Region" : keystoneData ["region" ],
12291290 "DatabaseConnection" : fmt .Sprintf ("mysql+pymysql://%s:%s@%s/%s?read_default_file=/etc/my.cnf" ,
12301291 databaseAccount .Spec .UserName ,
12311292 string (dbSecret .Data [mariadbv1 .DatabasePasswordSelector ]),
@@ -1247,7 +1308,6 @@ func (r *GlanceAPIReconciler) generateServiceConfig(
12471308 // .Status.
12481309 if len (endpointID ) > 0 {
12491310 templateParameters ["EndpointID" ] = endpointID
1250- templateParameters ["Region" ] = keystoneAPI .GetRegion ()
12511311 }
12521312
12531313 // Configure the internal GlanceAPI to provide image location data, and the
0 commit comments