FairwindsOps/gemini

SnapshotGroup's persistentVolumeClaim.spec not populated on k8s 1.23(.5).

Aste88 opened this issue · 2 comments

What happened?

test/paperless: failed to restore PVC - PersistentVolumeClaim "paperless-data" is invalid: [spec.accessModes: Required value: at least 1 access mode is required, spec.resources[storage]: Required value]
E0423 21:34:01.487218 1 controller.go:169] test/paperless: failed to perform restore - PersistentVolumeClaim "paperless-data" is invalid: [spec.accessModes: Required value: at least 1 access mode is required, spec.resources[storage]: Required

What did you expect to happen?

pvc.go:82] storage/paperless: restoring PVC
pvc.go:105] storage/paperless: deleting PVC paperless-data
pvc.go:63] storage/paperless: creating PVC paperless-data
controller.go:146] storage/paperless: successfully performed restore

How can we reproduce this?

I believe it's related to 1.23 change to crd v1, the generated CRD only specify type: Object for pvc.spec (and template), without any parameters or setting AdditionalProperties: true. See k3s-io/k3s#1406 (comment)

It might be enough to add
AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{Allows: true},
to crd.go after lines 43 and 70.

Another option is to read the PVC specs just before restoring.

I've made both changes (UNTESTED!) in a fork, see Aste88@d1d826d

I've fixed it for now by creating the CRD manually with params from the PVC object (https://gist.github.com/Aste88/0c70dea7719e06199a3b281625f9f6d1)

Version

1.0.0

Search

  • I did search for other open and closed issues before opening this.

Code of Conduct

  • I agree to follow this project's Code of Conduct

Additional context

No response

Also minor annoyance: the first restore fails because it takes some time to delete the old PVC, fortunately it retries.

groups.go:83] storage/paperless: restoring to 1650842640
snapshots.go:196] storage/paperless: creating snapshot for restore 1650842640
snapshots.go:136] storage/paperless: creating snapshot for PVC paperless-data
pvc.go:82] storage/paperless: restoring PVC
pvc.go:105] storage/paperless: deleting PVC paperless-data
pvc.go:63] storage/paperless: creating PVC paperless-data
groups.go:96] storage/paperless: failed to restore PVC - object is being deleted: persistentvolumeclaims "paperless-data" already exists
controller.go:169] storage/paperless: failed to perform restore - object is being deleted: persistentvolumeclaims "paperless-data" already exists
controller.go:151] storage/paperless: error syncing controller.workItem{name:"paperless", namespace:"storage", snapshotGroup:(*v1.SnapshotGroup)(0xc000233340), task:1}: object is being deleted: persistentvolumeclaims "paperless-data" already exists, requeuing
groups.go:83] storage/paperless: restoring to 1650842640
snapshots.go:192] storage/paperless: restore snapshot already exists for timestamp 1650842640
pvc.go:82] storage/paperless: restoring PVC
pvc.go:105] storage/paperless: deleting PVC paperless-data
pvc.go:63] storage/paperless: creating PVC paperless-data
controller.go:146] storage/paperless: successfully performed restore
reflector.go:382] pkg/mod/k8s.io/client-go@v0.23.4/tools/cache/reflector.go:167: forcing resync
groups.go:38] storage/paperless: reconciling
pvc.go:48] storage/paperless-data: PVC found
groups.go:29] storage/paperless: updating PVC spec
groups.go:53] storage/paperless: found 2 existing snapshots

I assume the project is no longer maintained? This prevents any backups from being restored ...