Skip to content

Backup functionality does not work for DevWorkspaces using per-workspace storage type. #1575

@rohanKanojia

Description

@rohanKanojia

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-workspace

When 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

  1. Deploy DevWorkspace Operator with latest changes on main
  2. Edit DevWorkspaceOperatorConfig to enable backup functionality
  3. Create a workspaces with per-workspace storage type : samples/per-workspace-storage.yaml
  4. Wait for it to get ready
  5. Stop the workspace
  6. 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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions