Skip to content

Commit 4c1a9e5

Browse files
authored
Merge pull request noobaa#1858 from aayushchouhan09/rev-gcp
Revert PR noobaa#1835: Restore GCP cloud credentials and backing store
2 parents 9148bc8 + e6e48f1 commit 4c1a9e5

2 files changed

Lines changed: 117 additions & 127 deletions

File tree

pkg/system/phase2_creating.go

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -892,10 +892,9 @@ func (r *Reconciler) ReconcileBackingStoreCredentials() error {
892892
if util.IsAzurePlatformNonGovernment() {
893893
return r.ReconcileAzureCredentials()
894894
}
895-
// TODO: once we have STS handle it
896-
// if util.IsGCPPlatform() {
897-
// return r.ReconcileGCPCredentials()
898-
// }
895+
if util.IsGCPPlatform() {
896+
return r.ReconcileGCPCredentials()
897+
}
899898
if util.IsIBMPlatform() {
900899
return r.ReconcileIBMCredentials()
901900
}
@@ -1120,27 +1119,26 @@ func (r *Reconciler) ReconcileAzureCredentials() error {
11201119
return err
11211120
}
11221121

1123-
// TODO: once we have STS handle it
11241122
// ReconcileGCPCredentials creates a CredentialsRequest resource if cloud credentials operator is available
1125-
// func (r *Reconciler) ReconcileGCPCredentials() error {
1126-
// r.Logger.Info("Running on GCP. will create a CredentialsRequest resource")
1127-
// err := r.Client.Get(r.Ctx, util.ObjectKey(r.GCPCloudCreds), r.GCPCloudCreds)
1128-
// if err == nil || meta.IsNoMatchError(err) || runtime.IsNotRegisteredError(err) {
1129-
// return nil
1130-
// }
1131-
// if errors.IsNotFound(err) {
1132-
// // credential request does not exist. create one
1133-
// r.Logger.Info("Creating CredentialsRequest resource")
1134-
// r.Own(r.GCPCloudCreds)
1135-
// err = r.Client.Create(r.Ctx, r.GCPCloudCreds)
1136-
// if err != nil {
1137-
// r.Logger.Errorf("got error when trying to create credentials request for GCP. %v", err)
1138-
// return err
1139-
// }
1140-
// return nil
1141-
// }
1142-
// return err
1143-
// }
1123+
func (r *Reconciler) ReconcileGCPCredentials() error {
1124+
r.Logger.Info("Running on GCP. will create a CredentialsRequest resource")
1125+
err := r.Client.Get(r.Ctx, util.ObjectKey(r.GCPCloudCreds), r.GCPCloudCreds)
1126+
if err == nil || meta.IsNoMatchError(err) || runtime.IsNotRegisteredError(err) {
1127+
return nil
1128+
}
1129+
if errors.IsNotFound(err) {
1130+
// credential request does not exist. create one
1131+
r.Logger.Info("Creating CredentialsRequest resource")
1132+
r.Own(r.GCPCloudCreds)
1133+
err = r.Client.Create(r.Ctx, r.GCPCloudCreds)
1134+
if err != nil {
1135+
r.Logger.Errorf("got error when trying to create credentials request for GCP. %v", err)
1136+
return err
1137+
}
1138+
return nil
1139+
}
1140+
return err
1141+
}
11441142

11451143
// ReconcileIBMCredentials sets IsIBMCloud to indicate operator is running in IBM Cloud
11461144
func (r *Reconciler) ReconcileIBMCredentials() error {

pkg/system/phase4_configuring.go

Lines changed: 95 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package system
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67
"net"
@@ -11,11 +12,9 @@ import (
1112
"strings"
1213
"time"
1314

14-
// TODO: once we have STS handle it
15-
// "context"
16-
// "encoding/json"
17-
_ "cloud.google.com/go/storage"
15+
"encoding/json"
1816

17+
"cloud.google.com/go/storage"
1918
"github.com/marstr/randname"
2019
nbv1 "github.com/noobaa/noobaa-operator/v5/pkg/apis/noobaa/v1alpha1"
2120
"github.com/noobaa/noobaa-operator/v5/pkg/bundle"
@@ -25,10 +24,7 @@ import (
2524
secv1 "github.com/openshift/api/security/v1"
2625
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
2726
"github.com/sirupsen/logrus"
28-
29-
// TODO: once we have STS handle it
30-
_ "google.golang.org/api/option"
31-
27+
"google.golang.org/api/option"
3228
corev1 "k8s.io/api/core/v1"
3329
"k8s.io/apimachinery/pkg/api/resource"
3430
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -54,10 +50,9 @@ const (
5450
serviceMonitorCAFile = "/etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt"
5551
)
5652

57-
// TODO: once we have STS handle it
58-
// type gcpAuthJSON struct {
59-
// ProjectID string `json:"project_id"`
60-
// }
53+
type gcpAuthJSON struct {
54+
ProjectID string `json:"project_id"`
55+
}
6156

6257
// ReconcilePhaseConfiguring runs the reconcile phase
6358
func (r *Reconciler) ReconcilePhaseConfiguring() error {
@@ -983,12 +978,11 @@ func (r *Reconciler) ReconcileDefaultBackingStore() error {
983978
if err := r.prepareAzureBackingStore(); err != nil {
984979
return err
985980
}
986-
// TODO: once we have STS handle it
987-
// } else if r.GCPCloudCreds.UID != "" {
988-
// log.Infof("CredentialsRequest %q created. creating default backing store on GCP objectstore", r.GCPCloudCreds.Name)
989-
// if err := r.prepareGCPBackingStore(); err != nil {
990-
// return err
991-
// }
981+
} else if r.GCPCloudCreds.UID != "" {
982+
log.Infof("CredentialsRequest %q created. creating default backing store on GCP objectstore", r.GCPCloudCreds.Name)
983+
if err := r.prepareGCPBackingStore(); err != nil {
984+
return err
985+
}
992986
} else if r.IBMCosBucketCreds.UID != "" {
993987
log.Infof("IBM objectstore credentials %q created. Creating default backing store on IBM objectstore", r.IBMCosBucketCreds.Name)
994988
if err := r.prepareIBMBackingStore(); err != nil {
@@ -1256,78 +1250,77 @@ func (r *Reconciler) prepareAzureBackingStore() error {
12561250
return nil
12571251
}
12581252

1259-
// TODO: once we have STS handle it
1260-
// func (r *Reconciler) prepareGCPBackingStore() error {
1261-
// secretName := r.GCPCloudCreds.Spec.SecretRef.Name
1262-
// cloudCredsSecret := &corev1.Secret{
1263-
// ObjectMeta: metav1.ObjectMeta{
1264-
// Name: secretName,
1265-
// Namespace: r.GCPCloudCreds.Spec.SecretRef.Namespace,
1266-
// },
1267-
// }
1268-
1269-
// util.KubeCheck(cloudCredsSecret)
1270-
// if cloudCredsSecret.UID == "" {
1271-
// // TODO: we need to figure out why secret is not created, and react accordingly
1272-
// // e.g. maybe we are running on AWS but our CredentialsRequest is for GCP
1273-
// r.Logger.Infof("Secret %q was not created yet by cloud-credentials operator. retry on next reconcile..", secretName)
1274-
1275-
// // in case we have a cred request but we do not get a secret
1276-
// if r.defaultBSCreationTimedout(r.GCPCloudCreds.CreationTimestamp.Time) {
1277-
// return r.fallbackToPVPoolWithEvent(nbv1.StoreTypeGoogleCloudStorage, secretName)
1278-
1279-
// }
1280-
// return fmt.Errorf("cloud credentials secret %q is not ready yet", secretName)
1281-
// }
1282-
// r.Logger.Infof("Secret %s was created successfully by cloud-credentials operator", secretName)
1283-
1284-
// util.KubeCheck(r.GCPBucketCreds)
1285-
// if r.GCPBucketCreds.UID == "" {
1286-
// r.GCPBucketCreds.StringData = cloudCredsSecret.StringData
1287-
// r.Own(r.GCPBucketCreds)
1288-
// if err := r.Client.Create(r.Ctx, r.GCPBucketCreds); err != nil {
1289-
// return fmt.Errorf("got error on GCPBucketCreds creation. error: %v", err)
1290-
// }
1291-
// }
1292-
// authJSON := &gcpAuthJSON{}
1293-
// err := json.Unmarshal([]byte(cloudCredsSecret.StringData["service_account.json"]), authJSON)
1294-
// if err != nil {
1295-
// fmt.Println("Failed to parse secret", err)
1296-
// return err
1297-
// }
1298-
// projectID := authJSON.ProjectID
1299-
// if r.GCPBucketCreds.StringData == nil {
1300-
// r.Logger.Infof("Secret %q does not contain a map of StringData yet. retry on next reconcile...", secretName)
1301-
// return fmt.Errorf("cloud credentials secret %q is not ready yet (does not contain a map of StringData yet)", secretName)
1302-
// }
1303-
// r.GCPBucketCreds.StringData["GoogleServiceAccountPrivateKeyJson"] = cloudCredsSecret.StringData["service_account.json"]
1304-
// ctx := context.Background()
1305-
// gcpclient, err := storage.NewClient(ctx, option.WithCredentialsJSON([]byte(cloudCredsSecret.StringData["service_account.json"])))
1306-
// if err != nil {
1307-
// r.Logger.Info(err)
1308-
// return err
1309-
// }
1310-
1311-
// var bucketName = strings.ToLower(randname.GenerateWithPrefix("noobaabucket", 5))
1312-
// if err := r.createGCPBucketForBackingStore(gcpclient, projectID, bucketName); err != nil {
1313-
// r.Logger.Info(err)
1314-
// return err
1315-
// }
1316-
1317-
// if errUpdate := r.Client.Update(r.Ctx, r.GCPBucketCreds); errUpdate != nil {
1318-
// return fmt.Errorf("got error on GCPBucketCreds update. error: %v", errUpdate)
1319-
// }
1320-
// // create backing store
1321-
// r.DefaultBackingStore.Spec.Type = nbv1.StoreTypeGoogleCloudStorage
1322-
// r.DefaultBackingStore.Spec.GoogleCloudStorage = &nbv1.GoogleCloudStorageSpec{
1323-
// TargetBucket: bucketName,
1324-
// Secret: corev1.SecretReference{
1325-
// Name: r.GCPBucketCreds.Name,
1326-
// Namespace: r.GCPBucketCreds.Namespace,
1327-
// },
1328-
// }
1329-
// return nil
1330-
// }
1253+
func (r *Reconciler) prepareGCPBackingStore() error {
1254+
secretName := r.GCPCloudCreds.Spec.SecretRef.Name
1255+
cloudCredsSecret := &corev1.Secret{
1256+
ObjectMeta: metav1.ObjectMeta{
1257+
Name: secretName,
1258+
Namespace: r.GCPCloudCreds.Spec.SecretRef.Namespace,
1259+
},
1260+
}
1261+
1262+
util.KubeCheck(cloudCredsSecret)
1263+
if cloudCredsSecret.UID == "" {
1264+
// TODO: we need to figure out why secret is not created, and react accordingly
1265+
// e.g. maybe we are running on AWS but our CredentialsRequest is for GCP
1266+
r.Logger.Infof("Secret %q was not created yet by cloud-credentials operator. retry on next reconcile..", secretName)
1267+
1268+
// in case we have a cred request but we do not get a secret
1269+
if r.defaultBSCreationTimedout(r.GCPCloudCreds.CreationTimestamp.Time) {
1270+
return r.fallbackToPVPoolWithEvent(nbv1.StoreTypeGoogleCloudStorage, secretName)
1271+
1272+
}
1273+
return fmt.Errorf("cloud credentials secret %q is not ready yet", secretName)
1274+
}
1275+
r.Logger.Infof("Secret %s was created successfully by cloud-credentials operator", secretName)
1276+
1277+
util.KubeCheck(r.GCPBucketCreds)
1278+
if r.GCPBucketCreds.UID == "" {
1279+
r.GCPBucketCreds.StringData = cloudCredsSecret.StringData
1280+
r.Own(r.GCPBucketCreds)
1281+
if err := r.Client.Create(r.Ctx, r.GCPBucketCreds); err != nil {
1282+
return fmt.Errorf("got error on GCPBucketCreds creation. error: %v", err)
1283+
}
1284+
}
1285+
authJSON := &gcpAuthJSON{}
1286+
err := json.Unmarshal([]byte(cloudCredsSecret.StringData["service_account.json"]), authJSON)
1287+
if err != nil {
1288+
fmt.Println("Failed to parse secret", err)
1289+
return err
1290+
}
1291+
projectID := authJSON.ProjectID
1292+
if r.GCPBucketCreds.StringData == nil {
1293+
r.Logger.Infof("Secret %q does not contain a map of StringData yet. retry on next reconcile...", secretName)
1294+
return fmt.Errorf("cloud credentials secret %q is not ready yet (does not contain a map of StringData yet)", secretName)
1295+
}
1296+
r.GCPBucketCreds.StringData["GoogleServiceAccountPrivateKeyJson"] = cloudCredsSecret.StringData["service_account.json"]
1297+
ctx := context.Background()
1298+
gcpclient, err := storage.NewClient(ctx, option.WithCredentialsJSON([]byte(cloudCredsSecret.StringData["service_account.json"])))
1299+
if err != nil {
1300+
r.Logger.Info(err)
1301+
return err
1302+
}
1303+
1304+
var bucketName = strings.ToLower(randname.GenerateWithPrefix("noobaabucket", 5))
1305+
if err := r.createGCPBucketForBackingStore(gcpclient, projectID, bucketName); err != nil {
1306+
r.Logger.Info(err)
1307+
return err
1308+
}
1309+
1310+
if errUpdate := r.Client.Update(r.Ctx, r.GCPBucketCreds); errUpdate != nil {
1311+
return fmt.Errorf("got error on GCPBucketCreds update. error: %v", errUpdate)
1312+
}
1313+
// create backing store
1314+
r.DefaultBackingStore.Spec.Type = nbv1.StoreTypeGoogleCloudStorage
1315+
r.DefaultBackingStore.Spec.GoogleCloudStorage = &nbv1.GoogleCloudStorageSpec{
1316+
TargetBucket: bucketName,
1317+
Secret: corev1.SecretReference{
1318+
Name: r.GCPBucketCreds.Name,
1319+
Namespace: r.GCPBucketCreds.Namespace,
1320+
},
1321+
}
1322+
return nil
1323+
}
13311324

13321325
func (r *Reconciler) prepareIBMBackingStore() error {
13331326
r.Logger.Info("Preparing backing store in IBM Cloud")
@@ -1430,19 +1423,18 @@ func (r *Reconciler) prepareIBMBackingStore() error {
14301423
return nil
14311424
}
14321425

1433-
// TODO: once we have STS handle it
1434-
// func (r *Reconciler) createGCPBucketForBackingStore(client *storage.Client, projectID, bucketName string) error {
1435-
// // [START create_bucket]
1436-
// ctx := context.Background()
1437-
//
1438-
// ctx, cancel := context.WithTimeout(ctx, time.Second*30)
1439-
// defer cancel()
1440-
// if err := client.Bucket(bucketName).Create(ctx, projectID, nil); err != nil {
1441-
// return err
1442-
// }
1443-
// // [END create_bucket]
1444-
// return nil
1445-
// }
1426+
func (r *Reconciler) createGCPBucketForBackingStore(client *storage.Client, projectID, bucketName string) error {
1427+
// [START create_bucket]
1428+
ctx := context.Background()
1429+
1430+
ctx, cancel := context.WithTimeout(ctx, time.Second*30)
1431+
defer cancel()
1432+
if err := client.Bucket(bucketName).Create(ctx, projectID, nil); err != nil {
1433+
return err
1434+
}
1435+
// [END create_bucket]
1436+
return nil
1437+
}
14461438

14471439
func (r *Reconciler) prepareCephBackingStore() error {
14481440
objectStoreUserName := r.CephObjectStoreUser.Name

0 commit comments

Comments
 (0)