Skip to content

Commit

Permalink
feat: implement devEnvironments.workspacesPodAnnotations
Browse files Browse the repository at this point in the history
Signed-off-by: dkwon17 <[email protected]>
  • Loading branch information
dkwon17 committed Jun 27, 2024
1 parent b6101e9 commit db792ec
Show file tree
Hide file tree
Showing 12 changed files with 152 additions and 2 deletions.
3 changes: 3 additions & 0 deletions api/v2/checluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ type CheClusterDevEnvironments struct {
// +optional
// +kubebuilder:validation:Enum=Always;IfNotPresent;Never
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`
// WorkspacesPodAnnotations defines additional annotations for workspace pods.
// +optional
WorkspacesPodAnnotations map[string]string `json:"workspacesPodAnnotations,omitempty"`
}

// Che components configuration.
Expand Down
7 changes: 7 additions & 0 deletions api/v2/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ metadata:
operators.operatorframework.io/project_layout: go.kubebuilder.io/v3
repository: https://github.com/eclipse-che/che-operator
support: Eclipse Foundation
name: eclipse-che.v7.87.0-872.next
name: eclipse-che.v7.88.0-873.next
namespace: placeholder
spec:
apiservicedefinitions: {}
Expand Down Expand Up @@ -1036,7 +1036,7 @@ spec:
minKubeVersion: 1.19.0
provider:
name: Eclipse Foundation
version: 7.87.0-872.next
version: 7.88.0-873.next
webhookdefinitions:
- admissionReviewVersions:
- v1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7790,6 +7790,12 @@ spec:
type: string
type: array
type: object
workspacesPodAnnotations:
additionalProperties:
type: string
description: WorkspacesPodAnnotations defines additional annotations
for workspace pods.
type: object
type: object
gitServices:
description: A configuration that allows users to work with remote
Expand Down
6 changes: 6 additions & 0 deletions config/crd/bases/org.eclipse.che_checlusters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7741,6 +7741,12 @@ spec:
type: string
type: array
type: object
workspacesPodAnnotations:
additionalProperties:
type: string
description: WorkspacesPodAnnotations defines additional annotations
for workspace pods.
type: object
type: object
gitServices:
description: A configuration that allows users to work with remote
Expand Down
6 changes: 6 additions & 0 deletions deploy/deployment/kubernetes/combined.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7762,6 +7762,12 @@ spec:
type: string
type: array
type: object
workspacesPodAnnotations:
additionalProperties:
type: string
description: WorkspacesPodAnnotations defines additional annotations
for workspace pods.
type: object
type: object
gitServices:
description: A configuration that allows users to work with remote
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7757,6 +7757,12 @@ spec:
type: string
type: array
type: object
workspacesPodAnnotations:
additionalProperties:
type: string
description: WorkspacesPodAnnotations defines additional annotations
for workspace pods.
type: object
type: object
gitServices:
description: A configuration that allows users to work with remote
Expand Down
6 changes: 6 additions & 0 deletions deploy/deployment/openshift/combined.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7762,6 +7762,12 @@ spec:
type: string
type: array
type: object
workspacesPodAnnotations:
additionalProperties:
type: string
description: WorkspacesPodAnnotations defines additional annotations
for workspace pods.
type: object
type: object
gitServices:
description: A configuration that allows users to work with remote
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7757,6 +7757,12 @@ spec:
type: string
type: array
type: object
workspacesPodAnnotations:
additionalProperties:
type: string
description: WorkspacesPodAnnotations defines additional annotations
for workspace pods.
type: object
type: object
gitServices:
description: A configuration that allows users to work with remote
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7757,6 +7757,12 @@ spec:
type: string
type: array
type: object
workspacesPodAnnotations:
additionalProperties:
type: string
description: WorkspacesPodAnnotations defines additional annotations
for workspace pods.
type: object
type: object
gitServices:
description: A configuration that allows users to work with remote
Expand Down
6 changes: 6 additions & 0 deletions pkg/deploy/dev-workspace-config/dev_workspace_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ func updateWorkspaceConfig(ctx *chetypes.DeployContext, operatorConfig *controll

updateWorkspaceImagePullPolicy(devEnvironments.ImagePullPolicy, operatorConfig.Workspace)

updateAnnotations(devEnvironments.WorkspacesPodAnnotations, operatorConfig.Workspace)

// If the CheCluster has a configured proxy, or if the Che Operator has detected a proxy configuration,
// we need to disable automatic proxy handling in the DevWorkspace Operator as its implementation collides
// with ours -- they set environment variables the deployment spec explicitly, which overrides the proxy-settings
Expand Down Expand Up @@ -194,6 +196,10 @@ func updateWorkspaceImagePullPolicy(imagePullPolicy corev1.PullPolicy, workspace
workspaceConfig.ImagePullPolicy = string(imagePullPolicy)
}

func updateAnnotations(annotations map[string]string, workspaceConfig *controllerv1alpha1.WorkspaceConfig) {
workspaceConfig.PodAnnotations = annotations
}

func updateWorkspaceServiceAccountConfig(devEnvironments *chev2.CheClusterDevEnvironments, workspaceConfig *controllerv1alpha1.WorkspaceConfig) {
isNamespaceAutoProvisioned := pointer.BoolDeref(devEnvironments.DefaultNamespace.AutoProvision, constants.DefaultAutoProvision)

Expand Down
92 changes: 92 additions & 0 deletions pkg/deploy/dev-workspace-config/dev_workspace_config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2266,3 +2266,95 @@ func TestReconcileDevWorkspaceImagePullPolicy(t *testing.T) {
})
}
}

func TestReconcileDevWorkspaceAnnotations(t *testing.T) {
type testCase struct {
name string
cheCluster *chev2.CheCluster
existedObjects []runtime.Object
expectedOperatorConfig *controllerv1alpha1.OperatorConfiguration
}

var testCases = []testCase{
{
name: "Set specific annotations",
cheCluster: &chev2.CheCluster{
ObjectMeta: metav1.ObjectMeta{
Namespace: "eclipse-che",
Name: "eclipse-che",
},
Spec: chev2.CheClusterSpec{
DevEnvironments: chev2.CheClusterDevEnvironments{
WorkspacesPodAnnotations: map[string]string{
"key1": "value1",
"key2": "value2",
},
},
},
},
expectedOperatorConfig: &controllerv1alpha1.OperatorConfiguration{
Workspace: &controllerv1alpha1.WorkspaceConfig{
PodAnnotations: map[string]string{
"key1": "value1",
"key2": "value2",
},
},
},
},
{
name: "Remove annotations",
cheCluster: &chev2.CheCluster{
ObjectMeta: metav1.ObjectMeta{
Namespace: "eclipse-che",
Name: "eclipse-che",
},
Spec: chev2.CheClusterSpec{
DevEnvironments: chev2.CheClusterDevEnvironments{
WorkspacesPodAnnotations: nil,
},
},
},
expectedOperatorConfig: &controllerv1alpha1.OperatorConfiguration{
Workspace: &controllerv1alpha1.WorkspaceConfig{
PodAnnotations: nil,
},
},
existedObjects: []runtime.Object{
&controllerv1alpha1.DevWorkspaceOperatorConfig{
ObjectMeta: metav1.ObjectMeta{
Name: devWorkspaceConfigName,
Namespace: "eclipse-che",
},
TypeMeta: metav1.TypeMeta{
Kind: "DevWorkspaceOperatorConfig",
APIVersion: controllerv1alpha1.GroupVersion.String(),
},
Config: &controllerv1alpha1.OperatorConfiguration{
Workspace: &controllerv1alpha1.WorkspaceConfig{
PodAnnotations: map[string]string{
"key1": "value1",
"key2": "value2",
},
},
},
},
},
},
}

for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
deployContext := test.GetDeployContext(testCase.cheCluster, []runtime.Object{})
infrastructure.InitializeForTesting(infrastructure.OpenShiftv4)

devWorkspaceConfigReconciler := NewDevWorkspaceConfigReconciler()
_, _, err := devWorkspaceConfigReconciler.Reconcile(deployContext)
assert.NoError(t, err)

dwoc := &controllerv1alpha1.DevWorkspaceOperatorConfig{}
err = deployContext.ClusterAPI.Client.Get(context.TODO(), types.NamespacedName{Name: devWorkspaceConfigName, Namespace: testCase.cheCluster.Namespace}, dwoc)
assert.NoError(t, err)
assert.Equal(t, testCase.expectedOperatorConfig.Workspace.PodAnnotations, dwoc.Config.Workspace.PodAnnotations)
})
}
}

0 comments on commit db792ec

Please sign in to comment.