Skip to content

Commit c6c123b

Browse files
authored
Merge pull request #1118 from tkan145/THREESCALE-12040
THREESCALE-12040 - Block the upgrade if Oracle DB is being used
2 parents e705214 + 9eeec1c commit c6c123b

3 files changed

Lines changed: 52 additions & 4 deletions

File tree

controllers/apps/apimanager_controller.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,18 @@ func (r *APIManagerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
120120
return ctrl.Result{}, nil
121121
}
122122

123+
// TODO: remove once https://issues.redhat.com/browse/THREESCALE-12001 is fixed
124+
ok, err := helper.IsOracleDB(r.Client(), instance, logger)
125+
if err != nil {
126+
return ctrl.Result{}, err
127+
}
128+
if ok {
129+
// always run preflightChecks if oracle db is detected
130+
// this will allow us to return the error and block the
131+
// reconcilation loop
132+
preflightsRequired = true
133+
}
134+
123135
var preflightChecksError error
124136
if preflightsRequired {
125137
result, err, preflightChecksError = r.PreflightChecks(instance, logger)

pkg/helper/system_database_versions.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ func VerifySystemDatabase(k8sclient client.Client, reqConfigMap *v1.ConfigMap, a
5151
}
5252

5353
databaseVersionVerified, err = verifyMySQLVersion(dbConfig, databaseRequirement)
54-
5554
if err != nil {
5655
logger.Info("Failed to verify MySQL database version", "err", err)
5756
return false, err
5857
}
5958
} else if strings.HasPrefix(dbConfig.URL, "oracle-enhanced://") {
60-
logger.Info("Oracle system database discovered, bypassing version check")
61-
return true, nil
59+
// TODO: revert to old code once https://issues.redhat.com/browse/THREESCALE-12001 is fixed
60+
logger.Info("Oracle system database discovered")
61+
return false, fmt.Errorf("unsupported database, Oracle DB is not supported in this version of 3scale")
6262
} else {
6363
return false, fmt.Errorf("unsupported database")
6464
}
@@ -71,3 +71,21 @@ func VerifySystemDatabase(k8sclient client.Client, reqConfigMap *v1.ConfigMap, a
7171

7272
return databaseVersionVerified, nil
7373
}
74+
75+
// IsOracleDB check whether we have oracle DB
76+
// TODO: remove once https://issues.redhat.com/browse/THREESCALE-12001 is fixed
77+
func IsOracleDB(k8sclient client.Client, apimInstance *appsv1alpha1.APIManager, logger logr.Logger) (bool, error) {
78+
connSecret, err := fetchSecret(k8sclient, systemDatabaseName, apimInstance.Namespace)
79+
if err != nil {
80+
logger.Info("System database secret not found")
81+
return false, err
82+
}
83+
84+
dbConfig := reconcileSystemDBSecret(*connSecret)
85+
86+
if strings.HasPrefix(dbConfig.URL, "oracle-enhanced://") {
87+
logger.Info("Oracle system database discovered")
88+
return true, nil
89+
}
90+
return false, nil
91+
}

test/unitcontrollers/apimanager_controller_test.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package test
22

33
import (
44
"context"
5+
"fmt"
56
"os"
67
"testing"
78

@@ -16,6 +17,7 @@ import (
1617
imagev1 "github.com/openshift/api/image/v1"
1718
routev1 "github.com/openshift/api/route/v1"
1819
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
20+
corev1 "k8s.io/api/core/v1"
1921
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2022
"k8s.io/apimachinery/pkg/runtime"
2123
"k8s.io/apimachinery/pkg/types"
@@ -76,6 +78,23 @@ func TestAPIManagerControllerCreate(t *testing.T) {
7678
t.Fatal(err)
7779
}
7880

81+
// Define the secret
82+
systemappSecret := &corev1.Secret{
83+
ObjectMeta: metav1.ObjectMeta{
84+
Name: "system-database",
85+
Namespace: namespace,
86+
},
87+
StringData: map[string]string{
88+
"DB_USER": "mysql",
89+
"DB_PASSWORD": "password",
90+
"DB_ROOT_PASSWORD": "rootpassword",
91+
"URL": fmt.Sprintf("mysql2://root:rootpassword@system-mysql.%s.svc.cluster.local/dev", namespace),
92+
},
93+
Type: corev1.SecretTypeOpaque,
94+
}
95+
96+
objs = append(objs, systemappSecret)
97+
7998
// Create a fake client to mock API calls.
8099
cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(objs...).WithStatusSubresource(apimanager).Build()
81100
clientAPIReader := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(objs...).WithStatusSubresource(apimanager).Build()
@@ -110,7 +129,6 @@ func TestAPIManagerControllerCreate(t *testing.T) {
110129

111130
if finalAPIManager.Annotations == nil {
112131
t.Error("APIManager's does not have annotations")
113-
114132
}
115133

116134
if val, ok := finalAPIManager.Annotations[appsv1alpha1.OperatorVersionAnnotation]; !ok || val != version.Version {

0 commit comments

Comments
 (0)