From d2a254d8b254b8f3d0a551aa06baf2bc4435dace Mon Sep 17 00:00:00 2001 From: sadath-12 Date: Sun, 26 Mar 2023 12:49:19 +0530 Subject: [PATCH] fixed:client connection --- .gitignore | 2 ++ controllers/mongodb_controller.go | 2 +- controllers/mongodbcluster_controller.go | 13 +++++---- controllers/mongodbuser_controller.go | 34 ++++++++++++++++++------ doc.txt | 5 +++- k8sgo/container.go | 19 ++++++------- k8sgo/mongo.go | 2 +- 7 files changed, 52 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 7027091..aa17a84 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ testbin/* *.swo *~ .hugo_build.lock + +doc.txt \ No newline at end of file diff --git a/controllers/mongodb_controller.go b/controllers/mongodb_controller.go index f29b09b..92d5733 100644 --- a/controllers/mongodb_controller.go +++ b/controllers/mongodb_controller.go @@ -66,7 +66,7 @@ func (r *MongoDBReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct return ctrl.Result{RequeueAfter: time.Second * 10}, err } - if instance.Spec.MongoDBMonitoring != nil { + if instance.Spec.MongoDBMonitoring != nil { if !k8sgo.CheckSecretExist(instance.Namespace, fmt.Sprintf("%s-%s", instance.ObjectMeta.Name, "standalone-monitoring")) { err = k8sgo.CreateMongoMonitoringSecret(instance) diff --git a/controllers/mongodbcluster_controller.go b/controllers/mongodbcluster_controller.go index 07abf53..c1b5024 100644 --- a/controllers/mongodbcluster_controller.go +++ b/controllers/mongodbcluster_controller.go @@ -59,7 +59,7 @@ func (r *MongoDBClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reque err = k8sgo.CreateMongoClusterMonitoringSecret(instance) if err != nil { return ctrl.Result{RequeueAfter: time.Second * 10}, err - } + } } err = k8sgo.CreateMongoClusterSetup(instance) if err != nil { @@ -87,10 +87,13 @@ func (r *MongoDBClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reque return ctrl.Result{RequeueAfter: time.Second * 10}, err } } - if !k8sgo.CheckMongoDBClusterMonitoringUser(instance) { - err = k8sgo.CreateMongoDBClusterMonitoringUser(instance) - if err != nil { - return ctrl.Result{RequeueAfter: time.Second * 10}, err + if instance.Spec.MongoDBMonitoring != nil { + + if !k8sgo.CheckMongoDBClusterMonitoringUser(instance) { + err = k8sgo.CreateMongoDBClusterMonitoringUser(instance) + if err != nil { + return ctrl.Result{RequeueAfter: time.Second * 10}, err + } } } return ctrl.Result{}, nil diff --git a/controllers/mongodbuser_controller.go b/controllers/mongodbuser_controller.go index 6f9cfea..591d66c 100644 --- a/controllers/mongodbuser_controller.go +++ b/controllers/mongodbuser_controller.go @@ -3,13 +3,13 @@ package controllers import ( "context" "fmt" + "strings" "time" opstreelabsinv1alpha1 "mongodb-operator/api/v1alpha1" k8sgo "mongodb-operator/k8sgo" mongoc "mongodb-operator/mongo" - "github.com/go-logr/logr" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "k8s.io/apimachinery/pkg/api/errors" @@ -22,7 +22,6 @@ import ( type MongoDBUserReconciler struct { client.Client Scheme *runtime.Scheme - Log logr.Logger } //+kubebuilder:rbac:groups=opstreelabs.in,resources=mongodbusers,verbs=get;list;watch;create;update;patch;delete @@ -39,7 +38,7 @@ type MongoDBUserReconciler struct { // For more details, check Reconcile and its Result here: // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.14.1/pkg/reconcile func (r *MongoDBUserReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - _ = r.Log.WithValues("mongodbuser", req.NamespacedName) + // _ = r.Log.WithValues("mongodbuser", req.NamespacedName) mongodbUser := &opstreelabsinv1alpha1.MongoDBUser{} mongodb := &opstreelabsinv1alpha1.MongoDB{} @@ -64,7 +63,7 @@ func (r *MongoDBUserReconciler) Reconcile(ctx context.Context, req ctrl.Request) err = r.Client.Get(context.TODO(), req.NamespacedName, mongodb) if err != nil { - + if errors.IsNotFound(err) { return ctrl.Result{RequeueAfter: time.Second * 10}, nil } @@ -73,7 +72,8 @@ func (r *MongoDBUserReconciler) Reconcile(ctx context.Context, req ctrl.Request) passwordParams := k8sgo.SecretsParameters{Name: mongodb.ObjectMeta.Name, Namespace: mongodb.Namespace, SecretName: *mongodb.Spec.MongoDBSecurity.SecretRef.Name, SecretKey: *mongodb.Spec.MongoDBSecurity.SecretRef.Key} password := k8sgo.GetMongoDBPassword(passwordParams) // mongoURL := "mongodb://" + mongodb.Spec.MongoDBSecurity.MongoDBAdminUser + ":", password, "@" - mongoURL := "mongodb://" + mongodb.Spec.MongoDBSecurity.MongoDBAdminUser + ":" + password + "@" + serviceName := fmt.Sprintf("%s-%s.%s", mongodb.ObjectMeta.Name, "standalone", mongodb.Namespace) + mongoURL := fmt.Sprintf("mongodb://%s:%s@%s:27017/", mongodb.Spec.MongoDBSecurity.MongoDBAdminUser, password, serviceName) params = mongoc.MongoDBParameters{ @@ -98,12 +98,30 @@ func (r *MongoDBUserReconciler) Reconcile(ctx context.Context, req ctrl.Request) } passwordParams := k8sgo.SecretsParameters{Name: mongodbCluster.ObjectMeta.Name, Namespace: mongodbCluster.Namespace, SecretName: *mongodbCluster.Spec.MongoDBSecurity.SecretRef.Name, SecretKey: *mongodbCluster.Spec.MongoDBSecurity.SecretRef.Key} password := k8sgo.GetMongoDBPassword(passwordParams) - // mongoURL := "mongodb://", mongodbCluster.Spec.MongoDBSecurity.MongoDBAdminUser, ":", password, "@" - mongoURL := "mongodb://" + mongodbCluster.Spec.MongoDBSecurity.MongoDBAdminUser + ":" + password + "@" + + mongoParams := mongoc.MongoDBParameters{ + Namespace: mongodbCluster.Namespace, + Name: mongodbCluster.ObjectMeta.Name, + UserName: &mongodbUser.Spec.User, + SetupType: "cluster", + } + + mongoURL := []string{"mongodb://", mongodbCluster.Spec.MongoDBSecurity.MongoDBAdminUser, ":", password, "@"} + for node := 0; node < int(*mongodbCluster.Spec.MongoDBClusterSize); node++ { + if node != int(*mongodbCluster.Spec.MongoDBClusterSize) { + mongoURL = append(mongoURL, fmt.Sprintf("%s,", mongoc.GetMongoNodeInfo(mongoParams, node))) + } else { + mongoURL = append(mongoURL, mongoc.GetMongoNodeInfo(mongoParams, node)) + } + } + mongoURL = append(mongoURL, fmt.Sprintf("/?replicaSet=%s", mongodbCluster.ObjectMeta.Name)) + mongoString := strings.Join(mongoURL, "") + + params = mongoc.MongoDBParameters{ - MongoURL: mongoURL, + MongoURL: mongoString, SetupType: "cluster", Namespace: mongodbUser.Namespace, Name: mongodbUser.Name, diff --git a/doc.txt b/doc.txt index 9567d2b..0c01096 100644 --- a/doc.txt +++ b/doc.txt @@ -2,4 +2,7 @@ pkill -u $(whoami) -o --signal SIGKILL -f "rss > 1000000" pkill -u $(whoami) -o --signal SIGKILL -f "cpu_usage_percentage > 50" -https://www.mongodb.com/docs/v6.0/reference/command/replSetInitiate/#mongodb-dbcommand-dbcmd.replSetInitiate \ No newline at end of file +https://www.mongodb.com/docs/v6.0/reference/command/replSetInitiate/#mongodb-dbcommand-dbcmd.replSetInitiate + +add ur own cluster image +check how monitoring is working here \ No newline at end of file diff --git a/k8sgo/container.go b/k8sgo/container.go index 6317615..5abff92 100644 --- a/k8sgo/container.go +++ b/k8sgo/container.go @@ -78,15 +78,16 @@ func getEnvironmentVariables(params containerParameters) []corev1.EnvVar { if params.SecretName != nil && params.MongoDBUser != nil { envVars = []corev1.EnvVar{ { - Name: "MONGO_ROOT_PASSWORD", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: *params.SecretName, - }, - Key: *params.SecretKey, - }, - }, + Name: "MONGO_ROOT_PASSWORD", + Value: "password", + // ValueFrom: &corev1.EnvVarSource{ + // SecretKeyRef: &corev1.SecretKeySelector{ + // LocalObjectReference: corev1.LocalObjectReference{ + // Name: *params.SecretName, + // }, + // Key: *params.SecretKey, + // }, + // }, }, { Name: "MONGO_ROOT_USERNAME", diff --git a/k8sgo/mongo.go b/k8sgo/mongo.go index b24a023..14acbe6 100644 --- a/k8sgo/mongo.go +++ b/k8sgo/mongo.go @@ -141,7 +141,7 @@ func CheckMongoDBClusterMonitoringUser(cr *opstreelabsinv1alpha1.MongoDBCluster) // CheckMonitoringUser is a method to check if monitoring user exists in MongoDB func CheckMonitoringUser(cr *opstreelabsinv1alpha1.MongoDB) bool { logger := logGenerator(cr.ObjectMeta.Name, cr.Namespace, "MongoDB Monitoring User") - serviceName := fmt.Sprintf("%s-%s.%s", cr.ObjectMeta.Name, "standalone", cr.Namespace) + serviceName := fmt.Sprintf("%s-%s.%s", cr.ObjectMeta.Name, "standalone", cr.Namespace) passwordParams := SecretsParameters{Name: cr.ObjectMeta.Name, Namespace: cr.Namespace, SecretName: *cr.Spec.MongoDBSecurity.SecretRef.Name, SecretKey: *cr.Spec.MongoDBSecurity.SecretRef.Key} password := GetMongoDBPassword(passwordParams) monitoringUser := "monitoring"