Skip to content

Commit 8451b7f

Browse files
authored
Enhancement on EnsureLabels function (#2446)
* add debug logs Signed-off-by: Allen Li <liyuchen223@gmail.com> * update ensure labels and add additional checks Signed-off-by: Allen Li <liyuchen223@gmail.com> * add update permission to issuers Signed-off-by: Allen Li <liyuchen223@gmail.com> * revert test log and registry Signed-off-by: Allen Li <liyuchen223@gmail.com> * remove repeat checks Signed-off-by: Allen Li <liyuchen223@gmail.com> * skip if input resource is empty Signed-off-by: Allen Li <liyuchen223@gmail.com> --------- Signed-off-by: Allen Li <liyuchen223@gmail.com>
1 parent 4a24ead commit 8451b7f

File tree

6 files changed

+32
-19
lines changed

6 files changed

+32
-19
lines changed

bundle/manifests/ibm-common-service-operator.clusterserviceversion.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,7 @@ spec:
455455
- get
456456
- list
457457
- watch
458+
- update
458459
- apiGroups:
459460
- apps
460461
resources:

config/ibm-common-service-operator.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,7 @@ rules:
388388
- get
389389
- list
390390
- watch
391+
- update
391392
- apiGroups:
392393
- apps
393394
resources:

config/rbac/role.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ rules:
114114
- get
115115
- list
116116
- watch
117+
- update
117118
- apiGroups:
118119
- apps
119120
resources:

helm/templates/rbac.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ rules:
8080
- get
8181
- list
8282
- watch
83+
- update
8384
- apiGroups:
8485
- apps
8586
resources:

internal/controller/bootstrap/init.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ import (
5959
ssv1 "github.com/IBM/ibm-secretshare-operator/api/v1"
6060
odlm "github.com/IBM/operand-deployment-lifecycle-manager/v4/api/v1alpha1"
6161

62+
"maps"
63+
6264
certmanagerv1 "github.com/ibm/ibm-cert-manager-operator/apis/cert-manager/v1"
6365
)
6466

@@ -1941,9 +1943,7 @@ func (b *Bootstrap) UpdateResourceLabel(instance *apiv3.CommonService) error {
19411943
// get spec.labels in the spec
19421944
for _, cs := range csObjectList.Items {
19431945
labels := cs.Spec.Labels
1944-
for key, val := range labels {
1945-
(labelsMap)[key] = val
1946-
}
1946+
maps.Copy(labelsMap, labels)
19471947
}
19481948

19491949
if len(labelsMap) == 0 {
@@ -1961,15 +1961,15 @@ func (b *Bootstrap) UpdateResourceLabel(instance *apiv3.CommonService) error {
19611961
}
19621962

19631963
// update labels in the configmap
1964-
cmNames := []string{"common-services-maps", "namespace-scope"}
1964+
nsscmName := "namespace-scope"
19651965
cmList := &corev1.ConfigMapList{}
1966-
for _, cmName := range cmNames {
1967-
cm := &corev1.ConfigMap{}
1968-
if err := b.Client.Get(context.TODO(), types.NamespacedName{Name: cmName, Namespace: b.CSData.ServicesNs}, cm); err != nil && !errors.IsNotFound(err) {
1969-
return err
1970-
} else if errors.IsNotFound(err) {
1971-
klog.V(3).Infof("configmap %s is not found in namespace: %s", cmName, b.CSData.ServicesNs)
1972-
}
1966+
1967+
cm := &corev1.ConfigMap{}
1968+
if err := b.Client.Get(context.TODO(), types.NamespacedName{Name: nsscmName, Namespace: b.CSData.OperatorNs}, cm); err != nil && !errors.IsNotFound(err) {
1969+
return err
1970+
} else if errors.IsNotFound(err) {
1971+
klog.V(3).Infof("configmap %s is not found in namespace: %s", nsscmName, b.CSData.OperatorNs)
1972+
} else {
19731973
cmList.Items = append(cmList.Items, *cm)
19741974
}
19751975
cmUnstructedList, err := util.ObjectListToNewUnstructuredList(cmList)
@@ -2002,8 +2002,9 @@ func (b *Bootstrap) UpdateResourceLabel(instance *apiv3.CommonService) error {
20022002
return err
20032003
} else if errors.IsNotFound(err) {
20042004
klog.V(3).Infof("OperandRegistry common-service is not found in namespace: %s", b.CSData.ServicesNs)
2005+
} else {
2006+
opregList.Items = append(opregList.Items, *opreg)
20052007
}
2006-
opregList.Items = append(opregList.Items, *opreg)
20072008
opregUnstructedList, err := util.ObjectListToNewUnstructuredList(opregList)
20082009
if err != nil {
20092010
return err
@@ -2021,8 +2022,9 @@ func (b *Bootstrap) UpdateResourceLabel(instance *apiv3.CommonService) error {
20212022
return err
20222023
} else if errors.IsNotFound(err) {
20232024
klog.V(3).Infof("Issuer %s is not found in namespace: %s", issuerName, b.CSData.ServicesNs)
2025+
} else {
2026+
issuerList.Items = append(issuerList.Items, *issuer)
20242027
}
2025-
issuerList.Items = append(issuerList.Items, *issuer)
20262028
}
20272029
issuerUnstructedList, err := util.ObjectListToNewUnstructuredList(issuerList)
20282030
if err != nil {
@@ -2040,8 +2042,9 @@ func (b *Bootstrap) UpdateResourceLabel(instance *apiv3.CommonService) error {
20402042
return err
20412043
} else if errors.IsNotFound(err) {
20422044
klog.V(3).Infof("certificate cs-ca-certificate is not found in namespace: %s", b.CSData.ServicesNs)
2045+
} else {
2046+
certList.Items = append(certList.Items, *cert)
20432047
}
2044-
certList.Items = append(certList.Items, *cert)
20452048
certUnstructedList, err := util.ObjectListToNewUnstructuredList(certList)
20462049
if err != nil {
20472050
return err
@@ -2055,6 +2058,9 @@ func (b *Bootstrap) UpdateResourceLabel(instance *apiv3.CommonService) error {
20552058

20562059
func (b *Bootstrap) UpdateResourceWithLabel(resources *unstructured.UnstructuredList, labels map[string]string) error {
20572060
for _, resource := range resources.Items {
2061+
if resource.GetName() == "" {
2062+
continue
2063+
}
20582064
util.EnsureLabels(&resource, labels)
20592065
klog.Infof("Updating labels in %s %s/%s", resource.GetKind(), resource.GetNamespace(), resource.GetName())
20602066
if err := b.UpdateObject(&resource); err != nil {

internal/controller/common/util.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ import (
4747
"k8s.io/klog"
4848
"sigs.k8s.io/controller-runtime/pkg/client"
4949

50+
"maps"
51+
5052
apiv3 "github.com/IBM/ibm-common-service-operator/v4/api/v3"
5153
"github.com/IBM/ibm-common-service-operator/v4/internal/controller/constant"
5254
nssv1 "github.com/IBM/ibm-namespace-scope-operator/v4/api/v1"
@@ -687,12 +689,13 @@ func EnsureLabelsForConfigMap(cm *corev1.ConfigMap, labels map[string]string) {
687689

688690
// EnsureLabels ensures that the specifc resource has the certain labels
689691
func EnsureLabels(resource *unstructured.Unstructured, labels map[string]string) {
690-
if resource.Object["metadata"].(map[string]interface{})["labels"] == nil {
691-
resource.Object["metadata"].(map[string]interface{})["labels"] = make(map[string]string)
692-
}
693-
for k, v := range labels {
694-
resource.Object["metadata"].(map[string]interface{})["labels"].(map[string]string)[k] = v
692+
if resource.GetLabels() == nil {
693+
resource.SetLabels(labels)
694+
return
695695
}
696+
newLabels := resource.GetLabels()
697+
maps.Copy(newLabels, labels)
698+
resource.SetLabels(newLabels)
696699
}
697700

698701
// GetRequestNs gets requested-from-namespace of map-to-common-service-namespace

0 commit comments

Comments
 (0)