@@ -733,60 +733,12 @@ func (r *KeystoneAPIReconciler) reconcileNormal(
733733 //
734734 // create service DB instance
735735 //
736- db := mariadbv1 .NewDatabase (
737- instance .Name ,
738- instance .Spec .DatabaseUser ,
739- instance .Spec .Secret ,
740- map [string ]string {
741- "dbName" : instance .Spec .DatabaseInstance ,
742- },
743- )
744- // create or patch the DB
745- ctrlResult , err := db .CreateOrPatchDB (
746- ctx ,
747- helper ,
748- )
736+ db , result , err := r .ensureDB (ctx , helper , instance )
749737 if err != nil {
750- instance .Status .Conditions .Set (condition .FalseCondition (
751- condition .DBReadyCondition ,
752- condition .ErrorReason ,
753- condition .SeverityWarning ,
754- condition .DBReadyErrorMessage ,
755- err .Error ()))
756738 return ctrl.Result {}, err
739+ } else if (result != ctrl.Result {}) {
740+ return result , nil
757741 }
758- if (ctrlResult != ctrl.Result {}) {
759- instance .Status .Conditions .Set (condition .FalseCondition (
760- condition .DBReadyCondition ,
761- condition .RequestedReason ,
762- condition .SeverityInfo ,
763- condition .DBReadyRunningMessage ))
764- return ctrlResult , nil
765- }
766-
767- // wait for the DB to be setup
768- ctrlResult , err = db .WaitForDBCreated (ctx , helper )
769- if err != nil {
770- instance .Status .Conditions .Set (condition .FalseCondition (
771- condition .DBReadyCondition ,
772- condition .ErrorReason ,
773- condition .SeverityWarning ,
774- condition .DBReadyErrorMessage ,
775- err .Error ()))
776- return ctrlResult , err
777- }
778- if (ctrlResult != ctrl.Result {}) {
779- instance .Status .Conditions .Set (condition .FalseCondition (
780- condition .DBReadyCondition ,
781- condition .RequestedReason ,
782- condition .SeverityInfo ,
783- condition .DBReadyRunningMessage ))
784- return ctrlResult , nil
785- }
786- // update Status.DatabaseHostname, used to bootstrap/config the service
787- instance .Status .DatabaseHostname = db .GetDatabaseHostname ()
788- instance .Status .Conditions .MarkTrue (condition .DBReadyCondition , condition .DBReadyMessage )
789-
790742 // create service DB - end
791743
792744 //
@@ -880,7 +832,7 @@ func (r *KeystoneAPIReconciler) reconcileNormal(
880832 // - %-config configmap holding minimal keystone config required to get the service up, user can add additional files to be added to the service
881833 // - parameters which has passwords gets added from the OpenStack secret via the init container
882834 //
883- err = r .generateServiceConfigMaps (ctx , instance , helper , & configMapVars , memcached )
835+ err = r .generateServiceConfigMaps (ctx , instance , helper , & configMapVars , memcached , db )
884836 if err != nil {
885837 instance .Status .Conditions .Set (condition .FalseCondition (
886838 condition .ServiceConfigReadyCondition ,
@@ -1158,6 +1110,7 @@ func (r *KeystoneAPIReconciler) generateServiceConfigMaps(
11581110 h * helper.Helper ,
11591111 envVars * map [string ]env.Setter ,
11601112 mc * memcachedv1.Memcached ,
1113+ db * mariadbv1.Database ,
11611114) error {
11621115 //
11631116 // create Configmap/Secret required for keystone input
@@ -1168,12 +1121,18 @@ func (r *KeystoneAPIReconciler) generateServiceConfigMaps(
11681121
11691122 cmLabels := labels .GetLabels (instance , labels .GetGroupLabel (keystone .ServiceName ), map [string ]string {})
11701123
1124+ var tlsCfg * tls.Service
1125+ if instance .Spec .TLS .Ca .CaBundleSecretName != "" {
1126+ tlsCfg = & tls.Service {}
1127+ }
1128+
11711129 // customData hold any customization for the service.
11721130 // custom.conf is going to /etc/<service>/<service>.conf.d
11731131 // all other files get placed into /etc/<service> to allow overwrite of e.g. policy.json
11741132 // TODO: make sure custom.conf can not be overwritten
11751133 customData := map [string ]string {
11761134 common .CustomServiceConfigFileName : instance .Spec .CustomServiceConfig ,
1135+ "my.cnf" : db .GetDatabaseClientConfig (tlsCfg ), //(mschuppert) for now just get the default my.cnf
11771136 }
11781137 for key , data := range instance .Spec .DefaultConfigOverwrite {
11791138 customData [key ] = data
@@ -1192,7 +1151,7 @@ func (r *KeystoneAPIReconciler) generateServiceConfigMaps(
11921151 templateParameters := map [string ]interface {}{
11931152 "memcachedServers" : strings .Join (mc .Status .ServerList , "," ),
11941153 "TransportURL" : string (transportURLSecret .Data ["transport_url" ]),
1195- "DatabaseConnection" : fmt .Sprintf ("mysql+pymysql://%s:%s@%s/%s" ,
1154+ "DatabaseConnection" : fmt .Sprintf ("mysql+pymysql://%s:%s@%s/%s?read_default_file=/etc/my.cnf " ,
11961155 instance .Spec .DatabaseUser ,
11971156 string (ospSecret .Data [instance .Spec .PasswordSelectors .Database ]),
11981157 instance .Status .DatabaseHostname ,
@@ -1416,3 +1375,70 @@ func (r *KeystoneAPIReconciler) getKeystoneMemcached(
14161375 }
14171376 return memcached , err
14181377}
1378+
1379+ func (r * KeystoneAPIReconciler ) ensureDB (
1380+ ctx context.Context ,
1381+ h * helper.Helper ,
1382+ instance * keystonev1.KeystoneAPI ,
1383+ ) (* mariadbv1.Database , ctrl.Result , error ) {
1384+ //
1385+ // create service DB instance
1386+ //
1387+ db := mariadbv1 .NewDatabase (
1388+ instance .Name ,
1389+ instance .Spec .DatabaseUser ,
1390+ instance .Spec .Secret ,
1391+ map [string ]string {
1392+ "dbName" : instance .Spec .DatabaseInstance ,
1393+ },
1394+ )
1395+
1396+ // create or patch the DB
1397+ ctrlResult , err := db .CreateOrPatchDBByName (
1398+ ctx ,
1399+ h ,
1400+ instance .Spec .DatabaseInstance ,
1401+ )
1402+ if err != nil {
1403+ instance .Status .Conditions .Set (condition .FalseCondition (
1404+ condition .DBReadyCondition ,
1405+ condition .ErrorReason ,
1406+ condition .SeverityWarning ,
1407+ condition .DBReadyErrorMessage ,
1408+ err .Error ()))
1409+ return db , ctrl.Result {}, err
1410+ }
1411+ if (ctrlResult != ctrl.Result {}) {
1412+ instance .Status .Conditions .Set (condition .FalseCondition (
1413+ condition .DBReadyCondition ,
1414+ condition .RequestedReason ,
1415+ condition .SeverityInfo ,
1416+ condition .DBReadyRunningMessage ))
1417+ return db , ctrlResult , nil
1418+ }
1419+ // wait for the DB to be setup
1420+ // (ksambor) should we use WaitForDBCreatedWithTimeout instead?
1421+ ctrlResult , err = db .WaitForDBCreated (ctx , h )
1422+ if err != nil {
1423+ instance .Status .Conditions .Set (condition .FalseCondition (
1424+ condition .DBReadyCondition ,
1425+ condition .ErrorReason ,
1426+ condition .SeverityWarning ,
1427+ condition .DBReadyErrorMessage ,
1428+ err .Error ()))
1429+ return db , ctrlResult , err
1430+ }
1431+ if (ctrlResult != ctrl.Result {}) {
1432+ instance .Status .Conditions .Set (condition .FalseCondition (
1433+ condition .DBReadyCondition ,
1434+ condition .RequestedReason ,
1435+ condition .SeverityInfo ,
1436+ condition .DBReadyRunningMessage ))
1437+ return db , ctrlResult , nil
1438+ }
1439+
1440+ // update Status.DatabaseHostname, used to config the service
1441+ instance .Status .DatabaseHostname = db .GetDatabaseHostname ()
1442+ instance .Status .Conditions .MarkTrue (condition .DBReadyCondition , condition .DBReadyMessage )
1443+ return db , ctrlResult , nil
1444+ }
0 commit comments