@@ -51,6 +51,7 @@ import (
5151 common_rbac "github.com/openstack-k8s-operators/lib-common/modules/common/rbac"
5252 "github.com/openstack-k8s-operators/lib-common/modules/common/secret"
5353 "github.com/openstack-k8s-operators/lib-common/modules/common/service"
54+ "github.com/openstack-k8s-operators/lib-common/modules/common/tls"
5455 "github.com/openstack-k8s-operators/lib-common/modules/common/util"
5556 mariadbv1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1"
5657
@@ -380,63 +381,6 @@ func (r *CinderReconciler) reconcileInit(
380381
381382 Log .Info (fmt .Sprintf ("Reconciling Service '%s' init" , instance .Name ))
382383
383- //
384- // create service DB instance
385- //
386- db := mariadbv1 .NewDatabase (
387- instance .Name ,
388- instance .Spec .DatabaseUser ,
389- instance .Spec .Secret ,
390- map [string ]string {
391- "dbName" : instance .Spec .DatabaseInstance ,
392- },
393- )
394- // create or patch the DB
395- ctrlResult , err := db .CreateOrPatchDB (
396- ctx ,
397- helper ,
398- )
399- if err != nil {
400- instance .Status .Conditions .Set (condition .FalseCondition (
401- condition .DBReadyCondition ,
402- condition .ErrorReason ,
403- condition .SeverityWarning ,
404- condition .DBReadyErrorMessage ,
405- err .Error ()))
406- return ctrl.Result {}, err
407- }
408- if (ctrlResult != ctrl.Result {}) {
409- instance .Status .Conditions .Set (condition .FalseCondition (
410- condition .DBReadyCondition ,
411- condition .RequestedReason ,
412- condition .SeverityInfo ,
413- condition .DBReadyRunningMessage ))
414- return ctrlResult , nil
415- }
416- // wait for the DB to be setup
417- ctrlResult , err = db .WaitForDBCreated (ctx , helper )
418- if err != nil {
419- instance .Status .Conditions .Set (condition .FalseCondition (
420- condition .DBReadyCondition ,
421- condition .ErrorReason ,
422- condition .SeverityWarning ,
423- condition .DBReadyErrorMessage ,
424- err .Error ()))
425- return ctrlResult , err
426- }
427- if (ctrlResult != ctrl.Result {}) {
428- instance .Status .Conditions .Set (condition .FalseCondition (
429- condition .DBReadyCondition ,
430- condition .RequestedReason ,
431- condition .SeverityInfo ,
432- condition .DBReadyRunningMessage ))
433- return ctrlResult , nil
434- }
435- // update Status.DatabaseHostname, used to config the service
436- instance .Status .DatabaseHostname = db .GetDatabaseHostname ()
437- instance .Status .Conditions .MarkTrue (condition .DBReadyCondition , condition .DBReadyMessage )
438- // create service DB - end
439-
440384 //
441385 // run Cinder db sync
442386 //
@@ -450,7 +394,7 @@ func (r *CinderReconciler) reconcileInit(
450394 time .Duration (5 )* time .Second ,
451395 dbSyncHash ,
452396 )
453- ctrlResult , err = dbSyncjob .DoJob (
397+ ctrlResult , err : = dbSyncjob .DoJob (
454398 ctx ,
455399 helper ,
456400 )
@@ -615,10 +559,17 @@ func (r *CinderReconciler) reconcileNormal(ctx context.Context, instance *cinder
615559 instance .Status .Conditions .MarkTrue (condition .InputReadyCondition , condition .InputReadyMessage )
616560 // run check OpenStack secret - end
617561
562+ db , result , err := r .ensureDB (ctx , helper , instance )
563+ if err != nil {
564+ return ctrl.Result {}, err
565+ } else if (result != ctrl.Result {}) {
566+ return result , nil
567+ }
568+
618569 //
619570 // Create Secrets required as input for the Service and calculate an overall hash of hashes
620571 //
621- err = r .generateServiceConfigs (ctx , helper , instance , & configVars , serviceLabels , memcached )
572+ err = r .generateServiceConfigs (ctx , helper , instance , & configVars , serviceLabels , memcached , db )
622573 if err != nil {
623574 instance .Status .Conditions .Set (condition .FalseCondition (
624575 condition .ServiceConfigReadyCondition ,
@@ -911,6 +862,7 @@ func (r *CinderReconciler) generateServiceConfigs(
911862 envVars * map [string ]env.Setter ,
912863 serviceLabels map [string ]string ,
913864 memcached * memcachedv1.Memcached ,
865+ db * mariadbv1.Database ,
914866) error {
915867 //
916868 // create Secret required for cinder input
@@ -920,8 +872,20 @@ func (r *CinderReconciler) generateServiceConfigs(
920872
921873 labels := labels .GetLabels (instance , labels .GetGroupLabel (cinder .ServiceName ), serviceLabels )
922874
875+ db , err := mariadbv1 .GetDatabaseByName (ctx , h , cinder .DatabaseName )
876+ if err != nil {
877+ return err
878+ }
879+
880+ var tlsCfg * tls.Service
881+ if instance .Spec .CinderAPI .TLS .Ca .CaBundleSecretName != "" {
882+ tlsCfg = & tls.Service {}
883+ }
923884 // customData hold any customization for all cinder services.
924- customData := map [string ]string {cinder .CustomConfigFileName : instance .Spec .CustomServiceConfig }
885+ customData := map [string ]string {
886+ cinder .CustomConfigFileName : instance .Spec .CustomServiceConfig ,
887+ cinder .MyCnfFileName : db .GetDatabaseClientConfig (tlsCfg ), //(mschuppert) for now just get the default my.cnf
888+ }
925889
926890 keystoneAPI , err := keystonev1 .GetKeystoneAPI (ctx , h , instance .Namespace , map [string ]string {})
927891 if err != nil {
@@ -952,7 +916,7 @@ func (r *CinderReconciler) generateServiceConfigs(
952916 templateParameters ["KeystoneInternalURL" ] = keystoneInternalURL
953917 templateParameters ["KeystonePublicURL" ] = keystonePublicURL
954918 templateParameters ["TransportURL" ] = string (transportURLSecret .Data ["transport_url" ])
955- templateParameters ["DatabaseConnection" ] = fmt .Sprintf ("mysql+pymysql://%s:%s@%s/%s" ,
919+ templateParameters ["DatabaseConnection" ] = fmt .Sprintf ("mysql+pymysql://%s:%s@%s/%s?read_default_file=/etc/my.cnf " ,
956920 instance .Spec .DatabaseUser ,
957921 string (ospSecret .Data [instance .Spec .PasswordSelectors .Database ]),
958922 instance .Status .DatabaseHostname ,
@@ -1272,3 +1236,70 @@ func (r *CinderReconciler) volumeCleanupDeployments(ctx context.Context, instanc
12721236
12731237 return nil
12741238}
1239+
1240+ func (r * CinderReconciler ) ensureDB (
1241+ ctx context.Context ,
1242+ h * helper.Helper ,
1243+ instance * cinderv1beta1.Cinder ,
1244+ ) (* mariadbv1.Database , ctrl.Result , error ) {
1245+ //
1246+ // create service DB instance
1247+ //
1248+ db := mariadbv1 .NewDatabase (
1249+ instance .Name ,
1250+ instance .Spec .DatabaseUser ,
1251+ instance .Spec .Secret ,
1252+ map [string ]string {
1253+ "dbName" : instance .Spec .DatabaseInstance ,
1254+ },
1255+ )
1256+
1257+ // create or patch the DB
1258+ ctrlResult , err := db .CreateOrPatchDBByName (
1259+ ctx ,
1260+ h ,
1261+ instance .Spec .DatabaseInstance ,
1262+ )
1263+ if err != nil {
1264+ instance .Status .Conditions .Set (condition .FalseCondition (
1265+ condition .DBReadyCondition ,
1266+ condition .ErrorReason ,
1267+ condition .SeverityWarning ,
1268+ condition .DBReadyErrorMessage ,
1269+ err .Error ()))
1270+ return db , ctrl.Result {}, err
1271+ }
1272+ if (ctrlResult != ctrl.Result {}) {
1273+ instance .Status .Conditions .Set (condition .FalseCondition (
1274+ condition .DBReadyCondition ,
1275+ condition .RequestedReason ,
1276+ condition .SeverityInfo ,
1277+ condition .DBReadyRunningMessage ))
1278+ return db , ctrlResult , nil
1279+ }
1280+ // wait for the DB to be setup
1281+ // (ksambor) should we use WaitForDBCreatedWithTimeout instead?
1282+ ctrlResult , err = db .WaitForDBCreated (ctx , h )
1283+ if err != nil {
1284+ instance .Status .Conditions .Set (condition .FalseCondition (
1285+ condition .DBReadyCondition ,
1286+ condition .ErrorReason ,
1287+ condition .SeverityWarning ,
1288+ condition .DBReadyErrorMessage ,
1289+ err .Error ()))
1290+ return db , ctrlResult , err
1291+ }
1292+ if (ctrlResult != ctrl.Result {}) {
1293+ instance .Status .Conditions .Set (condition .FalseCondition (
1294+ condition .DBReadyCondition ,
1295+ condition .RequestedReason ,
1296+ condition .SeverityInfo ,
1297+ condition .DBReadyRunningMessage ))
1298+ return db , ctrlResult , nil
1299+ }
1300+
1301+ // update Status.DatabaseHostname, used to config the service
1302+ instance .Status .DatabaseHostname = db .GetDatabaseHostname ()
1303+ instance .Status .Conditions .MarkTrue (condition .DBReadyCondition , condition .DBReadyMessage )
1304+ return db , ctrlResult , nil
1305+ }
0 commit comments