The module lifecycle stage: General Availability
The module has requirements for installation
VolumeCaptureRequest (VCR) and VolumeRestoreRequest (VRR) are one-shot service resources intended
for controllers such as state-snapshotter, not a stable end-user backup UX. Actual create/read access
is determined by cluster RBAC; admission currently does not enforce a controller-only policy. Both
are namespaced in storage-foundation.deckhouse.io/v1alpha1; their namespace is also the namespace
of the source or target PVC.
This page summarizes the current generated CRDs and controller/sidecar behavior. The generated CRDs
are the schema of record. How a domain controller consumes these resources is defined by the
state-snapshotter domain snapshot SDK, which also owns the core Ready reason mapping.
VolumeCaptureRequest
VCR creates a durable data artifact for one PVC. The domain snapshot SDK uses only
spec.mode: Snapshot; Detach is a separate storage-foundation flow.
apiVersion: storage-foundation.deckhouse.io/v1alpha1
kind: VolumeCaptureRequest
metadata:
name: nss-vcr-4f2c8a91d0e3b7c2
namespace: my-app
spec:
mode: Snapshot
target:
uid: "2b4f6c7e-7e1d-4d85-95d0-8b52d61534d8"
apiVersion: v1
kind: PersistentVolumeClaim
name: data
status:
data:
artifactRef:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
name: snapshot-73a4cda0-4f2c8a91d0e3
uid: "1148b6bd-9de2-4c86-a814-7688300932eb"
completionTimestamp: "2026-07-23T12:34:56Z"
conditions:
- type: Ready
status: "True"
lastTransitionTime: "2026-07-23T12:34:56Z"
reason: Completed
message: "target ready"Contract:
spec.targetis one PVC identity; namespace is implicit from the VCR. This is a single-target request, not a bulk capture API.- A request is point-in-time, but the enforcement is incomplete. The CRD requires non-empty
uid,apiVersion,kind, andnamefor Snapshot mode, but has no transition-CEL makingspecimmutable. The SDK detects a changed existing target only whenEnsureVCRreconciles it again. The storage-foundation controller currently resolves the live PVC by request namespace and target name, does not requireapiVersion: v1orkind: PersistentVolumeClaim, and does not compare the live PVC UID withspec.target.uid; the UID is used in deterministic artifact naming. Server-side immutability/typed drift is backlog item #26 and the remaining UID/GVK/admission hardening is #28. The CRD only requirestargetfor Snapshot mode, although the Detach controller path requires it too. status.data.artifactRefpoints to the durableVolumeSnapshotContentorPersistentVolume. The source PVC identity remains inspec.targetand is not duplicated in status.Ready=True/Completedis success.Ready=False/TargetsPendingis non-terminal: CSI capture is still retrying. In particular,VolumeSnapshotContent.status.errordoes not by itself make the request terminal.- Any other VCR
Ready=Falsereason is terminal. - Capture domains using the current state-snapshotter SDK contract create or adopt a VCR through
snapshotsdk.EnsureVolumeCapture, publish its name, and drive their own lifecycle throughDomainCaptureStatus(...).Phase(...).Reason(...).Message(...).Apply(ctx). Regular domains publish MCR/VCR plans beforePhasePlanned; current subtree-gated aggregators may publish their own MCR afterPhasePlannedas a compatibility exception while waiting for persisted descendant manifests. - Domains do not read VCR conditions or write VCR status. The state-snapshotter core classifies a
terminal VCR failure as
Ready=False/VolumeCaptureFailedon the snapshot path. A domain observes the resulting core-owned state throughsnapshotsdk.CoreCaptureOutcomeand publishesPhaseFinishedafter capture and any domain-specific consistency action. Childless domains may publishPhaseFinishedimmediately once the core reports capture complete. The target protocol removes the late-own-MCR exception by publishing every node’s own MCR beforePhasePlanned. - The in-tree VolumeSnapshot domain controller follows this contract: a missing source PVC remains
recoverable in
PhasePlanning, the published MCR freezes the plan atPhasePlanned, successful core capture advances the leaf toPhaseFinished, and core-owned terminal failures remain inReady.
VolumeRestoreRequest
VRR asks the patched external-provisioner to create and bind one PVC from a
VolumeSnapshotContent or PersistentVolume.
apiVersion: storage-foundation.deckhouse.io/v1alpha1
kind: VolumeRestoreRequest
metadata:
name: restore-data
namespace: restore-ns
spec:
sourceRef:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
name: snapshot-73a4cda0-4f2c8a91d0e3
pvcTemplate:
metadata:
name: data
spec:
accessModes: [ReadWriteOnce]
storageClassName: local
volumeMode: Filesystem
fsType: ext4
status:
pvcRef:
kind: PersistentVolumeClaim
namespace: restore-ns
name: data
uid: "8c37aa04-af6e-4671-9446-87062a18c189"
completionTimestamp: "2026-07-23T12:36:04Z"
conditions:
- type: Ready
status: "True"
lastTransitionTime: "2026-07-23T12:36:04Z"
reason: Completed
message: "PVC restore-ns/data restored successfully"Contract:
- The CRD schema requires
sourceRef.name,pvcTemplate, andpvcTemplate.metadata.name. Restore is never cross-namespace. - The executor additionally requires non-empty
pvcTemplate.spec.storageClassNameand an exactpvcTemplate.spec.volumeModeofBlockorFilesystem. These fields are optional in the current schema. A schema-accepted request that omits either field is ignored by the executor with an event; the controller keeps waiting for a PVC without writingReadyorcompletionTimestamp. Such a VRR is non-terminal and therefore immortal to generic GC. This malformed empty-status gap needs a code fix; documentation does not make it an accepted execution contract. - The same empty-status wait can occur for invalid
accessModes, a missing StorageClass, or a StorageClass handled by another provisioner. Some paths emit an event and some are silently ignored; none currently gives the VRR controller a terminal result. pvcTemplateis only partially materialized, and source kinds differ. The executor validates template storage class and volume mode for every request. For aVolumeSnapshotContentsource it uses the template’s storage class, volume mode and access modes (defaultReadWriteOnce), plus rootfsTypefor Filesystem volumes. For aPersistentVolumesource, the source PV is authoritative for volume mode, access modes, filesystem type and capacity; corresponding template values are not the effective restore shape. Neither path copies template labels/annotations or treatspvcTemplate.spec.resources.requests.storageas authoritative.- Supported source kinds are
VolumeSnapshotContentandPersistentVolume. The current controller and executor select a source bykindandname;sourceRef.apiVersion,namespace, anduidare not enforced against the live source. Backlog item #28 tracks source identity and admission hardening. - The patched external-provisioner watches VRRs, calls CSI
CreateVolume, and creates the PV/PVC. It must not write VRR status. VolumeRestoreRequestControlleris the only status writer. It validates the source, observes the provisioned PVC, and publishespvcRef,completionTimestamp, andReady.- The current
pvcRefwriter publisheskind,namespace,name, anduid, but leaves the optionalapiVersionempty; the example intentionally matches the writer. Consumers must not require that optional field until the writer starts publishing it. - A terminal VRR is one-shot; create a new request for another attempt.
Current conditions and reasons
| Resource | Reasons written by the current controller |
|---|---|
| VCR | Completed, TargetsPending, InternalError, NotFound, RBACDenied; InvalidMode remains a defensive writer path although the CRD enum rejects unknown modes |
| VRR | Completed, InvalidSource, InternalError, NotFound |
SnapshotCreationFailed is compatibility-only and is no longer emitted: a VCR-side
VolumeSnapshotContent.status.error stays TargetsPending. The shared constants Incompatible,
UnsupportedTargetKind, PVBound, and RestoreFailed are currently unused by both request
controllers. A VRR source VSC with status.error is a different path and is finalized as
Ready=False/InternalError.
Retention and deletion
Terminal VCR/VRR objects are deleted by cron-driven generic GC using
status.completionTimestamp. Defaults:
| Variable | Default |
|---|---|
GC_VCR_TTL / GC_VRR_TTL |
24h |
GC_VCR_SCHEDULE / GC_VRR_SCHEDULE |
0 * * * * |
There are no per-object TTL annotations and no module settings for these values.
On the successful state-snapshotter path, core may delete a VCR earlier after it has persisted the
data handoff; generic GC is the cleanup path for terminal leftovers. A request without a terminal
Ready condition and completionTimestamp, including the malformed VRR case above, is not collected.
The current VRR keeper is not connected to the executor-created restore target PVC, so collecting the
VRR does not delete that PVC.
Validation and RBAC
Validation is performed by CRD schema/CEL plus the controllers; there is no VCR/VRR admission
webhook performing SelfSubjectAccessReview.
| Actor | Effective/request-specific access |
|---|---|
Deckhouse User / RBAC v2 viewer |
Cluster-wide get, list, watch on VCR and VRR |
Deckhouse ClusterEditor / RBAC v2 manager |
Mutating verbs create, update, patch, delete, deletecollection; effective read access is inherited through the separately aggregated viewer/User grants; no request /status grant |
| Capture domain using snapshotsdk | Needs VCR get/create/patch (and list/watch if its deployment watches them); it does not write VCR status |
| state-snapshotter core | Its current template grants VCR CRUD/delete and VCR /status update/patch, although the service contract assigns VCR status to storage-foundation; core reaps a VCR after durable handoff |
| Restore consumer (current DataExport path) | The data-manager role grants VCR/VRR create, delete, list, get, watch, update; it does not receive request /status |
| Patched CSI provisioner executor | Cluster-wide VRR get, list, watch and target-PVC get, list, watch, create, update, patch; no VRR /status |
| storage-foundation controller | VCR/VRR CRUD plus both /status subresources; it is the request status writer and manages the request-following ObjectKeepers |
The user-facing grants mean these resources are not effectively controller-only today, despite their
intended service-resource role. The 040-vrr-provisioner-rbac hook currently binds the executor grant
only to the csi ServiceAccount in d8-sds-local-volume. Generic cross-driver VRR support requires
extending the shared CSI deployment/RBAC contract.
The Deckhouse Kubernetes Platform installs CRDs but does not remove them when a module is disabled. If you no longer need the created CRDs, delete them.
DataExport
Short names: de
Scope: Namespaced
Version: v1alpha1
-
objectspec
-
stringspec.publicIngressType of public ingress for external access.
Allowed values:
KubernetesAPI,ConsoleFrontend -
booleanspec.publishEnable external access to the exporter pod outside the cluster.
-
objectspec.targetRef
Required value
GroupKind reference to the target resource for export (namespace is implicit = the DataExport’s own namespace). Live PersistentVolumeClaim and VirtualDisk are exported directly; any other (snapshot) kind is resolved generically through the leaf’s bound SnapshotContent.dataRef and restored via a VolumeRestoreRequest. A bare cluster-scoped VolumeSnapshotContent is rejected.-
stringspec.targetRef.groupAPI group of the target resource ("" / omitted for the core group, e.g. for PersistentVolumeClaim).
-
stringspec.targetRef.kind
Required value
Kind of the target (e.g. PersistentVolumeClaim, VirtualDisk, VolumeSnapshot, VirtualDiskSnapshot).Minimal length:
1 -
stringspec.targetRef.name
Required value
Name of the target resource for export.Minimal length:
1
-
-
stringspec.ttl
Required value
Time-to-live duration after the last user request. Acceptable values - <number>s, <number>m, <number>h, e.g. 5m, 2h45m, 1dPattern:
^([0-9]+(\.[0-9]+)?h)?([0-9]+(\.[0-9]+)?m)?([0-9]+s)?$
-
-
objectstatusStatus information for the DataExport resource.
-
stringstatus.accessTimestampTimestamp of the last access to the exported data.
-
stringstatus.caBase64 encoded CA certificate for TLS connection to the exporter pod.
-
stringstatus.completionTimestampTime the DataExport reached a terminal phase (Expired or Failed). Set once by the controller; the garbage collector measures retention age from this timestamp.
-
array of objectsstatus.conditionsArray of conditions describing the current state of the DataExport resource.
-
stringstatus.conditions.lastTransitionTimeLast time the condition transitioned from one status to another.
-
stringstatus.conditions.messageMessage describing the condition.
-
integerstatus.conditions.observedGenerationObserved generation of the resource when the condition was last updated.
-
stringstatus.conditions.reasonReason for the current condition status.
Allowed values:
Pending,ServerReady,ValidationFailed,TargetNotReady,TargetNotFound,PVConflict,DeploymentFailed,CleanupFailed,PublishFailed,Expired -
stringstatus.conditions.statusStatus of the condition.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typeType of the condition.
Allowed values:
Ready
-
-
stringstatus.phaseCoarse-grained lifecycle state, written exclusively by the controller: Pending → Ready → Expired | Failed (a DataExport has no Completed phase).
Terminatingdenotes an object with a deletion timestamp and is a transient state, not an outcome.Expiredis a normal terminal outcome (the idle-TTL window elapsed), not a failure.Allowed values:
Pending,Ready,Expired,Failed,Terminating -
stringstatus.publicURLPublic URL for external access (e.g., https://api.<public-domain>/<namespace>/<target-kind>/<target-name>/). Here <target-kind> is the short kind of the export target: pvc, vd or snap (any snapshot-backed target), and <target-name> is the value of spec.targetRef.name.
-
stringstatus.serverStateRaw progress signal reported by the exporter server pod (the only writer):
Readywhen the server is serving,IdleExpiredwhen the idle-TTL window elapsed. The controller derives phase and conditions from it.Allowed values:
Ready,IdleExpired -
stringstatus.urlInternal URL of the exporter pod (e.g., https://X.X.X.X:8085).
-
stringstatus.volumeModeVolume mode of the exported data.
Allowed values:
Block,Filesystem
-
DataImport
Short names: di
Scope: Namespaced
Version: v1alpha1
-
objectspec
-
stringspec.mode
Discriminator selecting what the import does with the bytes:
CreatePVC: write into a preserved, newly created PVC (pvcTemplate). No durable artifact.PopulateData: stage the bytes into a transient scratch volume (storageParams) and capture them into a durable VolumeSnapshotContent for the already-existing snapshot node referenced bysnapshotRef.
Default:
CreatePVCAllowed values:
CreatePVC,PopulateData -
booleanspec.publishExpose the importer pod outside the cluster.
Default:
false -
objectspec.pvcTemplateCreatePVC only. PersistentVolumeClaim template fully describing the target PVC the imported bytes are written into; the PVC is preserved after the import.
-
objectspec.pvcTemplate.metadataPersistentVolumeClaim metadata.
-
objectspec.pvcTemplate.metadata.annotationsPersistentVolumeClaim annotations.
-
objectspec.pvcTemplate.metadata.labelsPersistentVolumeClaim labels.
-
stringspec.pvcTemplate.metadata.namePersistentVolumeClaim name.
-
-
objectspec.pvcTemplate.specPersistentVolumeClaim specification.
-
array of stringsspec.pvcTemplate.spec.accessModesDesired access modes for the volume.
-
stringspec.pvcTemplate.spec.accessModes.Element of the array
Allowed values:
ReadWriteOnce,ReadOnlyMany,ReadWriteMany,ReadWriteOncePod
-
-
objectspec.pvcTemplate.spec.resourcesMinimum resource requirements for the volume.
-
objectspec.pvcTemplate.spec.resources.requestsMinimum amount of compute resources required.
-
-
stringspec.pvcTemplate.spec.storageClassNameName of the StorageClass required by the PersistentVolumeClaim.
-
stringspec.pvcTemplate.spec.volumeModeVolume mode required by the PersistentVolumeClaim.
Allowed values:
Block,Filesystem
-
-
-
objectspec.snapshotRefPopulateData only. Reference to the already-existing xxxSnapshot node the produced durable artifact belongs to (namespace implicit = the DataImport namespace). Set by the external creator (d8/user/backup); the DataImport controller does not read it — it exists so the state-snapshotter reverse-lookup can match the leaf against
spec.snapshotRef.-
stringspec.snapshotRef.apiVersionGroup/version of the snapshot node (e.g.
snapshot.storage.k8s.io/v1). -
stringspec.snapshotRef.kind
Required value
Kind of the snapshot node (e.g.VolumeSnapshot,VirtualDiskSnapshot).Minimal length:
1 -
stringspec.snapshotRef.name
Required value
Name of the snapshot node.Minimal length:
1
-
-
objectspec.storageParamsPopulateData only. Parameters of the transient scratch volume the imported bytes are staged into before capture; it is destroyed after the durable VolumeSnapshotContent is produced. Its StorageClass must be snapshot-capable (it references a VolumeSnapshotClass via the
storage.deckhouse.io/volumesnapshotclassannotation).-
stringspec.storageParams.size
Required value
Requested size of the scratch PVC (a Kubernetes quantity, e.g.10Gi).Minimal length:
1 -
stringspec.storageParams.storageClassName
Required value
StorageClass of the scratch PVC (must be snapshot-capable).Minimal length:
1 -
stringspec.storageParams.volumeModeVolume mode of the scratch PVC. Defaults to
Filesystemwhen omitted.Allowed values:
Block,Filesystem
-
-
stringspec.ttl
Required value
Time-to-live duration after the last user request.
Acceptable values:
<number>s<number>m<number>h
For example,
5m,2h45m, or1d.Pattern:
^([0-9]+(\.[0-9]+)?h)?([0-9]+(\.[0-9]+)?m)?([0-9]+s)?$ -
booleanspec.waitForFirstConsumerIf set to
false, a load pod is created to trigger volume population when the StorageClass hasvolumeBindingModeset toWaitForFirstConsumer.Default:
true
-
-
objectstatusDataImport resource status details.
-
stringstatus.accessTimestampLast access timestamp updated by the importer pod.
-
stringstatus.caBase64-encoded CA certificate for establishing a TLS connection to the importer pod.
-
stringstatus.completionTimestampTime the DataImport reached a terminal phase (Completed, Expired or Failed). Set once by the controller; the garbage collector measures retention age from this timestamp.
-
array of objectsstatus.conditions
-
stringstatus.conditions.lastTransitionTime
Last time the condition transitioned from one status to another.
This should be when the underlying condition changed. If the last transition time is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.message
Human-readable message indicating details about the transition.
This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
The
.metadata.generationthat the condition was set based upon.For instance, if
.metadata.generationis currently 12, but the.status.conditions[x].observedGenerationis 9, the condition is out of date. with respect to the current state of the instance.Allowed values:
0 <= X -
stringstatus.conditions.reasonCurrent condition status reason.
Allowed values:
Pending,PVCCreated,ServerReady,InProgress,Expired,Deleted,UploadFinished,Completed,Failed,TargetFailed,CleanupFailed -
stringstatus.conditions.statusCondition status.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typeCondition type.
Allowed values:
Ready,UploadFinished,Completed
-
-
objectstatus.dataCaptured-data block for this import. Carries the durable cluster-scoped data artifact under data.artifactRef (a VolumeSnapshotContent). Populated once the backing VolumeCaptureRequest completes.
-
objectstatus.data.artifactRefReference to the durable cluster-scoped data artifact produced by this import (a VolumeSnapshotContent).
-
stringstatus.data.artifactRef.apiVersion
-
stringstatus.data.artifactRef.kind
-
stringstatus.data.artifactRef.name
-
stringstatus.data.artifactRef.uidUID of the durable data artifact (for example the VolumeSnapshotContent UID), making the reference self-contained. Optional; producers fill it best-effort.
-
-
stringstatus.data.fsType
Filesystem the imported bytes were actually written onto, observed on the scratch volume’s PersistentVolume (
spec.csi.fsType) before that volume was destroyed. The scratch volume is deleted right after capture and the artifact itself records no filesystem type, so this is the only surviving record of it.Empty means “not known”, never “default”: a Block import carries no filesystem at all, and a CSI driver may record no filesystem type on the volume.
-
-
stringstatus.phaseCoarse-grained lifecycle state, written exclusively by the controller: Pending → Ready → Completed | Expired | Failed.
Terminatingdenotes an object with a deletion timestamp and is a transient state, not an outcome.Expiredis a normal terminal outcome (the idle-TTL window elapsed), not a failure.Allowed values:
Pending,Ready,Completed,Expired,Failed,Terminating -
stringstatus.publicURLPublic URL of the importer service.
-
stringstatus.serverStateRaw progress signal reported by the importer server pod (the only writer):
Readywhen the server is serving,Finishedwhen the client upload finished durably,IdleExpiredwhen the idle-TTL window elapsed. The controller derives phase and conditions from it.Allowed values:
Ready,Finished,IdleExpired -
stringstatus.urlInternal URL of the importer service.
-
stringstatus.volumeModeVolume mode of the exported data.
Allowed values:
Block,Filesystem
-
VolumeSnapshotClass
Short names: vsclass, vsclasses
Scope: Cluster
-
stringapiVersionAPI version of this object representation. Servers convert recognized schemas to the latest internal value and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringdeletionPolicy
Controls the deletion behavior of VolumeSnapshotContent and its physical snapshot when the bound VolumeSnapshot is deleted. Supported values:
Retain: VolumeSnapshotContent and its physical snapshot on the underlying storage system are preserved.Delete: VolumeSnapshotContent and its physical snapshot on the underlying storage system are removed.
Allowed values:
Delete,Retain -
stringdriverName of the storage driver that handles this VolumeSnapshotClass.
-
stringkindKind of REST resource this object represents. Servers may infer this value from the endpoint the client submits requests to. Cannot be updated after creation. Value must be in CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectparametersKey-value map of driver-specific parameters used when creating snapshots. Parameters are not interpreted by Kubernetes.
-
stringapiVersionAPI version of this object representation. Servers convert recognized schemas to the latest internal value and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringdeletionPolicy
Controls the deletion behavior of VolumeSnapshotContent and its physical snapshot when the bound VolumeSnapshot is deleted. Supported values:
Retain: VolumeSnapshotContent and its physical snapshot on the underlying storage system are preserved.Delete: VolumeSnapshotContent and its physical snapshot on the underlying storage system are removed.
Allowed values:
Delete,Retain -
stringdriverName of the storage driver that handles this VolumeSnapshotClass.
-
stringkindKind of REST resource this object represents. Servers may infer this value from the endpoint the client submits requests to. Cannot be updated after creation. Value must be in CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectparametersKey-value map of driver-specific parameters used when creating snapshots. Parameters are not interpreted by Kubernetes.
VolumeSnapshotContent
Short names: vsc, vscs
Scope: Cluster
-
stringapiVersionAPI version of this object representation. Servers convert recognized schemas to the latest internal value and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind of REST resource this object represents. Servers may infer this value from the endpoint the client submits requests to. Cannot be updated after creation. Value must be in CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspecProperties of VolumeSnapshotContent created by the underlying storage system.
-
stringspec.deletionPolicy
Required value
Controls deletion behavior of VolumeSnapshotContent and its physical snapshot when the bound VolumeSnapshot is deleted. Supported values:
Retain: VolumeSnapshotContent and its physical snapshot on the underlying storage system are preserved.Delete: VolumeSnapshotContent and its physical snapshot on the underlying storage system are removed.
For dynamically provisioned snapshots, automatically filled by the CSI snapshotter sidecar with the
DeletionPolicyfield defined in the corresponding VolumeSnapshotClass. For pre-existing snapshots, users must specify when creating the VolumeSnapshotContent object.Allowed values:
Delete,Retain -
stringspec.driver
Required value
CSI driver name used to create the physical snapshot on the underlying storage system. Must be the same as the name returned by the CSI GetPluginName() call for that driver. -
objectspec.source
Required value
Specifies whether the snapshot is (or should be) dynamically provisioned or already exists and requires a Kubernetes object representation. Immutable after creation.-
stringspec.source.snapshotHandleCSI
snapshot_idof a pre-existing snapshot on the underlying storage system for which a Kubernetes object representation was (or should be) created. Immutable. -
stringspec.source.volumeHandleCSI
volume_idof the volume from which a snapshot should be dynamically taken. Immutable.
-
-
stringspec.sourceVolumeModeMode of the volume whose snapshot is taken. Can be either
FilesystemorBlock. If not specified, the source volume’s mode is unknown. Immutable. -
stringspec.volumeSnapshotClassNameVolumeSnapshotClass name from which this snapshot was (or will be) created. After provisioning, the VolumeSnapshotClass may be deleted or recreated with different values and should not be referenced post-snapshot creation.
-
objectspec.volumeSnapshotRefVolumeSnapshot object (hereinafter referred to as the referent) to which this VolumeSnapshotContent is bound.
VolumeSnapshot.Spec.VolumeSnapshotContentNamefield must reference this VolumeSnapshotContent name for the bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent object, name and namespace of the VolumeSnapshot object must be provided for binding. Immutable after creation.-
stringspec.volumeSnapshotRef.apiVersionAPI version of the referent.
-
stringspec.volumeSnapshotRef.fieldPathIf referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as
desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like:spec.containers{name}(wherenamerefers to the name of the container that triggered the event) or if no container name is specifiedspec.containers[2](container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. -
stringspec.volumeSnapshotRef.kindKind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
stringspec.volumeSnapshotRef.nameName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
stringspec.volumeSnapshotRef.namespaceNamespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-
stringspec.volumeSnapshotRef.resourceVersionSpecific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-
stringspec.volumeSnapshotRef.uidUID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-
-
-
objectstatusCurrent information of a snapshot.
-
integerstatus.creationTimeTimestamp when the point-in-time snapshot is taken by the underlying storage system. For dynamic snapshot creation, filled by the CSI snapshotter sidecar with the
creation_timevalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with thecreation_timevalue returned from the CSIListSnapshotsgRPC call if the driver supports it. If not specified, the creation time is unknown. Format is a Unix nanoseconds time encoded as an int64. On Unix, the commanddate +%s%Nreturns the current time in nanoseconds since 1970-01-01 00:00:00 UTC. -
objectstatus.errorLast observed error during snapshot creation, if any. Upon success after retry, the field is cleared.
-
stringstatus.error.messageDetails of the encountered error during snapshot creation if specified. Note: message may be logged, and should not contain sensitive information.
-
stringstatus.error.timeTimestamp when the error was encountered.
-
-
booleanstatus.readyToUseIndicates whether a snapshot is ready to be used to restore a volume. For dynamic snapshot creation, filled by the CSI snapshotter sidecar with the
ready_to_usevalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with theready_to_usevalue returned from the CSIListSnapshotsgRPC call if the driver supports it, otherwise set toTrue. If not specified, the readiness of a snapshot is unknown. -
integerstatus.restoreSizeComplete size of the snapshot in bytes. For dynamic snapshot creation, filled by the CSI snapshotter sidecar with the
size_bytesvalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with thesize_bytesvalue returned from the CSIListSnapshotsgRPC call if the driver supports it. When restoring a volume from this snapshot, the volume size must not be smaller than therestoreSizeif specified, otherwise the restoration will fail. If not specified, the size is unknown.Allowed values:
0 <= X -
stringstatus.snapshotHandleCSI
snapshot_idof a snapshot on the underlying storage system. If not specified, dynamic snapshot creation has either failed or is still in progress. -
stringstatus.volumeGroupSnapshotHandleCSI
group_snapshot_idof a group snapshot on the underlying storage system.
-
-
stringapiVersionAPI version of this object representation. Servers convert recognized schemas to the latest internal value and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind of REST resource this object represents. Servers may infer this value from the endpoint the client submits requests to. Cannot be updated after creation. Value must be in CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectspecProperties of VolumeSnapshotContent created by the underlying storage system.
-
stringspec.deletionPolicy
Required value
Controls deletion behavior of VolumeSnapshotContent and its physical snapshot when the bound VolumeSnapshot is deleted. Supported values:
Retain: VolumeSnapshotContent and its physical snapshot on the underlying storage system are preserved.Delete: VolumeSnapshotContent and its physical snapshot on the underlying storage system are removed. For dynamically provisioned snapshots, automatically filled by the CSI snapshotter sidecar with theDeletionPolicyfield defined in the corresponding VolumeSnapshotClass. For pre-existing snapshots, users must specify when creating the VolumeSnapshotContent object.
Allowed values:
Delete,Retain -
stringspec.driver
Required value
CSI driver name used to create the physical snapshot on the underlying storage system. -
objectspec.source
Required value
Specifies whether the snapshot is (or should be) dynamically provisioned or already exists and requires a Kubernetes object representation. Immutable after creation.-
stringspec.source.snapshotHandleCSI
snapshot_idof a pre-existing snapshot on the underlying storage system for which a Kubernetes object representation was (or should be) created. Immutable. -
stringspec.source.volumeHandleCSI
volume_idof the volume from which a snapshot should be dynamically taken. Immutable.
-
-
stringspec.volumeSnapshotClassNameVolumeSnapshotClass name from which this snapshot was (or will be) created. After provisioning, the VolumeSnapshotClass may be deleted or recreated with different values and should not be referenced post-snapshot creation.
-
objectspec.volumeSnapshotRefVolumeSnapshot object (hereinafter referred to as the referent) to which this VolumeSnapshotContent is bound.
VolumeSnapshot.Spec.VolumeSnapshotContentNamefield must reference this VolumeSnapshotContent name for the bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent object, name and namespace of the VolumeSnapshot object must be provided for binding. Immutable after creation.-
stringspec.volumeSnapshotRef.apiVersionAPI version of the referent.
-
stringspec.volumeSnapshotRef.fieldPathIf referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as
desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like:spec.containers{name}(wherenamerefers to the name of the container that triggered the event) or if no container name is specifiedspec.containers[2](container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. -
stringspec.volumeSnapshotRef.kindKind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
stringspec.volumeSnapshotRef.nameName of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
stringspec.volumeSnapshotRef.namespaceNamespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-
stringspec.volumeSnapshotRef.resourceVersionSpecific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-
stringspec.volumeSnapshotRef.uidUID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-
-
-
objectstatusCurrent information of a snapshot.
-
integerstatus.creationTimeTimestamp when the point-in-time snapshot is taken by the underlying storage system. For dynamic snapshot creation, filled by the CSI snapshotter sidecar with the
creation_timevalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with thecreation_timevalue returned from the CSIListSnapshotsgRPC call if the driver supports it. If not specified, the creation time is unknown. Format is a Unix nanoseconds time encoded as an int64. On Unix, the commanddate +%s%Nreturns the current time in nanoseconds since 1970-01-01 00:00:00 UTC. -
objectstatus.errorLast observed error during snapshot creation, if any. Upon success after retry, the field is cleared.
-
stringstatus.error.messageDetails of the encountered error during snapshot creation if specified. Note: message may be logged, and should not contain sensitive information.
-
stringstatus.error.timeTimestamp when the error was encountered.
-
-
booleanstatus.readyToUseIndicates whether a snapshot is ready to be used to restore a volume. For dynamic snapshot creation, filled by the CSI snapshotter sidecar with the
ready_to_usevalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with theready_to_usevalue returned from the CSIListSnapshotsgRPC call if the driver supports it, otherwise set toTrue. If not specified, the readiness of a snapshot is unknown. -
integerstatus.restoreSizeComplete size of the snapshot in bytes. For dynamic snapshot creation, filled by the CSI snapshotter sidecar with the
size_bytesvalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with thesize_bytesvalue returned from the CSIListSnapshotsgRPC call if the driver supports it. When restoring a volume from this snapshot, the volume size must not be smaller than therestoreSizeif specified, otherwise the restoration will fail. If not specified, the size is unknown.Allowed values:
0 <= X -
stringstatus.snapshotHandleCSI
snapshot_idof a snapshot on the underlying storage system. If not specified, dynamic snapshot creation has either failed or is still in progress.
-
VolumeSnapshot
Short names: vs
Scope: Namespaced
-
stringapiVersionAPI version of this object representation. Servers convert recognized schemas to the latest internal value and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind of REST resource this object represents. Servers may infer this value from the endpoint the client submits requests to. Cannot be updated after creation. Value must be in CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspecDesired characteristics of a snapshot requested by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots
-
stringspec.modemode selects how this VolumeSnapshot obtains its content and is immutable once set. Capture (default): dynamic CSI snapshot from spec.source. Import: the data artifact is produced by a DataImport in the same namespace (reverse-lookup by DataImport.spec.snapshotRef); spec.source is omitted (required only when mode != Import) and the upstream snapshot-controller does not reconcile such a VolumeSnapshot - the state-snapshotter common controller binds it (sets status). Deckhouse extension: parity with spec.mode on every other state-snapshotter snapshot kind.
Default:
CaptureAllowed values:
Capture,Import -
objectspec.sourcesource specifies where a snapshot will be created from. Required unless mode is Import (an import VolumeSnapshot omits it - the data artifact comes from a DataImport; symmetry with the other snapshot kinds). May be empty: restore intent (backup controller sets volumeSnapshotContentName after restore). Otherwise exactly one of persistentVolumeClaimName or volumeSnapshotContentName must be set. Immutable after creation (except one-shot set of volumeSnapshotContentName from empty).
-
stringspec.source.persistentVolumeClaimNameName of the PersistentVolumeClaim object representing the volume from which a snapshot should be created. PVC must be in the same namespace as the VolumeSnapshot object. Specified if the snapshot does not exist and needs to be created. Immutable.
-
stringspec.source.volumeSnapshotContentNamevolumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent object representing an existing volume snapshot. This field should be set if the snapshot already exists and only needs a representation in Kubernetes. For restore intent, backup controller may set this once from empty after successful restore (one-shot update).
-
-
stringspec.volumeSnapshotClassNameName of the VolumeSnapshotClass requested by the VolumeSnapshot. May be empty to use the default SnapshotClass. A cluster may have multiple default Volume SnapshotClasses: one per CSI Driver. If a SnapshotClass is not specified, VolumeSnapshotSource is checked to determine the associated CSI Driver, and the default VolumeSnapshotClass for that CSI Driver is used. If multiple VolumeSnapshotClasses exist for a CSI Driver and more than one is marked as default, CreateSnapshot fails and generates an event. Empty string is not allowed.
-
-
objectstatusCurrent information of a snapshot. Before using this object, verify that binding between VolumeSnapshot and VolumeSnapshotContent objects is successful by ensuring both objects point at each other.
-
stringstatus.boundSnapshotContentNameName of the cluster-scoped state-snapshotter SnapshotContent (state-snapshotter.deckhouse.io) that backs this VolumeSnapshot as a logical node in a snapshot tree. Written by the state-snapshotter common controller in addition to boundVolumeSnapshotContentName. Deckhouse extension.
-
stringstatus.boundVolumeSnapshotContentNameName of the VolumeSnapshotContent object to which this VolumeSnapshot object is bound. If not specified, the VolumeSnapshot object has not been successfully bound to a VolumeSnapshotContent object yet. Note: To prevent security issues, verify that binding between VolumeSnapshot and VolumeSnapshotContent objects is successful by ensuring both objects point at each other before using this object.
-
objectstatus.captureStatecaptureState collects the state-snapshotter capture signals mirrored onto this VolumeSnapshot when it is a domain snapshot node: commonController holds the core-written capture-leg latches, and domainSpecificController holds the domain-written planning refs and lifecycle. Written by the state-snapshotter controllers. Deckhouse extension.
-
objectstatus.captureState.commonControllercommonController holds the core-written capture-leg success latches. Single writer: state-snapshotter core.
-
booleanstatus.captureState.commonController.dataCaptureddataCaptured is the data-leg success latch, declared only where a data line exists.
-
booleanstatus.captureState.commonController.manifestCapturedmanifestCaptured is the manifest-leg success latch (declared on every capture node).
-
booleanstatus.captureState.commonController.subtreeManifestsPersistedsubtreeManifestsPersisted is a core-written mirror of the bound SnapshotContent’s recursive “this node and all descendants archived their manifests” latch. Monotonic (false -> true).
-
booleanstatus.captureState.commonController.subtreePlannedsubtreePlanned is a core-computed monotonic recursive latch: true once this node reached capture barrier 1 (domainSpecificController.phase >= Planned) and every direct child’s own subtreePlanned is true (the whole subtree finished planning). Domains only read it. Monotonic (false -> true).
-
-
objectstatus.captureState.domainSpecificControllerdomainSpecificController holds the domain-written planning refs and lifecycle. Single writer: domain (SDK).
-
array of objectsstatus.captureState.domainSpecificController.excludedRefsexcludedRefs are the domain’s direct exclusion vetoes at this node (the source objects it dropped via the exclude label while enumerating its children).
-
stringstatus.captureState.domainSpecificController.excludedRefs.apiVersion
-
stringstatus.captureState.domainSpecificController.excludedRefs.kind
-
stringstatus.captureState.domainSpecificController.excludedRefs.name
-
-
stringstatus.captureState.domainSpecificController.manifestCaptureRequestNamemanifestCaptureRequestName is the temporary MCR owned by the domain node while own-scope capture runs.
-
stringstatus.captureState.domainSpecificController.messagemessage is a human-readable detail for phase=Failed.
-
stringstatus.captureState.domainSpecificController.phasephase is the domain lifecycle barrier (Planning|Planned|Finished|Failed).
Allowed values:
Planning,Planned,Finished,Failed -
stringstatus.captureState.domainSpecificController.reasonreason is a short, machine-readable reason for phase=Failed (free-form domain string).
-
stringstatus.captureState.domainSpecificController.volumeCaptureRequestNamevolumeCaptureRequestName is the temporary VCR owned by a data-leaf domain node while the data leg runs.
-
-
-
array of objectsstatus.childrenSnapshotRefschildrenSnapshotRefs are the direct child snapshot edges when this VolumeSnapshot participates in a snapshot tree. A VolumeSnapshot is a data leaf, so this is normally empty; kept for uniformity across snapshot kinds. Deckhouse extension.
-
stringstatus.childrenSnapshotRefs.apiVersion
-
stringstatus.childrenSnapshotRefs.kind
-
stringstatus.childrenSnapshotRefs.name
-
-
array of objectsstatus.conditionsconditions report the state-snapshotter protocol readiness (conditions[Ready] is the single user-facing condition derived by the core), distinct from the CSI readyToUse binding signal. Written by the state-snapshotter core. Deckhouse extension.
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
stringstatus.creationTimeTimestamp when the point-in-time snapshot is taken by the underlying storage system. For dynamic snapshot creation, filled by the snapshot controller with the
creation_timevalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with thecreation_timevalue returned from the CSIListSnapshotsgRPC call if the driver supports it. If not specified, the creation time of the snapshot is unknown. -
objectstatus.datadata is the self-contained data binding (sourceRef + artifactRef + volume metadata) mirrored from the backing state-snapshotter SnapshotContent.status.data, so d8 resolves the captured-volume descriptor from this namespaced VolumeSnapshot alone. Written by the state-snapshotter common controller. Deckhouse extension.
-
objectstatus.data.artifactRef
Required value
Durable data artifact (a VolumeSnapshotContent).-
stringstatus.data.artifactRef.apiVersion
Required value
-
stringstatus.data.artifactRef.kind
Required value
-
stringstatus.data.artifactRef.name
Required value
-
stringstatus.data.artifactRef.uid
-
-
stringstatus.data.fsTypeSource filesystem type (Filesystem volumes only).
-
stringstatus.data.sizeReal allocated size of the captured volume (e.g. “10Gi”).
-
objectstatus.data.sourceRef
Required value
Captured PersistentVolumeClaim source (uid is the volume identity).-
stringstatus.data.sourceRef.apiVersion
Required value
-
stringstatus.data.sourceRef.kind
Required value
-
stringstatus.data.sourceRef.name
Required value
-
stringstatus.data.sourceRef.namespace
-
stringstatus.data.sourceRef.uid
-
-
stringstatus.data.storageClassNameSource StorageClass of the captured volume.
-
stringstatus.data.volumeModeSource volume mode (Block or Filesystem).
Allowed values:
Block,Filesystem
-
-
objectstatus.errorLast observed error during snapshot creation, if any. Useful to upper level controllers (i.e., application controller) to decide whether to continue waiting for the snapshot to be created based on the error type. The snapshot controller keeps retrying when an error occurs during snapshot creation. Upon success, the field is cleared.
-
stringstatus.error.messageDetails of the encountered error during snapshot creation if specified. Note: message may be logged, and it should not contain sensitive information.
-
stringstatus.error.timeTimestamp when the error was encountered.
-
-
booleanstatus.readyToUseIndicates if the snapshot is ready to be used to restore a volume. For dynamic snapshot creation, filled by the snapshot controller with the
ready_to_usevalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with theready_to_usevalue returned from the CSIListSnapshotsgRPC call if the driver supports it, otherwise set toTrue. If not specified, the readiness of a snapshot is unknown. -
stringstatus.restoreSizeMinimum size of volume required to create a volume from this snapshot. For dynamic snapshot creation, filled by the snapshot controller with the
size_bytesvalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with thesize_bytesvalue returned from the CSIListSnapshotsgRPC call if the driver supports it. When restoring a volume from this snapshot, the volume size must not be smaller than therestoreSizeif specified, otherwise the restoration will fail. If not specified, the size is unknown.Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ -
objectstatus.sourceRefsourceRef is the full reference to the captured live source object (the source PVC), written by the state-snapshotter domain controller (PublishSnapshotSource). Self-contained for import-mode recreation. Deckhouse extension.
-
stringstatus.sourceRef.apiVersion
Required value
-
stringstatus.sourceRef.kind
Required value
-
stringstatus.sourceRef.name
Required value
-
stringstatus.sourceRef.namespaceNamespace of the source object (namespaced sources only).
-
stringstatus.sourceRef.uidUID of the captured live source object (best-effort; used by d8-cli for import-mode recreation).
-
-
stringstatus.volumeGroupSnapshotNameName of the VolumeGroupSnapshot of which this VolumeSnapshot is a part.
-
-
stringapiVersionAPI version of this object representation. Servers convert recognized schemas to the latest internal value and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind of REST resource this object represents. Servers may infer this value from the endpoint the client submits requests to. Cannot be updated after creation. Value must be in CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectspecDesired characteristics of a snapshot requested by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots
-
objectspec.source
Required value
source specifies where a snapshot will be created from. May be empty for restore intent (backup controller sets volumeSnapshotContentName after restore). Otherwise exactly one of persistentVolumeClaimName or volumeSnapshotContentName must be set. Immutable after creation (except one-shot set of volumeSnapshotContentName from empty). Deprecated legacy version: carries NO Deckhouse fork fields (no spec.mode) and is never treated as a domain object; see the v1 schema.-
stringspec.source.persistentVolumeClaimNameName of the PersistentVolumeClaim object representing the volume from which a snapshot should be created. PVC must be in the same namespace as the VolumeSnapshot object. Specified if the snapshot does not exist and needs to be created. Immutable.
-
stringspec.source.volumeSnapshotContentNameName of a pre-existing VolumeSnapshotContent object representing an existing volume snapshot. Specified if the snapshot already exists and only needs a representation in Kubernetes. For restore intent, backup controller may set this once from empty after successful restore (one-shot update).
-
-
stringspec.volumeSnapshotClassNameName of the VolumeSnapshotClass requested by the VolumeSnapshot. May be empty to use the default SnapshotClass. A cluster may have multiple default Volume SnapshotClasses: one per CSI Driver. If a SnapshotClass is not specified, VolumeSnapshotSource is checked to determine the associated CSI Driver, and the default VolumeSnapshotClass for that CSI Driver is used. If multiple VolumeSnapshotClasses exist for a CSI Driver and more than one is marked as default, CreateSnapshot fails and generates an event. Empty string is not allowed.
-
-
objectstatusCurrent information of a snapshot. Before using this object, verify that binding between VolumeSnapshot and VolumeSnapshotContent objects is successful by ensuring both objects point at each other.
-
stringstatus.boundVolumeSnapshotContentNameName of the VolumeSnapshotContent object to which this VolumeSnapshot object is bound. If not specified, the VolumeSnapshot object has not been successfully bound to a VolumeSnapshotContent object yet. Note: To prevent security issues, verify that binding between VolumeSnapshot and VolumeSnapshotContent objects is successful by ensuring both objects point at each other before using this object.
-
stringstatus.creationTimeTimestamp when the point-in-time snapshot is taken by the underlying storage system. For dynamic snapshot creation, filled by the snapshot controller with the
creation_timevalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with thecreation_timevalue returned from the CSIListSnapshotsgRPC call if the driver supports it. If not specified, the creation time of the snapshot is unknown. -
objectstatus.errorLast observed error during snapshot creation, if any. Useful to upper level controllers (i.e., application controller) to decide whether to continue waiting for the snapshot to be created based on the error type. The snapshot controller keeps retrying when an error occurs during snapshot creation. Upon success, the field is cleared.
-
stringstatus.error.messageDetails of the encountered error during snapshot creation if specified. Note: message may be logged, and it should not contain sensitive information.
-
stringstatus.error.timeTimestamp when the error was encountered.
-
-
booleanstatus.readyToUseIndicates if the snapshot is ready to be used to restore a volume. For dynamic snapshot creation, filled by the snapshot controller with the
ready_to_usevalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with theready_to_usevalue returned from the CSIListSnapshotsgRPC call if the driver supports it, otherwise set toTrue. If not specified, the readiness of a snapshot is unknown. -
stringstatus.restoreSizeMinimum size of volume required to create a volume from this snapshot. For dynamic snapshot creation, filled by the snapshot controller with the
size_bytesvalue returned from CSICreateSnapshotgRPC call. For a pre-existing snapshot, filled with thesize_bytesvalue returned from the CSIListSnapshotsgRPC call if the driver supports it. When restoring a volume from this snapshot, the volume size must not be smaller than therestoreSizeif specified, otherwise the restoration will fail. If not specified, the size is unknown.Pattern:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ -
stringstatus.volumeGroupSnapshotNameName of the VolumeGroupSnapshot of which this VolumeSnapshot is a part.
-