Skip to content

Commit 98c17f8

Browse files
author
Peng Zhou
committed
MLE-22946: Fix the bug of cluster level labels propagate from other cluster.
1 parent 643f3ee commit 98c17f8

File tree

11 files changed

+121
-95
lines changed

11 files changed

+121
-95
lines changed

pkg/k8sutil/common.go

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ import (
99
"sigs.k8s.io/controller-runtime/pkg/client"
1010
)
1111

12-
var CustomLabels = map[string]string{}
13-
var CustomAnnotations = map[string]string{}
14-
1512
// generateTypeMeta generates the TyeMeta
1613
func generateTypeMeta(resourceKind string, apiVersion string) metav1.TypeMeta {
1714
return metav1.TypeMeta{
@@ -49,15 +46,6 @@ func LabelSelectors(labels map[string]string) *metav1.LabelSelector {
4946
return &metav1.LabelSelector{MatchLabels: labels}
5047
}
5148

52-
func SetCommonLabels(labels map[string]string) {
53-
CustomLabels = labels
54-
}
55-
56-
func SetCommonAnnotations(annotations map[string]string) {
57-
delete(annotations, "kubectl.kubernetes.io/last-applied-configuration")
58-
CustomAnnotations = annotations
59-
}
60-
6149
func getSelectorLabels(name string) map[string]string {
6250
selectorLabels := map[string]string{
6351
"app.kubernetes.io/name": "marklogic",
@@ -78,46 +66,6 @@ func getHAProxySelectorLabels(name string) map[string]string {
7866
return selectorLabels
7967
}
8068

81-
func getHAProxyLabels(name string) map[string]string {
82-
defaultHaproxyLabels := getHAProxySelectorLabels(name)
83-
mergedLabels := map[string]string{}
84-
if len(CustomLabels) > 0 {
85-
for k, v := range defaultHaproxyLabels {
86-
mergedLabels[k] = v
87-
}
88-
for k, v := range CustomLabels {
89-
if _, ok := defaultHaproxyLabels[k]; !ok {
90-
mergedLabels[k] = v
91-
}
92-
}
93-
} else {
94-
return defaultHaproxyLabels
95-
}
96-
return mergedLabels
97-
}
98-
99-
func getCommonLabels(name string) map[string]string {
100-
defaultLabels := getSelectorLabels(name)
101-
mergedLabels := map[string]string{}
102-
if len(CustomLabels) > 0 {
103-
for k, v := range defaultLabels {
104-
mergedLabels[k] = v
105-
}
106-
for k, v := range CustomLabels {
107-
if _, ok := defaultLabels[k]; !ok {
108-
mergedLabels[k] = v
109-
}
110-
}
111-
} else {
112-
return defaultLabels
113-
}
114-
return mergedLabels
115-
}
116-
117-
func getCommonAnnotations() map[string]string {
118-
return CustomAnnotations
119-
}
120-
12169
func getFluentBitLabels(name string) map[string]string {
12270
return map[string]string{
12371
"app.kubernetes.io/name": "fluent-bit",

pkg/k8sutil/configmap.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ func (oc *OperatorContext) ReconcileConfigMap() result.ReconcileResult {
1919
cr := oc.MarklogicGroup
2020

2121
logger.Info("Reconciling MarkLogic ConfigMap")
22-
labels := getCommonLabels(cr.Spec.Name)
23-
annotations := getCommonAnnotations()
22+
labels := oc.GetOperatorLabels(cr.Spec.Name)
23+
annotations := oc.GetOperatorAnnotations()
2424
configMapName := cr.Spec.Name + "-scripts"
2525
objectMeta := generateObjectMeta(configMapName, cr.Namespace, labels, annotations)
2626
nsName := types.NamespacedName{Name: objectMeta.Name, Namespace: objectMeta.Namespace}

pkg/k8sutil/context.go

Lines changed: 96 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,23 @@ import (
1515
)
1616

1717
type OperatorContext struct {
18-
Ctx context.Context
19-
18+
Ctx context.Context
19+
Labels map[string]string
20+
Annotations map[string]string
2021
Request *reconcile.Request
2122
Client controllerClient.Client
2223
Scheme *runtime.Scheme
2324
MarklogicGroup *marklogicv1.MarklogicGroup
2425
ReqLogger logr.Logger
2526
Recorder record.EventRecorder
26-
27-
Services []*corev1.Service
28-
StatefulSets []*appsv1.StatefulSet
27+
Services []*corev1.Service
28+
StatefulSets []*appsv1.StatefulSet
2929
}
3030

3131
type ClusterContext struct {
32-
Ctx context.Context
33-
32+
Ctx context.Context
33+
Labels map[string]string
34+
Annotations map[string]string
3435
Request *reconcile.Request
3536
Client controllerClient.Client
3637
Scheme *runtime.Scheme
@@ -57,17 +58,16 @@ func CreateOperatorContext(
5758
oc.Scheme = scheme
5859
oc.ReqLogger = reqLogger
5960
oc.Recorder = rec
61+
oc.Labels = map[string]string{}
62+
oc.Annotations = map[string]string{}
6063
mlg := &marklogicv1.MarklogicGroup{}
6164
if err := retrieveMarkLogicGroup(oc, request, mlg); err != nil {
6265
oc.ReqLogger.Error(err, "Failed to retrieve MarkLogicServer")
6366
return nil, err
6467
}
65-
// if err := retrieveMarklogicCluster(oc, request, mlc); err != nil {
66-
// oc.ReqLogger.Error(err, "Failed to retrieve MarkLogicCluster")
67-
// return nil, err
68-
// }
6968
oc.MarklogicGroup = mlg
70-
// oc.MarklogicCluster = mlc
69+
oc.SetOperatorLabels(oc.MarklogicGroup.GetLabels())
70+
oc.SetOperatorAnnotations(oc.MarklogicGroup.GetAnnotations())
7171

7272
oc.ReqLogger.Info("==== CreateOperatorContext")
7373

@@ -92,14 +92,16 @@ func CreateClusterContext(
9292
cc.Scheme = scheme
9393
cc.ReqLogger = reqLogger
9494
cc.Recorder = rec
95+
cc.Labels = map[string]string{}
96+
cc.Annotations = map[string]string{}
9597
mlc := &marklogicv1.MarklogicCluster{}
96-
9798
if err := retrieveMarklogicCluster(cc, request, mlc); err != nil {
9899
cc.ReqLogger.Error(err, "Failed to retrieve MarkLogicCluster")
99100
return nil, err
100101
}
101102
cc.MarklogicCluster = mlc
102-
103+
cc.SetClusterLabels(cc.MarklogicCluster.GetLabels())
104+
cc.SetClusterAnnotations(cc.MarklogicCluster.GetAnnotations())
103105
cc.ReqLogger.Info("==== CreateOperatorContext")
104106

105107
// cc.ReqLogger = cc.ReqLogger.WithValues("ML server name")
@@ -137,3 +139,83 @@ func (oc *OperatorContext) GetClient() controllerClient.Client {
137139
func (oc *OperatorContext) GetContext() context.Context {
138140
return oc.Ctx
139141
}
142+
143+
func (cc *ClusterContext) GetClusterLabels(name string) map[string]string {
144+
defaultLabels := getSelectorLabels(name)
145+
mergedLabels := map[string]string{}
146+
if len(cc.Labels) > 0 {
147+
for k, v := range defaultLabels {
148+
mergedLabels[k] = v
149+
}
150+
for k, v := range cc.Labels {
151+
if _, ok := defaultLabels[k]; !ok {
152+
mergedLabels[k] = v
153+
}
154+
}
155+
} else {
156+
return defaultLabels
157+
}
158+
return mergedLabels
159+
}
160+
161+
func (cc *ClusterContext) GetHAProxyLabels(name string) map[string]string {
162+
defaultHaproxyLabels := getHAProxySelectorLabels(name)
163+
mergedLabels := map[string]string{}
164+
if len(cc.Labels) > 0 {
165+
for k, v := range defaultHaproxyLabels {
166+
mergedLabels[k] = v
167+
}
168+
for k, v := range cc.Labels {
169+
if _, ok := defaultHaproxyLabels[k]; !ok {
170+
mergedLabels[k] = v
171+
}
172+
}
173+
} else {
174+
return defaultHaproxyLabels
175+
}
176+
return mergedLabels
177+
}
178+
179+
func (cc *ClusterContext) GetClusterAnnotations() map[string]string {
180+
return cc.Annotations
181+
}
182+
183+
func (cc *ClusterContext) SetClusterLabels(labels map[string]string) {
184+
cc.Labels = labels
185+
}
186+
187+
func (cc *ClusterContext) SetClusterAnnotations(annotations map[string]string) {
188+
delete(annotations, "kubectl.kubernetes.io/last-applied-configuration")
189+
cc.Annotations = annotations
190+
}
191+
192+
func (oc *OperatorContext) GetOperatorLabels(name string) map[string]string {
193+
defaultLabels := getSelectorLabels(name)
194+
mergedLabels := map[string]string{}
195+
if len(oc.Labels) > 0 {
196+
for k, v := range defaultLabels {
197+
mergedLabels[k] = v
198+
}
199+
for k, v := range oc.Labels {
200+
if _, ok := defaultLabels[k]; !ok {
201+
mergedLabels[k] = v
202+
}
203+
}
204+
} else {
205+
return defaultLabels
206+
}
207+
return mergedLabels
208+
}
209+
210+
func (oc *OperatorContext) GetOperatorAnnotations() map[string]string {
211+
return oc.Annotations
212+
}
213+
214+
func (oc *OperatorContext) SetOperatorLabels(labels map[string]string) {
215+
oc.Labels = labels
216+
}
217+
218+
func (oc *OperatorContext) SetOperatorAnnotations(annotations map[string]string) {
219+
delete(annotations, "kubectl.kubernetes.io/last-applied-configuration")
220+
oc.Annotations = annotations
221+
}

pkg/k8sutil/haProxy.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ func (cc *ClusterContext) ReconcileHAProxy() result.ReconcileResult {
2424

2525
logger.Info("Reconciling HAProxy Config")
2626

27-
labels := getHAProxyLabels(cr.GetObjectMeta().GetName())
28-
annotations := getCommonAnnotations()
27+
labels := cc.GetHAProxyLabels(cr.GetObjectMeta().GetName())
28+
annotations := cc.GetClusterAnnotations()
2929
configMapName := "marklogic-haproxy"
3030
objectMeta := generateObjectMeta(configMapName, cr.Namespace, labels, annotations)
3131
nsName := types.NamespacedName{Name: objectMeta.Name, Namespace: objectMeta.Namespace}
@@ -363,7 +363,7 @@ func (cc *ClusterContext) generateHaproxyServiceDef(meta metav1.ObjectMeta) *cor
363363
Port: cr.Spec.HAProxy.Stats.Port,
364364
})
365365
}
366-
selectorLabels := getHAProxyLabels(cr.GetObjectMeta().GetName())
366+
selectorLabels := getHAProxySelectorLabels(cr.GetObjectMeta().GetName())
367367
serviceDef := &corev1.Service{
368368
ObjectMeta: metav1.ObjectMeta{
369369
Name: "marklogic-haproxy",

pkg/k8sutil/handler.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ func (oc *OperatorContext) ReconsileMarklogicGroupHandler() (reconcile.Result, e
2828
}
2929

3030
func (cc *ClusterContext) ReconsileMarklogicClusterHandler() (reconcile.Result, error) {
31-
SetCommonAnnotations(cc.MarklogicCluster.GetAnnotations())
32-
SetCommonLabels(cc.MarklogicCluster.GetLabels())
3331
if result := cc.ReconcileServiceAccount(); result.Completed() {
3432
return result.Output()
3533
}

pkg/k8sutil/ingress.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ func (cc *ClusterContext) getIngress(namespace string, ingressName string) (*net
7272
return ingress, nil
7373
}
7474

75-
func generateIngress(ingressName string, cr *marklogicv1.MarklogicCluster) *networkingv1.Ingress {
76-
labels := getCommonLabels(cr.GetObjectMeta().GetName())
75+
func (cc *ClusterContext) generateIngress(ingressName string, cr *marklogicv1.MarklogicCluster) *networkingv1.Ingress {
76+
labels := cc.GetClusterLabels(cr.GetObjectMeta().GetName())
7777
annotations := cr.Spec.HAProxy.Ingress.Annotations
7878
ingressObjectMeta := generateObjectMeta(ingressName, cr.Namespace, labels, annotations)
7979
ingress := generateIngressDef(ingressObjectMeta, marklogicClusterAsOwner(cr), cr)
@@ -87,7 +87,7 @@ func (cc *ClusterContext) ReconcileIngress() result.ReconcileResult {
8787
cr := cc.MarklogicCluster
8888
ingressName := cr.ObjectMeta.Name
8989
currentIngress, err := cc.getIngress(cr.Namespace, ingressName)
90-
ingressDef := generateIngress(ingressName, cr)
90+
ingressDef := cc.generateIngress(ingressName, cr)
9191
if err != nil {
9292
if errors.IsNotFound(err) {
9393
logger.Info("MarkLogic Ingress not found, creating a new one")
@@ -133,7 +133,7 @@ func (cc *ClusterContext) createIngress(namespace string) error {
133133
client := cc.Client
134134
cr := cc.MarklogicCluster
135135
ingressName := cr.ObjectMeta.Name + "-ingress"
136-
ingress := generateIngress(ingressName, cr)
136+
ingress := cc.generateIngress(ingressName, cr)
137137
err := client.Create(cc.Ctx, ingress)
138138
if err != nil {
139139
logger.Error(err, "MarkLogic ingress creation has failed")

pkg/k8sutil/marklogicServer.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ func MarkLogicGroupLogger(namespace string, name string) logr.Logger {
8686
return reqLogger
8787
}
8888

89-
func GenerateMarkLogicGroupDef(cr *marklogicv1.MarklogicCluster, index int, params *MarkLogicGroupParameters) *marklogicv1.MarklogicGroup {
89+
func (cc *ClusterContext) GenerateMarkLogicGroupDef(cr *marklogicv1.MarklogicCluster, index int, params *MarkLogicGroupParameters) *marklogicv1.MarklogicGroup {
9090
logger := MarkLogicGroupLogger(cr.Namespace, cr.ObjectMeta.Name)
9191
logger.Info("ReconcileMarkLogicCluster")
92-
labels := getCommonLabels(cr.ObjectMeta.Name)
93-
annotations := getCommonAnnotations()
92+
labels := cc.GetClusterLabels(cr.ObjectMeta.Name)
93+
annotations := cc.GetClusterAnnotations()
9494
if params.Labels != nil {
9595
for key, value := range params.Labels {
9696
labels[key] = value
@@ -172,7 +172,7 @@ func (cc *ClusterContext) ReconsileMarklogicCluster() (reconcile.Result, error)
172172
namespacedName := types.NamespacedName{Name: name, Namespace: namespace}
173173
clusterParams := generateMarkLogicClusterParams(cr)
174174
params := generateMarkLogicGroupParams(cr, i, clusterParams)
175-
markLogicGroupDef := GenerateMarkLogicGroupDef(operatorCR, i, params)
175+
markLogicGroupDef := cc.GenerateMarkLogicGroupDef(operatorCR, i, params)
176176
err := cc.Client.Get(cc.Ctx, namespacedName, currentMlg)
177177
if err != nil {
178178
if apierrors.IsNotFound(err) {

pkg/k8sutil/networkPolicy.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ func (cc *ClusterContext) getNetworkPolicy(namespace string, networkPolicyName s
4444
return networkPolicy, nil
4545
}
4646

47-
func generateNetworkPolicy(networkPolicyName string, cr *marklogicv1.MarklogicCluster) *networkingv1.NetworkPolicy {
48-
labels := getCommonLabels(cr.GetObjectMeta().GetName())
49-
annotations := getCommonAnnotations()
47+
func (cc *ClusterContext) generateNetworkPolicy(networkPolicyName string, cr *marklogicv1.MarklogicCluster) *networkingv1.NetworkPolicy {
48+
labels := cc.GetClusterLabels(cr.GetObjectMeta().GetName())
49+
annotations := cc.GetClusterAnnotations()
5050
netObjectMeta := generateObjectMeta(networkPolicyName, cr.Namespace, labels, annotations)
5151
networkPolicy := generateNetworkPolicyDef(netObjectMeta, marklogicClusterAsOwner(cr), cr)
5252
return networkPolicy
@@ -59,7 +59,7 @@ func (cc *ClusterContext) ReconcileNetworkPolicy() result.ReconcileResult {
5959
cr := cc.MarklogicCluster
6060
networkPolicyName := cr.ObjectMeta.Name
6161
currentNetworkPolicy, err := cc.getNetworkPolicy(cr.Namespace, networkPolicyName)
62-
networkPolicyDef := generateNetworkPolicy(networkPolicyName, cr)
62+
networkPolicyDef := cc.generateNetworkPolicy(networkPolicyName, cr)
6363
if err != nil {
6464
if errors.IsNotFound(err) {
6565
logger.Info("MarkLogic NetworkPolicy not found, creating a new one")

pkg/k8sutil/secret.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ func (cc *ClusterContext) ReconcileSecret() result.ReconcileResult {
1919
}
2020

2121
logger.Info("Reconciling MarkLogic Secret")
22-
labels := getCommonLabels(mlc.ObjectMeta.Name)
23-
annotations := getCommonAnnotations()
22+
labels := cc.GetClusterLabels(mlc.ObjectMeta.Name)
23+
annotations := cc.GetClusterAnnotations()
2424
secretName := mlc.ObjectMeta.Name + "-admin"
2525
objectMeta := generateObjectMeta(secretName, mlc.Namespace, labels, annotations)
2626
nsName := types.NamespacedName{Name: objectMeta.Name, Namespace: objectMeta.Namespace}

pkg/k8sutil/service.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,11 @@ func generateServiceDef(serviceMeta metav1.ObjectMeta, ownerRef metav1.OwnerRefe
9595
return service
9696
}
9797

98-
func generateService(svcName string, cr *marklogicv1.MarklogicGroup) *corev1.Service {
99-
labels := getCommonLabels(cr.Spec.Name)
98+
func (oc *OperatorContext) generateService(svcName string, cr *marklogicv1.MarklogicGroup) *corev1.Service {
99+
labels := oc.GetOperatorLabels(cr.Spec.Name)
100100
groupLabels := cr.Spec.Labels
101-
if groupLabels != nil {
102-
for key, value := range groupLabels {
103-
labels[key] = value
104-
}
101+
for key, value := range groupLabels {
102+
labels[key] = value
105103
}
106104
var svcParams serviceParameters = serviceParameters{}
107105
svcParams = generateServiceParams(cr)
@@ -122,7 +120,7 @@ func (oc *OperatorContext) ReconcileServices() result.ReconcileResult {
122120
for _, service := range services {
123121
svcNsName := types.NamespacedName{Name: service, Namespace: cr.Namespace}
124122
err := client.Get(oc.Ctx, svcNsName, currentSvc)
125-
svcDef := generateService(service, cr)
123+
svcDef := oc.generateService(service, cr)
126124
if err != nil {
127125
if errors.IsNotFound(err) {
128126
logger.Info("MarkLogic service not found, creating a new one")

0 commit comments

Comments
 (0)