2024-05-15 05:56:21 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2024-05-21 10:21:49 +00:00
|
|
|
"context"
|
2024-05-27 08:02:05 +00:00
|
|
|
"time"
|
2024-05-15 05:56:21 +00:00
|
|
|
"fmt"
|
2024-05-27 09:04:43 +00:00
|
|
|
"log"
|
2024-05-21 10:21:49 +00:00
|
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
2024-05-27 08:02:05 +00:00
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
2024-05-15 05:56:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func initReplMongo() {
|
2024-05-21 10:21:49 +00:00
|
|
|
|
2024-05-27 09:04:43 +00:00
|
|
|
if *localIpPtr{
|
2024-05-21 10:21:49 +00:00
|
|
|
|
2024-05-27 09:04:43 +00:00
|
|
|
ips, err := GetLocalIPs()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
|
|
defer cancel()
|
|
|
|
|
|
|
|
// Create a new replica set client
|
2024-05-27 10:12:31 +00:00
|
|
|
uri := fmt.Sprintf("mongodb://%s:%s@localhost:30000/?directConnection=true", mongoInitdbRootUsername, mongoInitdbRootPassword)
|
|
|
|
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
|
2024-05-27 09:04:43 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2024-05-21 10:21:49 +00:00
|
|
|
|
2024-05-27 09:04:43 +00:00
|
|
|
db := client.Database("admin")
|
|
|
|
|
|
|
|
members := make([]bson.M, numberOfContainers)
|
|
|
|
for i := 0; i < numberOfContainers; i++ {
|
|
|
|
members[i] = bson.M{
|
|
|
|
"_id": i,
|
2024-05-27 10:12:31 +00:00
|
|
|
"host": fmt.Sprintf("%s:%d", ips[0], 30000+i),
|
2024-05-27 09:04:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
config := bson.M{
|
|
|
|
"_id": replicasetName,
|
|
|
|
"members": members,
|
|
|
|
}
|
|
|
|
|
|
|
|
if *verbosePtr{
|
|
|
|
fmt.Println(config)
|
|
|
|
}
|
|
|
|
|
|
|
|
command := bson.D{{"replSetInitiate", config}}
|
|
|
|
var result bson.M
|
|
|
|
err = db.RunCommand(context.TODO(), command).Decode(&result)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
client.Disconnect(ctx)
|
|
|
|
} else {
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
|
|
defer cancel()
|
|
|
|
|
|
|
|
// Create a new replica set client
|
2024-05-27 10:12:31 +00:00
|
|
|
uri := fmt.Sprintf("mongodb://%s:%s@localhost:30000/?directConnection=true", mongoInitdbRootUsername, mongoInitdbRootPassword)
|
|
|
|
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
|
2024-05-27 09:04:43 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
db := client.Database("admin")
|
|
|
|
|
|
|
|
members := make([]bson.M, numberOfContainers)
|
|
|
|
for i := 0; i < numberOfContainers; i++ {
|
|
|
|
members[i] = bson.M{
|
|
|
|
"_id": i,
|
|
|
|
"host": fmt.Sprintf("mongo%d", i),
|
|
|
|
}
|
2024-05-21 10:21:49 +00:00
|
|
|
}
|
|
|
|
|
2024-05-27 09:04:43 +00:00
|
|
|
config := bson.M{
|
|
|
|
"_id": replicasetName,
|
|
|
|
"members": members,
|
|
|
|
}
|
|
|
|
|
|
|
|
if *verbosePtr{
|
|
|
|
fmt.Println(config)
|
|
|
|
}
|
|
|
|
|
|
|
|
command := bson.D{{"replSetInitiate", config}}
|
|
|
|
var result bson.M
|
|
|
|
err = db.RunCommand(context.TODO(), command).Decode(&result)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
client.Disconnect(ctx)
|
2024-05-21 10:21:49 +00:00
|
|
|
}
|
2024-05-15 05:56:21 +00:00
|
|
|
}
|