Skip to content

Commit 74584b6

Browse files
committed
fix: postgres service moved to DR mnager
1 parent 7c3db5f commit 74584b6

1 file changed

Lines changed: 105 additions & 0 deletions

File tree

pkg/disasterrecovery/server.go

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,14 @@ import (
2525
"github.com/Netcracker/pgskipper-operator/pkg/util"
2626
"go.uber.org/zap"
2727
corev1 "k8s.io/api/core/v1"
28+
"k8s.io/apimachinery/pkg/api/errors"
29+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2830
"k8s.io/apimachinery/pkg/types"
31+
"k8s.io/apimachinery/pkg/util/intstr"
2932
)
3033

34+
const operatorName = "postgres-operator"
35+
3136
var (
3237
log = util.GetLogger()
3338
namespace = util.GetNameSpace()
@@ -81,6 +86,9 @@ func InitDRManager() {
8186
if err := util.ExecuteWithRetries(pgManager.setStatus); err != nil {
8287
log.Warn("not able to set SM status with retries, ", zap.Error(err))
8388
}
89+
if err := ensureOperatorService(helper); err != nil {
90+
log.Error("Can not ensure operator service", zap.Error(err))
91+
}
8492

8593
// Check if status running, then operator was restarted while site manager status was running, we decide to fail it
8694
if cr.Status.SiteManagerStatus.Status == "running" {
@@ -97,6 +105,103 @@ func InitDRManager() {
97105
http.Handle("/pre-configure", helper.Middleware(http.HandlerFunc(pgManager.processPreConfigureRequest)))
98106
}
99107

108+
func ensureOperatorService(helper *k8sHelper.Helper) error {
109+
client, _ := util.GetClient()
110+
namespace := util.GetNameSpace()
111+
112+
oServ := &corev1.Service{}
113+
err := client.Get(context.Background(), types.NamespacedName{
114+
Name: operatorName, Namespace: namespace,
115+
}, oServ)
116+
if err != nil {
117+
if errors.IsNotFound(err) {
118+
// this is almost copy 'n paste of /operator-framework/operator-sdk@v0.8.0/pkg/metrics/metrics.go#initOperatorService
119+
// but this does not set ownerReference to the service
120+
// hence we do not need finalizers rights
121+
log.Info("Operator service not found, creating new one.")
122+
oServ = getOperatorService(operatorName, namespace)
123+
if err = helper.CreateServiceIfNotExists(oServ); err != nil {
124+
log.Error(fmt.Sprintf("can't create service: %s", operatorName), zap.Error(err))
125+
return err
126+
}
127+
} else {
128+
log.Error("can't get operator service", zap.Error(err))
129+
return err
130+
}
131+
return err
132+
}
133+
for _, port := range oServ.Spec.Ports {
134+
// checking if site manager already exists
135+
if port.Name == "site-manager" || port.Port == 8080 {
136+
log.Info("Site manager port exists, no need to update, exiting.")
137+
return nil
138+
}
139+
}
140+
oServ.Spec.Ports = append(oServ.Spec.Ports, corev1.ServicePort{
141+
Name: "site-manager",
142+
Protocol: corev1.ProtocolTCP,
143+
Port: 8080,
144+
TargetPort: intstr.IntOrString{
145+
Type: intstr.Int,
146+
IntVal: 8080,
147+
},
148+
})
149+
150+
if err = client.Update(context.TODO(), oServ); err != nil {
151+
log.Error(fmt.Sprintf("can't update service: %s", operatorName), zap.Error(err))
152+
return err
153+
}
154+
155+
return nil
156+
}
157+
158+
func getOperatorService(operatorName string, namespace string) *corev1.Service {
159+
label := map[string]string{"name": operatorName}
160+
return &corev1.Service{
161+
ObjectMeta: metav1.ObjectMeta{
162+
Name: operatorName,
163+
Namespace: namespace,
164+
Labels: label,
165+
},
166+
TypeMeta: metav1.TypeMeta{
167+
Kind: "Service",
168+
APIVersion: "v1",
169+
},
170+
Spec: corev1.ServiceSpec{
171+
Ports: []corev1.ServicePort{
172+
{
173+
Port: 8383,
174+
Protocol: corev1.ProtocolTCP,
175+
TargetPort: intstr.IntOrString{
176+
Type: intstr.Int,
177+
IntVal: 8383,
178+
},
179+
Name: "metrics",
180+
},
181+
{
182+
Port: 8080,
183+
Protocol: corev1.ProtocolTCP,
184+
TargetPort: intstr.IntOrString{
185+
Type: intstr.Int,
186+
IntVal: 8080,
187+
},
188+
Name: "site-manager",
189+
},
190+
{
191+
Port: 8443,
192+
Protocol: corev1.ProtocolTCP,
193+
TargetPort: intstr.IntOrString{
194+
Type: intstr.Int,
195+
IntVal: 8443,
196+
},
197+
Name: "web-tls",
198+
},
199+
},
200+
Selector: label,
201+
},
202+
}
203+
}
204+
100205
func getCloudSqlCm(helper *k8sHelper.Helper) *corev1.ConfigMap {
101206
cloudSqlCm, err := helper.GetConfigMap("cloud-sql-configuration")
102207
if err != nil {

0 commit comments

Comments
 (0)