Skip to content

Commit 2085073

Browse files
pooknullgithub-actions[bot]hors
authored
K8SPSMDB-968: fix .status.host for exposed replset (#1312)
* K8SPSMDB-968: fix `.status.host` for exposed replset https://jira.percona.com/browse/K8SPSMDB-968 * Update pkg/controller/perconaservermongodb/version_test.go Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * sort hosts and show cluster-ip hosts * set FQDNs to `.status.host` if exposed as `ClusterIP` --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Viacheslav Sarzhan <[email protected]>
1 parent f3f6e78 commit 2085073

File tree

10 files changed

+298
-107
lines changed

10 files changed

+298
-107
lines changed

pkg/controller/perconaservermongodb/connections_test.go

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"golang.org/x/sync/errgroup"
1212
appsv1 "k8s.io/api/apps/v1"
1313
corev1 "k8s.io/api/core/v1"
14-
"k8s.io/apimachinery/pkg/api/resource"
1514
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1615
"k8s.io/apimachinery/pkg/types"
1716
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -34,21 +33,6 @@ func TestConnectionLeaks(t *testing.T) {
3433
logf.SetLogger(zap.New(zap.WriteTo(io.Discard)))
3534
ctx := context.Background()
3635

37-
q, err := resource.ParseQuantity("1Gi")
38-
if err != nil {
39-
t.Fatal(err)
40-
}
41-
volumeSpec := &api.VolumeSpec{
42-
PersistentVolumeClaim: api.PVCSpec{
43-
PersistentVolumeClaimSpec: &corev1.PersistentVolumeClaimSpec{
44-
Resources: corev1.ResourceRequirements{
45-
Requests: map[corev1.ResourceName]resource.Quantity{
46-
corev1.ResourceStorage: q,
47-
},
48-
},
49-
},
50-
},
51-
}
5236
cr := &api.PerconaServerMongoDB{
5337
ObjectMeta: metav1.ObjectMeta{
5438
Name: "psmdb-mock",
@@ -65,7 +49,7 @@ func TestConnectionLeaks(t *testing.T) {
6549
{
6650
Name: "rs0",
6751
Size: 3,
68-
VolumeSpec: volumeSpec,
52+
VolumeSpec: fakeVolumeSpec(t),
6953
},
7054
},
7155
UpdateStrategy: api.SmartUpdateStatefulSetStrategyType,
@@ -103,7 +87,7 @@ func TestConnectionLeaks(t *testing.T) {
10387
cr.Spec.Sharding.Enabled = true
10488
cr.Spec.Sharding.ConfigsvrReplSet = &api.ReplsetSpec{
10589
Size: 3,
106-
VolumeSpec: volumeSpec,
90+
VolumeSpec: fakeVolumeSpec(t),
10791
}
10892
cr.Spec.Sharding.Mongos = &api.MongosSpec{
10993
Size: 3,
@@ -118,7 +102,7 @@ func TestConnectionLeaks(t *testing.T) {
118102
cr.Spec.Sharding.Enabled = true
119103
cr.Spec.Sharding.ConfigsvrReplSet = &api.ReplsetSpec{
120104
Size: 3,
121-
VolumeSpec: volumeSpec,
105+
VolumeSpec: fakeVolumeSpec(t),
122106
}
123107
cr.Spec.Sharding.Mongos = &api.MongosSpec{
124108
Size: 3,

pkg/controller/perconaservermongodb/mgo.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func (r *ReconcilePerconaServerMongoDB) updateConfigMembers(ctx context.Context,
255255
break
256256
}
257257

258-
host, err := psmdb.MongoHost(ctx, r.client, cr, rs.Name, rs.Expose.Enabled, pod)
258+
host, err := psmdb.MongoHost(ctx, r.client, cr, cr.Spec.ClusterServiceDNSMode, rs.Name, rs.Expose.Enabled, pod)
259259
if err != nil {
260260
return 0, fmt.Errorf("get host for pod %s: %v", pod.Name, err)
261261
}
@@ -513,7 +513,7 @@ func (r *ReconcilePerconaServerMongoDB) handleRsAddToShard(ctx context.Context,
513513
return errors.New("mongos pod is not ready")
514514
}
515515

516-
host, err := psmdb.MongoHost(ctx, r.client, cr, replset.Name, replset.Expose.Enabled, rspod)
516+
host, err := psmdb.MongoHost(ctx, r.client, cr, cr.Spec.ClusterServiceDNSMode, replset.Name, replset.Expose.Enabled, rspod)
517517
if err != nil {
518518
return errors.Wrapf(err, "get rsPod %s host", rspod.Name)
519519
}
@@ -564,7 +564,7 @@ func (r *ReconcilePerconaServerMongoDB) handleReplsetInit(ctx context.Context, c
564564

565565
log.Info("initiating replset", "replset", replsetName, "pod", pod.Name)
566566

567-
host, err := psmdb.MongoHost(ctx, r.client, cr, replset.Name, replset.Expose.Enabled, pod)
567+
host, err := psmdb.MongoHost(ctx, r.client, cr, cr.Spec.ClusterServiceDNSMode, replset.Name, replset.Expose.Enabled, pod)
568568
if err != nil {
569569
return fmt.Errorf("get host for the pod %s: %v", pod.Name, err)
570570
}

pkg/controller/perconaservermongodb/psmdb_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1178,7 +1178,7 @@ func (r *ReconcilePerconaServerMongoDB) reconcileMongos(ctx context.Context, cr
11781178

11791179
cfgInstances := make([]string, 0, len(cfgPods.Items)+len(cr.Spec.Sharding.ConfigsvrReplSet.ExternalNodes))
11801180
for _, pod := range cfgPods.Items {
1181-
host, err := psmdb.MongoHost(ctx, r.client, cr, api.ConfigReplSetName, false, pod)
1181+
host, err := psmdb.MongoHost(ctx, r.client, cr, cr.Spec.ClusterServiceDNSMode, api.ConfigReplSetName, false, pod)
11821182
if err != nil {
11831183
return errors.Wrapf(err, "get host for pod '%s'", pod.Name)
11841184
}

pkg/controller/perconaservermongodb/smart.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ func (r *ReconcilePerconaServerMongoDB) smartUpdate(ctx context.Context, cr *api
184184
func (r *ReconcilePerconaServerMongoDB) isPodPrimary(ctx context.Context, cr *api.PerconaServerMongoDB, pod corev1.Pod, rs *api.ReplsetSpec) (bool, error) {
185185
log := logf.FromContext(ctx)
186186

187-
host, err := psmdb.MongoHost(ctx, r.client, cr, rs.Name, rs.Expose.Enabled, pod)
187+
host, err := psmdb.MongoHost(ctx, r.client, cr, cr.Spec.ClusterServiceDNSMode, rs.Name, rs.Expose.Enabled, pod)
188188
if err != nil {
189189
return false, errors.Wrap(err, "failed to get mongo host")
190190
}

pkg/controller/perconaservermongodb/status.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package perconaservermongodb
33
import (
44
"context"
55
"fmt"
6+
"sort"
67
"strings"
78
"time"
89

@@ -369,11 +370,11 @@ func (r *ReconcilePerconaServerMongoDB) connectionEndpoint(ctx context.Context,
369370
if err != nil {
370371
return "", errors.Wrap(err, "get mongos addresses")
371372
}
373+
sort.Strings(addrs)
372374
return strings.Join(addrs, ","), nil
373375
}
374376

375-
if rs := cr.Spec.Replsets[0]; rs.Expose.Enabled &&
376-
rs.Expose.ExposeType == corev1.ServiceTypeLoadBalancer {
377+
if rs := cr.Spec.Replsets[0]; rs.Expose.Enabled && (rs.Expose.ExposeType == corev1.ServiceTypeLoadBalancer || rs.Expose.ExposeType == corev1.ServiceTypeClusterIP) {
377378
list := corev1.PodList{}
378379
err := r.client.List(ctx,
379380
&list,
@@ -391,14 +392,19 @@ func (r *ReconcilePerconaServerMongoDB) connectionEndpoint(ctx context.Context,
391392
if err != nil {
392393
return "", errors.Wrap(err, "list psmdb pods")
393394
}
394-
addrs, err := psmdb.GetReplsetAddrs(ctx, r.client, cr, rs.Name, rs.Expose.Enabled, list.Items)
395+
dnsMode := api.DNSModeInternal
396+
if rs.Expose.ExposeType == corev1.ServiceTypeLoadBalancer {
397+
dnsMode = api.DNSModeExternal
398+
}
399+
addrs, err := psmdb.GetReplsetAddrs(ctx, r.client, cr, dnsMode, rs.Name, rs.Expose.Enabled, list.Items)
395400
if err != nil {
396401
switch errors.Cause(err) {
397402
case psmdb.ErrNoIngressPoints, psmdb.ErrServiceNotExists:
398403
return "", nil
399404
}
400405
return "", errors.Wrap(err, "get replset addresses")
401406
}
407+
sort.Strings(addrs)
402408
return strings.Join(addrs, ","), nil
403409
}
404410

0 commit comments

Comments
 (0)