-
Notifications
You must be signed in to change notification settings - Fork 67
Open
Description
Description
Backup functionality doesn't seem to be working for workspaces that have storage attribute:
spec:
started: true
template:
attributes:
controller.devfile.io/storage-type: per-workspaceWhen I create a workspace with per-workspace storage and then stop it, I am not able to see any backups being done.
How To Reproduce
- Deploy DevWorkspace Operator with latest changes on main
- Edit DevWorkspaceOperatorConfig to enable backup functionality
- Create a workspaces with per-workspace storage type : samples/per-workspace-storage.yaml
- Wait for it to get ready
- Stop the workspace
- Wait for backup job to be created, it will not get created
I have created a script that should automate this reproducing process.You can find it here:
You can verify script works with per-user storage:
bash backup-test.sh code-latest https://raw.githubusercontent.com/devfile/devworkspace-operator/refs/heads/main/samples/code-latest.yaml
Workspace name : code-latest
Workspace manifest : https://raw.githubusercontent.com/devfile/devworkspace-operator/refs/heads/main/samples/code-latest.yaml
Backup image : dw-test/openshift-operators/code-latest
Context "rokumar-dev/api-crc-testing:6443/kubeadmin" modified.
Patching DevWorkspaceOperatorConfig in openshift-operators...
devworkspaceoperatorconfig.controller.devfile.io/devworkspace-operator-config patched (no change)
🚀 Applying DevWorkspace manifest...
devworkspace.workspace.devfile.io/code-latest created
✅ DevWorkspace manifest applied completed.
⏳ Waiting for DevWorkspace 'code-latest' to become 🟢 *Running*...
devworkspace.workspace.devfile.io/code-latest condition met
✅ DevWorkspace 'code-latest' is running completed.
DevWorkspace URL: https://workspace4c725166b4ea43cb.apps-crc.testing/che-code/
📝 Modifying README.md inside workspace...
Defaulted container "dev" out of: dev, project-clone (init), che-code-injector (init)
✅ File modified completed.
🛑 Stopping workspace...
devworkspace.workspace.devfile.io/code-latest patched
✅ Workspace stopped completed.
Waiting for backup Job...
Found backup Job: devworkspace-backup-gw78v
job.batch/devworkspace-backup-gw78v condition met
Backup Job completed
Fetching logs from backup Job pod...
+ set -e
+ exec /workspace-recovery.sh --backup
Backing up devworkspace 'code-latest' in namespace 'openshift-operators' to image 'ttl.sh/dw-test/openshift-operators/code-latest:latest'
./
./web-nodejs-sample/
./web-nodejs-sample/.git/
./web-nodejs-sample/.git/branches/
./web-nodejs-sample/.git/description
./web-nodejs-sample/.git/hooks/
./web-nodejs-sample/.git/hooks/applypatch-msg.sample
./web-nodejs-sample/.git/hooks/commit-msg.sample
./web-nodejs-sample/.git/hooks/fsmonitor-watchman.sample
./web-nodejs-sample/.git/hooks/post-update.sample
./web-nodejs-sample/.git/hooks/pre-applypatch.sample
./web-nodejs-sample/.git/hooks/pre-commit.sample
./web-nodejs-sample/.git/hooks/pre-merge-commit.sample
./web-nodejs-sample/.git/hooks/pre-push.sample
./web-nodejs-sample/.git/hooks/pre-rebase.sample
./web-nodejs-sample/.git/hooks/pre-receive.sample
./web-nodejs-sample/.git/hooks/prepare-commit-msg.sample
./web-nodejs-sample/.git/hooks/push-to-checkout.sample
./web-nodejs-sample/.git/hooks/sendemail-validate.sample
./web-nodejs-sample/.git/hooks/update.sample
./web-nodejs-sample/.git/info/
./web-nodejs-sample/.git/info/exclude
./web-nodejs-sample/.git/config
./web-nodejs-sample/.git/objects/
./web-nodejs-sample/.git/objects/pack/
./web-nodejs-sample/.git/objects/pack/pack-00c9cb529f78a543deaf778dfaffcb012aef3c11.pack
./web-nodejs-sample/.git/objects/pack/pack-00c9cb529f78a543deaf778dfaffcb012aef3c11.rev
./web-nodejs-sample/.git/objects/pack/pack-00c9cb529f78a543deaf778dfaffcb012aef3c11.idx
./web-nodejs-sample/.git/objects/info/
./web-nodejs-sample/.git/HEAD
./web-nodejs-sample/.git/refs/
./web-nodejs-sample/.git/refs/heads/
./web-nodejs-sample/.git/refs/heads/main
./web-nodejs-sample/.git/refs/tags/
./web-nodejs-sample/.git/refs/remotes/
./web-nodejs-sample/.git/refs/remotes/origin/
./web-nodejs-sample/.git/refs/remotes/origin/HEAD
./web-nodejs-sample/.git/packed-refs
./web-nodejs-sample/.git/logs/
./web-nodejs-sample/.git/logs/refs/
./web-nodejs-sample/.git/logs/refs/remotes/
./web-nodejs-sample/.git/logs/refs/remotes/origin/
./web-nodejs-sample/.git/logs/refs/remotes/origin/HEAD
./web-nodejs-sample/.git/logs/refs/heads/
./web-nodejs-sample/.git/logs/refs/heads/main
./web-nodejs-sample/.git/logs/HEAD
./web-nodejs-sample/.git/index
./web-nodejs-sample/.git/FETCH_HEAD
./web-nodejs-sample/.gitattributes
./web-nodejs-sample/.github/
./web-nodejs-sample/.github/CODEOWNERS
./web-nodejs-sample/.gitignore
./web-nodejs-sample/.vscode/
./web-nodejs-sample/.vscode/launch.json
./web-nodejs-sample/LICENSE
./web-nodejs-sample/README.md
./web-nodejs-sample/app/
./web-nodejs-sample/app/app.js
./web-nodejs-sample/devfile.yaml
./web-nodejs-sample/package-lock.json
./web-nodejs-sample/package.json
./.code-workspace
Using mounted service account token for registry authentication
Uploading 9073e81f4f4f devworkspace-backup.tar.gz
Uploaded 9073e81f4f4f devworkspace-backup.tar.gz
Pushed [registry] ttl.sh/dw-test/openshift-operators/code-latest:latest
ArtifactType: application/vnd.devworkspace.backup.artifact.v1+json
Digest: sha256:65c378bd82959ce75220525ef0d0ed3fc92b5567b5b0979f05a6f6f28d308f3a
Backup completed successfully.
=== Backup Artifact Verification ===
✅ Backup artifact exists: dw-test/openshift-operators/code-latest
✅ Backup verification successful for code-latest
However script fails with per-workspace storage:
bash backup-test.sh code-latest https://raw.githubusercontent.com/devfile/devworkspace-operator/refs/heads/main/samples/per-workspace-storage.yaml
Workspace name : code-latest
Workspace manifest : https://raw.githubusercontent.com/devfile/devworkspace-operator/refs/heads/main/samples/per-workspace-storage.yaml
Backup image : dw-test/openshift-operators/code-latest
Context "rokumar-dev/api-crc-testing:6443/kubeadmin" modified.
Patching DevWorkspaceOperatorConfig in openshift-operators...
devworkspaceoperatorconfig.controller.devfile.io/devworkspace-operator-config patched (no change)
🚀 Applying DevWorkspace manifest...
devworkspace.workspace.devfile.io/code-latest created
✅ DevWorkspace manifest applied completed.
⏳ Waiting for DevWorkspace 'code-latest' to become 🟢 *Running*...
devworkspace.workspace.devfile.io/code-latest condition met
✅ DevWorkspace 'code-latest' is running completed.
DevWorkspace URL: https://workspace4b6981f8a3694d4d.apps-crc.testing/che-code/
📝 Modifying README.md inside workspace...
Defaulted container "che-code-runtime-description" out of: che-code-runtime-description, project-clone (init), che-code-injector (init)
✅ File modified completed.
🛑 Stopping workspace...
devworkspace.workspace.devfile.io/code-latest patched
✅ Workspace stopped completed.
Waiting for backup Job...
❌ Backup Job was not created
Expected behavior
Backup functionality should work for DevWorkspaces using per-workspace storage type, just as it does for per-user storage. The backup cronjob should:
- Detect the per-workspace PVC correctly
- Create a backup Job that mounts the per-workspace PVC
- Successfully back up the workspace data to the configured registry
Additional context
DevWorkspace Operator Logs
{"level":"info","ts":"2026-01-21T11:13:05Z","logger":"controllers.DevWorkspace","msg":"Deployment is not ready","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:13:05Z","logger":"controllers.DevWorkspace","msg":"Waiting on deployment to be ready","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:13:08Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:13:08Z","logger":"controllers.DevWorkspace","msg":"Deployment is not ready","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:13:08Z","logger":"controllers.DevWorkspace","msg":"Waiting on deployment to be ready","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:14:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:14:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:14:23Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:14:23Z","logger":"controllers.DevWorkspace","msg":"Deployment is not ready","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:14:23Z","logger":"controllers.DevWorkspace","msg":"Waiting on deployment to be ready","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:15:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:15:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:16:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:16:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:16:51Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:52Z","logger":"controllers.DevWorkspace","msg":"Failed to check server status: Get \"https://workspace3c6cc75ff0a249ed.apps-crc.testing/che-code/healthz\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:52Z","logger":"controllers.DevWorkspace","msg":"Waiting for DevWorkspace health check endpoint to become available","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:52Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Failed to check server status: Get \"https://workspace3c6cc75ff0a249ed.apps-crc.testing/che-code/healthz\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Waiting for DevWorkspace health check endpoint to become available","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Main URL server not ready","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","status-code":503}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Workspace is running","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Workspace is running","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Workspace is running","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Stopping workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspaceRouting","msg":"Reconciling DevWorkspaceRouting","Request.Namespace":"openshift-operators","Request.Name":"routing-workspace3c6cc75ff0a249ed","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspaceRouting","msg":"Reconciling DevWorkspaceRouting","Request.Namespace":"openshift-operators","Request.Name":"routing-workspace3c6cc75ff0a249ed","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Failed to update workspace status due to conflict; retrying","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:16:53Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:17:00Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:17:00Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:17:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:17:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:17:04Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:17:05Z","logger":"controllers.DevWorkspace","msg":"Reconciling Workspace","Request.Namespace":"openshift-operators","Request.Name":"code-latest","devworkspace_id":"workspace3c6cc75ff0a249ed","resolvedConfig":"workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *"}
{"level":"info","ts":"2026-01-21T11:18:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:18:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:19:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:19:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:20:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:20:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:21:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:21:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:22:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:22:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:23:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:23:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:24:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:24:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:25:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:25:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
{"level":"info","ts":"2026-01-21T11:26:00Z","logger":"controllers.CleanupCronJob.setupWithManager","msg":"DevWorkspaceOperatorConfig update event received"}
{"level":"info","ts":"2026-01-21T11:26:00Z","logger":"operator-configuration","msg":"Updated config to [workspace.backupCronJob.enable=true,workspace.backupCronJob.cronJobScript=*/1 * * * *]"}
Metadata
Metadata
Assignees
Labels
No labels