Skip to content

Commit 368a98f

Browse files
committed
Update a restore feature based on code review
Signed-off-by: Ales Raszka <araszka@redhat.com>
1 parent 5480c1c commit 368a98f

File tree

5 files changed

+41
-17
lines changed

5 files changed

+41
-17
lines changed

apis/controller/v1alpha1/devworkspaceoperatorconfig_types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,8 @@ type ProjectCloneConfig struct {
380380
}
381381

382382
type RestoreConfig struct {
383+
// ImagePullPolicy configures the imagePullPolicy for the restore container.
384+
// If undefined, the general setting .config.workspace.imagePullPolicy is used instead.
383385
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`
384386
// Resources defines the resource (cpu, memory) limits and requests for the restore
385387
// container. To explicitly not specify a limit or request, define the resource

controllers/workspace/devworkspace_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ func (r *DevWorkspaceReconciler) Reconcile(ctx context.Context, req ctrl.Request
365365
} else {
366366
restoreOptions.PullPolicy = corev1.PullIfNotPresent
367367
}
368-
if workspaceRestore, err := restore.GetWorkspaceRestoreInitContainer(ctx, workspace, clusterAPI.Client, restoreOptions, reqLogger); err != nil {
368+
if workspaceRestore, err := restore.GetWorkspaceRestoreInitContainer(ctx, workspace, restoreOptions); err != nil {
369369
return r.failWorkspace(workspace, fmt.Sprintf("Failed to set up workspace-restore init container: %s", err), metrics.ReasonInfrastructureFailure, reqLogger, &reconcileStatus), nil
370370
} else if workspaceRestore != nil {
371371
devfilePodAdditions.InitContainers = append([]corev1.Container{*workspaceRestore}, devfilePodAdditions.InitContainers...)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
kind: DevWorkspace
2+
apiVersion: workspace.devfile.io/v1alpha2
3+
metadata:
4+
labels:
5+
controller.devfile.io/creator: ""
6+
spec:
7+
started: true
8+
routingClass: 'basic'
9+
template:
10+
attributes:
11+
controller.devfile.io/storage-type: common
12+
controller.devfile.io/restore-workspace: 'false'
13+
projects:
14+
- name: web-nodejs-sample
15+
git:
16+
remotes:
17+
origin: "https://github.com/che-samples/web-nodejs-sample.git"
18+
components:
19+
- name: web-terminal
20+
container:
21+
image: quay.io/wto/web-terminal-tooling:latest
22+
memoryLimit: 512Mi
23+
mountSources: true
24+
command:
25+
- "tail"
26+
- "-f"
27+
- "/dev/null"

pkg/constants/attributes.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,11 @@ const (
153153
BootstrapDevWorkspaceAttribute = "controller.devfile.io/bootstrap-devworkspace"
154154

155155
// WorkspaceRestoreAttribute defines whether workspace restore should be performed for a DevWorkspace.
156-
// If this attribute is present, the restore process will be performed during workspace
157-
// initialization before the workspace containers start.
158-
159-
// The backup source is automatically determined from the cluster configuration or can be overridden
160-
// by specifying the WorkspaceRestoreSourceImageAttribute.
156+
// If this attribute is present and set to true, the restore process will be performed during
157+
// workspace initialization, before workspace containers start.
158+
//
159+
// The backup source is automatically determined from the cluster configuration unless overridden
160+
// by WorkspaceRestoreSourceImageAttribute.
161161
WorkspaceRestoreAttribute = "controller.devfile.io/restore-workspace"
162162

163163
// WorkspaceRestoreSourceImageAttribute defines the backup image source to restore from for a DevWorkspace.

pkg/library/restore/restore.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ import (
2424
"github.com/devfile/devworkspace-operator/pkg/common"
2525
devfileConstants "github.com/devfile/devworkspace-operator/pkg/library/constants"
2626
dwResources "github.com/devfile/devworkspace-operator/pkg/library/resources"
27-
"github.com/go-logr/logr"
2827
corev1 "k8s.io/api/core/v1"
29-
"sigs.k8s.io/controller-runtime/pkg/client"
3028

3129
"github.com/devfile/devworkspace-operator/internal/images"
3230
"github.com/devfile/devworkspace-operator/pkg/constants"
@@ -47,8 +45,7 @@ func IsWorkspaceRestoreRequested(workspace *dw.DevWorkspaceTemplateSpec) bool {
4745
if !workspace.Attributes.Exists(constants.WorkspaceRestoreAttribute) {
4846
return false
4947
}
50-
enableRecovery := workspace.Attributes.GetBoolean(constants.WorkspaceRestoreAttribute, nil)
51-
return enableRecovery
48+
return workspace.Attributes.GetBoolean(constants.WorkspaceRestoreAttribute, nil)
5249

5350
}
5451

@@ -57,18 +54,16 @@ func IsWorkspaceRestoreRequested(workspace *dw.DevWorkspaceTemplateSpec) bool {
5754
func GetWorkspaceRestoreInitContainer(
5855
ctx context.Context,
5956
workspace *common.DevWorkspaceWithConfig,
60-
k8sClient client.Client,
6157
options Options,
62-
log logr.Logger,
6358
) (*corev1.Container, error) {
64-
wokrspaceTempplate := &workspace.Spec.Template
59+
workspaceTemplate := &workspace.Spec.Template
6560

6661
// Determine the source image for restore
6762
var err error
6863
var restoreSourceImage string
69-
if wokrspaceTempplate.Attributes.Exists(constants.WorkspaceRestoreSourceImageAttribute) {
64+
if workspaceTemplate.Attributes.Exists(constants.WorkspaceRestoreSourceImageAttribute) {
7065
// User choose custom image specified in the attribute
71-
restoreSourceImage = wokrspaceTempplate.Attributes.GetString(constants.WorkspaceRestoreSourceImageAttribute, &err)
66+
restoreSourceImage = workspaceTemplate.Attributes.GetString(constants.WorkspaceRestoreSourceImageAttribute, &err)
7267
if err != nil {
7368
return nil, fmt.Errorf("failed to read %s attribute on workspace: %w", constants.WorkspaceRestoreSourceImageAttribute, err)
7469
}
@@ -86,7 +81,7 @@ func GetWorkspaceRestoreInitContainer(
8681
return nil, fmt.Errorf("empty value for attribute %s is invalid", constants.WorkspaceRestoreSourceImageAttribute)
8782
}
8883

89-
if !hasContainerComponents(wokrspaceTempplate) {
84+
if !hasContainerComponents(workspaceTemplate) {
9085
// Avoid adding restore init container when DevWorkspace does not define any containers
9186
return nil, nil
9287
}
@@ -101,7 +96,7 @@ func GetWorkspaceRestoreInitContainer(
10196

10297
resources := dwResources.FilterResources(options.Resources)
10398
if err := dwResources.ValidateResources(resources); err != nil {
104-
return nil, fmt.Errorf("invalid resources for project clone container: %w", err)
99+
return nil, fmt.Errorf("invalid resources for workspace restore container: %w", err)
105100
}
106101

107102
return &corev1.Container{

0 commit comments

Comments
 (0)