Skip to content

Commit 65a7439

Browse files
committed
fix: preserving externally managed labels
Signed-off-by: Dario Tranchitella <dario@tranchitella.eu>
1 parent 1db7a46 commit 65a7439

File tree

4 files changed

+32
-16
lines changed

4 files changed

+32
-16
lines changed

controllers/tenant/limitranges.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (r *Manager) syncLimitRange(ctx context.Context, tenant *capsulev1beta2.Ten
5555
return err
5656
}
5757

58-
for i, spec := range tenant.Spec.LimitRanges.Items {
58+
for i, spec := range tenant.Spec.LimitRanges.Items { //nolint:dupl
5959
target := &corev1.LimitRange{
6060
ObjectMeta: metav1.ObjectMeta{
6161
Name: fmt.Sprintf("capsule-%s-%d", tenant.Name, i),
@@ -65,10 +65,14 @@ func (r *Manager) syncLimitRange(ctx context.Context, tenant *capsulev1beta2.Ten
6565

6666
var res controllerutil.OperationResult
6767
res, err = controllerutil.CreateOrUpdate(ctx, r.Client, target, func() (err error) {
68-
target.ObjectMeta.Labels = map[string]string{
69-
tenantLabel: tenant.Name,
70-
limitRangeLabel: strconv.Itoa(i),
68+
labels := target.GetLabels()
69+
if labels == nil {
70+
labels = map[string]string{}
7171
}
72+
labels[tenantLabel] = tenant.Name
73+
labels[limitRangeLabel] = strconv.Itoa(i)
74+
75+
target.SetLabels(labels)
7276
target.Spec = spec
7377

7478
return controllerutil.SetControllerReference(tenant, target, r.Client.Scheme())

controllers/tenant/networkpolicies.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (r *Manager) syncNetworkPolicy(ctx context.Context, tenant *capsulev1beta2.
5454
return err
5555
}
5656

57-
for i, spec := range tenant.Spec.NetworkPolicies.Items {
57+
for i, spec := range tenant.Spec.NetworkPolicies.Items { //nolint:dupl
5858
target := &networkingv1.NetworkPolicy{
5959
ObjectMeta: metav1.ObjectMeta{
6060
Name: fmt.Sprintf("capsule-%s-%d", tenant.Name, i),
@@ -64,10 +64,15 @@ func (r *Manager) syncNetworkPolicy(ctx context.Context, tenant *capsulev1beta2.
6464

6565
var res controllerutil.OperationResult
6666
res, err = controllerutil.CreateOrUpdate(ctx, r.Client, target, func() (err error) {
67-
target.SetLabels(map[string]string{
68-
tenantLabel: tenant.Name,
69-
networkPolicyLabel: strconv.Itoa(i),
70-
})
67+
labels := target.GetLabels()
68+
if labels == nil {
69+
labels = map[string]string{}
70+
}
71+
72+
labels[tenantLabel] = tenant.Name
73+
labels[networkPolicyLabel] = strconv.Itoa(i)
74+
75+
target.SetLabels(labels)
7176
target.Spec = spec
7277

7378
return controllerutil.SetControllerReference(tenant, target, r.Client.Scheme())

controllers/tenant/resourcequotas.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,15 @@ func (r *Manager) syncResourceQuota(ctx context.Context, tenant *capsulev1beta2.
196196

197197
err = retry.RetryOnConflict(retry.DefaultBackoff, func() (retryErr error) {
198198
res, retryErr = controllerutil.CreateOrUpdate(ctx, r.Client, target, func() (err error) {
199-
target.SetLabels(map[string]string{
200-
tenantLabel: tenant.Name,
201-
typeLabel: strconv.Itoa(index),
202-
})
199+
targetLabels := target.GetLabels()
200+
if targetLabels == nil {
201+
targetLabels = map[string]string{}
202+
}
203+
204+
targetLabels[tenantLabel] = tenant.Name
205+
targetLabels[typeLabel] = strconv.Itoa(index)
206+
207+
target.SetLabels(targetLabels)
203208
target.Spec.Scopes = resQuota.Scopes
204209
target.Spec.ScopeSelector = resQuota.ScopeSelector
205210
// In case of Namespace scope for the ResourceQuota we can easily apply the bare specification

controllers/tenant/rolebindings.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,12 @@ func (r *Manager) syncAdditionalRoleBinding(ctx context.Context, tenant *capsule
128128

129129
var res controllerutil.OperationResult
130130
res, err = controllerutil.CreateOrUpdate(ctx, r.Client, target, func() error {
131-
target.ObjectMeta.Labels = map[string]string{
132-
tenantLabel: tenant.Name,
133-
roleBindingLabel: roleBindingHashLabel,
131+
if target.ObjectMeta.Labels == nil {
132+
target.ObjectMeta.Labels = map[string]string{}
134133
}
134+
135+
target.ObjectMeta.Labels[tenantLabel] = tenant.Name
136+
target.ObjectMeta.Labels[roleBindingLabel] = roleBindingHashLabel
135137
target.RoleRef = rbacv1.RoleRef{
136138
APIGroup: rbacv1.GroupName,
137139
Kind: "ClusterRole",

0 commit comments

Comments
 (0)