Skip to content

Commit 8094056

Browse files
authored
chore: sync dev-workspace-container-build CRB on every reconcile loop (#2000)
Signed-off-by: Anatolii Bazko <abazko@redhat.com>
1 parent c3a382b commit 8094056

File tree

3 files changed

+47
-23
lines changed

3 files changed

+47
-23
lines changed

pkg/common/constants/constants.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ const (
133133
PublicCertsDir = "/public-certs"
134134

135135
// DevWorkspace
136+
DevWorkspaceControllerName = "devworkspace-controller"
137+
DevWorkspaceOperatorName = "devworkspace-operator"
136138
DevWorkspaceServiceAccountName = "devworkspace-controller-serviceaccount"
137139
DefaultContainerBuildSccName = "container-build"
138140
)

pkg/deploy/container-build/container_build.go

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ import (
1616
"context"
1717
"fmt"
1818

19+
"k8s.io/apimachinery/pkg/labels"
20+
21+
"sigs.k8s.io/controller-runtime/pkg/client"
22+
1923
"github.com/google/go-cmp/cmp"
2024
"k8s.io/apimachinery/pkg/types"
2125

@@ -237,22 +241,26 @@ func (cb *ContainerBuildReconciler) getDevWorkspaceSccClusterRoleBindingSpec(ctx
237241
}, nil
238242
}
239243

244+
// getDevWorkspaceServiceAccountNamespace returns the namespace of the DevWorkspace ServiceAccount.
245+
// It searches for the DevWorkspace Operator Pods by its labels.
240246
func (cb *ContainerBuildReconciler) getDevWorkspaceServiceAccountNamespace(ctx *chetypes.DeployContext) (string, error) {
241-
crb := &rbacv1.ClusterRoleBinding{}
242-
if exists, err := deploy.GetClusterObject(ctx, GetDevWorkspaceSccRbacResourcesName(), crb); err != nil {
247+
selector, err := labels.Parse(fmt.Sprintf(
248+
"%s=%s,%s=%s",
249+
constants.KubernetesNameLabelKey, constants.DevWorkspaceControllerName,
250+
constants.KubernetesPartOfLabelKey, constants.DevWorkspaceOperatorName))
251+
if err != nil {
243252
return "", err
244-
} else if exists {
245-
return crb.Subjects[0].Namespace, nil
246-
} else {
247-
sas := &corev1.ServiceAccountList{}
248-
if err := ctx.ClusterAPI.NonCachingClient.List(context.TODO(), sas); err != nil {
249-
return "", err
250-
}
253+
}
254+
options := &client.ListOptions{LabelSelector: selector}
251255

252-
for _, sa := range sas.Items {
253-
if sa.Name == constants.DevWorkspaceServiceAccountName {
254-
return sa.Namespace, nil
255-
}
256+
pods := &corev1.PodList{}
257+
if err = ctx.ClusterAPI.NonCachingClient.List(context.TODO(), pods, options); err != nil {
258+
return "", err
259+
}
260+
261+
for _, pod := range pods.Items {
262+
if pod.Spec.ServiceAccountName == constants.DevWorkspaceServiceAccountName {
263+
return pod.Namespace, nil
256264
}
257265
}
258266

pkg/deploy/container-build/container_build_test.go

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,24 @@ import (
3333
)
3434

3535
func TestContainerBuildReconciler(t *testing.T) {
36-
dwSA := &corev1.ServiceAccount{
36+
dwPod := &corev1.Pod{
3737
TypeMeta: metav1.TypeMeta{
38-
Kind: "ServiceAccount",
38+
Kind: "Pod",
3939
APIVersion: "v1",
4040
},
4141
ObjectMeta: metav1.ObjectMeta{
42-
Name: constants.DevWorkspaceServiceAccountName,
42+
Name: "devworkspace-controller",
4343
Namespace: "eclipse-che",
44+
Labels: map[string]string{
45+
constants.KubernetesNameLabelKey: constants.DevWorkspaceControllerName,
46+
constants.KubernetesPartOfLabelKey: constants.DevWorkspaceOperatorName,
47+
},
48+
},
49+
Spec: corev1.PodSpec{
50+
ServiceAccountName: constants.DevWorkspaceServiceAccountName,
4451
},
4552
}
46-
ctx := test.GetDeployContext(nil, []runtime.Object{dwSA})
53+
ctx := test.GetDeployContext(nil, []runtime.Object{dwPod})
4754
containerBuildReconciler := NewContainerBuildReconciler()
4855

4956
_, done, err := containerBuildReconciler.Reconcile(ctx)
@@ -83,18 +90,25 @@ func TestContainerBuildReconciler(t *testing.T) {
8390
}
8491

8592
func TestSyncAndRemoveRBAC(t *testing.T) {
86-
dwSA := &corev1.ServiceAccount{
93+
dwPod := &corev1.Pod{
8794
TypeMeta: metav1.TypeMeta{
88-
Kind: "ServiceAccount",
95+
Kind: "Pod",
8996
APIVersion: "v1",
9097
},
9198
ObjectMeta: metav1.ObjectMeta{
92-
Name: constants.DevWorkspaceServiceAccountName,
99+
Name: "devworkspace-controller",
93100
Namespace: "eclipse-che",
101+
Labels: map[string]string{
102+
constants.KubernetesNameLabelKey: constants.DevWorkspaceControllerName,
103+
constants.KubernetesPartOfLabelKey: constants.DevWorkspaceOperatorName,
104+
},
105+
},
106+
Spec: corev1.PodSpec{
107+
ServiceAccountName: constants.DevWorkspaceServiceAccountName,
94108
},
95109
}
96-
ctx := test.GetDeployContext(nil, []runtime.Object{dwSA})
97-
ctx.CheCluster.Spec.DevEnvironments.DisableContainerBuildCapabilities = pointer.BoolPtr(false)
110+
ctx := test.GetDeployContext(nil, []runtime.Object{dwPod})
111+
ctx.CheCluster.Spec.DevEnvironments.DisableContainerBuildCapabilities = pointer.Bool(false)
98112
ctx.CheCluster.Spec.DevEnvironments.ContainerBuildConfiguration = &chev2.ContainerBuildConfiguration{OpenShiftSecurityContextConstraint: "scc"}
99113

100114
containerBuildReconciler := NewContainerBuildReconciler()
@@ -118,7 +132,7 @@ func TestSyncAndRemoveRBAC(t *testing.T) {
118132

119133
func TestSyncAndRemoveSCC(t *testing.T) {
120134
ctx := test.GetDeployContext(nil, []runtime.Object{})
121-
ctx.CheCluster.Spec.DevEnvironments.DisableContainerBuildCapabilities = pointer.BoolPtr(false)
135+
ctx.CheCluster.Spec.DevEnvironments.DisableContainerBuildCapabilities = pointer.Bool(false)
122136
ctx.CheCluster.Spec.DevEnvironments.ContainerBuildConfiguration = &chev2.ContainerBuildConfiguration{OpenShiftSecurityContextConstraint: "scc"}
123137

124138
containerBuildReconciler := NewContainerBuildReconciler()

0 commit comments

Comments
 (0)