Merge pull request #129488 from Madhu-1/vs-v1

Update  snapshot CRDs to v1 in cluster addons
This commit is contained in:
Kubernetes Prow Robot 2025-01-13 08:34:33 -08:00 committed by GitHub
commit 8a5cf7b66f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 883 additions and 775 deletions

View File

@ -5,9 +5,8 @@ metadata:
labels: labels:
addonmanager.kubernetes.io/mode: Reconcile addonmanager.kubernetes.io/mode: Reconcile
annotations: annotations:
controller-gen.kubebuilder.io/version: v0.8.0 api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/814"
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/665" controller-gen.kubebuilder.io/version: v0.15.0
creationTimestamp: null
name: volumesnapshotclasses.snapshot.storage.k8s.io name: volumesnapshotclasses.snapshot.storage.k8s.io
spec: spec:
group: snapshot.storage.k8s.io group: snapshot.storage.k8s.io
@ -36,42 +35,52 @@ spec:
name: v1 name: v1
schema: schema:
openAPIV3Schema: openAPIV3Schema:
description: VolumeSnapshotClass specifies parameters that a underlying storage description: |-
system uses when creating a volume snapshot. A specific VolumeSnapshotClass VolumeSnapshotClass specifies parameters that a underlying storage system uses when
is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses creating a volume snapshot. A specific VolumeSnapshotClass is used by specifying its
are non-namespaced name in a VolumeSnapshot object.
VolumeSnapshotClasses are non-namespaced
properties: properties:
apiVersion: apiVersion:
description: 'APIVersion defines the versioned schema of this representation description: |-
of an object. Servers should convert recognized schemas to the latest APIVersion defines the versioned schema of this representation of an object.
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' Servers should 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
type: string type: string
deletionPolicy: deletionPolicy:
description: deletionPolicy determines whether a VolumeSnapshotContent description: |-
created through the VolumeSnapshotClass should be deleted when its bound deletionPolicy determines whether a VolumeSnapshotContent created through
VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted.
"Retain" means that the VolumeSnapshotContent and its physical snapshot Supported values are "Retain" and "Delete".
on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept.
and its physical snapshot on underlying storage system are deleted. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted.
Required. Required.
enum: enum:
- Delete - Delete
- Retain - Retain
type: string type: string
driver: driver:
description: driver is the name of the storage driver that handles this description: |-
VolumeSnapshotClass. Required. driver is the name of the storage driver that handles this VolumeSnapshotClass.
Required.
type: string type: string
kind: kind:
description: 'Kind is a string value representing the REST resource this description: |-
object represents. Servers may infer this from the endpoint the client Kind is a string value representing the REST resource this object represents.
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
metadata:
type: object
parameters: parameters:
additionalProperties: additionalProperties:
type: string type: string
description: parameters is a key-value map with storage driver specific description: |-
parameters for creating snapshots. These values are opaque to Kubernetes. parameters is a key-value map with storage driver specific parameters for creating snapshots.
These values are opaque to Kubernetes.
type: object type: object
required: required:
- deletionPolicy - deletionPolicy

View File

@ -5,9 +5,8 @@ metadata:
labels: labels:
addonmanager.kubernetes.io/mode: Reconcile addonmanager.kubernetes.io/mode: Reconcile
annotations: annotations:
controller-gen.kubebuilder.io/version: v0.8.0 controller-gen.kubebuilder.io/version: v0.15.0
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/665" api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/955"
creationTimestamp: null
name: volumesnapshotcontents.snapshot.storage.k8s.io name: volumesnapshotcontents.snapshot.storage.k8s.io
spec: spec:
group: snapshot.storage.k8s.io group: snapshot.storage.k8s.io
@ -50,7 +49,8 @@ spec:
jsonPath: .spec.volumeSnapshotRef.name jsonPath: .spec.volumeSnapshotRef.name
name: VolumeSnapshot name: VolumeSnapshot
type: string type: string
- description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent
object is bound.
jsonPath: .spec.volumeSnapshotRef.namespace jsonPath: .spec.volumeSnapshotRef.namespace
name: VolumeSnapshotNamespace name: VolumeSnapshotNamespace
type: string type: string
@ -60,151 +60,206 @@ spec:
name: v1 name: v1
schema: schema:
openAPIV3Schema: openAPIV3Schema:
description: VolumeSnapshotContent represents the actual "on-disk" snapshot description: |-
object in the underlying storage system VolumeSnapshotContent represents the actual "on-disk" snapshot object in the
underlying storage system
properties: properties:
apiVersion: apiVersion:
description: 'APIVersion defines the versioned schema of this representation description: |-
of an object. Servers should convert recognized schemas to the latest APIVersion defines the versioned schema of this representation of an object.
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' Servers should 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
type: string type: string
kind: kind:
description: 'Kind is a string value representing the REST resource this description: |-
object represents. Servers may infer this from the endpoint the client Kind is a string value representing the REST resource this object represents.
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
metadata:
type: object
spec: spec:
description: spec defines properties of a VolumeSnapshotContent created description: |-
by the underlying storage system. Required. spec defines properties of a VolumeSnapshotContent created by the underlying storage system.
Required.
properties: properties:
deletionPolicy: deletionPolicy:
description: deletionPolicy determines whether this VolumeSnapshotContent description: |-
and its physical snapshot on the underlying storage system should deletionPolicy determines whether this VolumeSnapshotContent and its physical snapshot on
be deleted when its bound VolumeSnapshot is deleted. Supported values the underlying storage system should be deleted when its bound VolumeSnapshot is deleted.
are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent Supported values are "Retain" and "Delete".
and its physical snapshot on underlying storage system are kept. "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept.
"Delete" means that the VolumeSnapshotContent and its physical snapshot "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted.
on underlying storage system are deleted. For dynamically provisioned For dynamically provisioned snapshots, this field will automatically be filled in by the
snapshots, this field will automatically be filled in by the CSI CSI snapshotter sidecar with the "DeletionPolicy" field defined in the corresponding
snapshotter sidecar with the "DeletionPolicy" field defined in the VolumeSnapshotClass.
corresponding VolumeSnapshotClass. For pre-existing snapshots, users For pre-existing snapshots, users MUST specify this field when creating the
MUST specify this field when creating the VolumeSnapshotContent VolumeSnapshotContent object.
object. Required. Required.
enum: enum:
- Delete - Delete
- Retain - Retain
type: string type: string
driver: driver:
description: driver is the name of the CSI driver used to create the description: |-
physical snapshot on the underlying storage system. This MUST be driver is the name of the CSI driver used to create the physical snapshot on
the same as the name returned by the CSI GetPluginName() call for the underlying storage system.
that driver. Required. This MUST be the same as the name returned by the CSI GetPluginName() call for
that driver.
Required.
type: string type: string
source: source:
description: source specifies whether the snapshot is (or should be) description: |-
dynamically provisioned or already exists, and just requires a Kubernetes source specifies whether the snapshot is (or should be) dynamically provisioned
object representation. This field is immutable after creation. Required. or already exists, and just requires a Kubernetes object representation.
This field is immutable after creation.
Required.
properties: properties:
snapshotHandle: snapshotHandle:
description: snapshotHandle specifies the CSI "snapshot_id" of description: |-
a pre-existing snapshot on the underlying storage system for snapshotHandle specifies the CSI "snapshot_id" of a pre-existing snapshot on
which a Kubernetes object representation was (or should be) the underlying storage system for which a Kubernetes object representation
created. This field is immutable. was (or should be) created.
type: string
volumeHandle:
description: volumeHandle specifies the CSI "volume_id" of the
volume from which a snapshot should be dynamically taken from.
This field is immutable. This field is immutable.
type: string type: string
type: object x-kubernetes-validations:
oneOf: - message: snapshotHandle is immutable
- required: ["snapshotHandle"] rule: self == oldSelf
- required: ["volumeHandle"] volumeHandle:
sourceVolumeMode: description: |-
description: SourceVolumeMode is the mode of the volume whose snapshot volumeHandle specifies the CSI "volume_id" of the volume from which a snapshot
is taken. Can be either “Filesystem” or “Block”. If not specified, should be dynamically taken from.
it indicates the source volume's mode is unknown. This field is This field is immutable.
immutable. This field is an alpha field.
type: string type: string
x-kubernetes-validations:
- message: volumeHandle is immutable
rule: self == oldSelf
type: object
x-kubernetes-validations:
- message: volumeHandle is required once set
rule: '!has(oldSelf.volumeHandle) || has(self.volumeHandle)'
- message: snapshotHandle is required once set
rule: '!has(oldSelf.snapshotHandle) || has(self.snapshotHandle)'
- message: exactly one of volumeHandle and snapshotHandle must be
set
rule: (has(self.volumeHandle) && !has(self.snapshotHandle)) || (!has(self.volumeHandle)
&& has(self.snapshotHandle))
sourceVolumeMode:
description: |-
SourceVolumeMode is the mode of the volume whose snapshot is taken.
Can be either “Filesystem” or “Block”.
If not specified, it indicates the source volume's mode is unknown.
This field is immutable.
This field is an alpha field.
type: string
x-kubernetes-validations:
- message: sourceVolumeMode is immutable
rule: self == oldSelf
volumeSnapshotClassName: volumeSnapshotClassName:
description: name of the VolumeSnapshotClass from which this snapshot description: |-
was (or will be) created. Note that after provisioning, the VolumeSnapshotClass name of the VolumeSnapshotClass from which this snapshot was (or will be)
may be deleted or recreated with different set of values, and as created.
such, should not be referenced post-snapshot creation. Note that after provisioning, the VolumeSnapshotClass may be deleted or
recreated with different set of values, and as such, should not be referenced
post-snapshot creation.
type: string type: string
volumeSnapshotRef: volumeSnapshotRef:
description: volumeSnapshotRef specifies the VolumeSnapshot object description: |-
to which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName volumeSnapshotRef specifies the VolumeSnapshot object to which this
field must reference to this VolumeSnapshotContent's name for the VolumeSnapshotContent object is bound.
bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent VolumeSnapshot.Spec.VolumeSnapshotContentName field must reference to
object, name and namespace of the VolumeSnapshot object MUST be this VolumeSnapshotContent's name for the bidirectional binding to be valid.
provided for binding to happen. This field is immutable after creation. For a pre-existing VolumeSnapshotContent object, name and namespace of the
VolumeSnapshot object MUST be provided for binding to happen.
This field is immutable after creation.
Required. Required.
properties: properties:
apiVersion: apiVersion:
description: API version of the referent. description: API version of the referent.
type: string type: string
fieldPath: fieldPath:
description: 'If referring to a piece of an object instead of description: |-
an entire object, this string should contain a valid JSON/Go If referring to a piece of an object instead of an entire object, this string
field access statement, such as desiredState.manifest.containers[2]. 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 For example, if the object reference is to a container within a pod, this would take on a value like:
a pod, this would take on a value like: "spec.containers{name}" "spec.containers{name}" (where "name" refers to the name of the container that triggered
(where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with
the event) or if no container name is specified "spec.containers[2]" index 2 in this pod). This syntax is chosen only to have some well-defined way of
(container with index 2 in this pod). This syntax is chosen referencing a part of an object.
only to have some well-defined way of referencing a part of TODO: this design is not final and this field is subject to change in the future.
an object. TODO: this design is not final and this field is
subject to change in the future.'
type: string type: string
kind: kind:
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' description: |-
Kind of the referent.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
name: name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' description: |-
Name of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
type: string type: string
namespace: namespace:
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' description: |-
Namespace of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
type: string type: string
resourceVersion: resourceVersion:
description: 'Specific resourceVersion to which this reference description: |-
is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' Specific 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
type: string type: string
uid: uid:
description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' description: |-
UID of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
type: string type: string
type: object type: object
x-kubernetes-map-type: atomic
x-kubernetes-validations:
- message: both spec.volumeSnapshotRef.name and spec.volumeSnapshotRef.namespace
must be set
rule: has(self.name) && has(self.__namespace__)
required: required:
- deletionPolicy - deletionPolicy
- driver - driver
- source - source
- volumeSnapshotRef - volumeSnapshotRef
type: object type: object
x-kubernetes-validations:
- message: sourceVolumeMode is required once set
rule: '!has(oldSelf.sourceVolumeMode) || has(self.sourceVolumeMode)'
status: status:
description: status represents the current information of a snapshot. description: status represents the current information of a snapshot.
properties: properties:
creationTime: creationTime:
description: creationTime is the timestamp when the point-in-time description: |-
snapshot is taken by the underlying storage system. In dynamic snapshot creationTime is the timestamp when the point-in-time snapshot is taken
creation case, this field will be filled in by the CSI snapshotter by the underlying storage system.
sidecar with the "creation_time" value returned from CSI "CreateSnapshot" In dynamic snapshot creation case, this field will be filled in by the
gRPC call. For a pre-existing snapshot, this field will be filled CSI snapshotter sidecar with the "creation_time" value returned from CSI
with the "creation_time" value returned from the CSI "ListSnapshots" "CreateSnapshot" gRPC call.
gRPC call if the driver supports it. If not specified, it indicates For a pre-existing snapshot, this field will be filled with the "creation_time"
the creation time is unknown. The format of this field is a Unix value returned from the CSI "ListSnapshots" gRPC call if the driver supports it.
nanoseconds time encoded as an int64. On Unix, the command `date If not specified, it indicates the creation time is unknown.
+%s%N` returns the current time in nanoseconds since 1970-01-01 The format of this field is a Unix nanoseconds time encoded as an int64.
00:00:00 UTC. On Unix, the command `date +%s%N` returns the current time in nanoseconds
since 1970-01-01 00:00:00 UTC.
format: int64 format: int64
type: integer type: integer
error: error:
description: error is the last observed error during snapshot creation, description: |-
if any. Upon success after retry, this error field will be cleared. error is the last observed error during snapshot creation, if any.
Upon success after retry, this error field will be cleared.
properties: properties:
message: message:
description: 'message is a string detailing the encountered error description: |-
during snapshot creation if specified. NOTE: message may be message is a string detailing the encountered error during snapshot
logged, and it should not contain sensitive information.' creation if specified.
NOTE: message may be logged, and it should not contain sensitive
information.
type: string type: string
time: time:
description: time is the timestamp when the error was encountered. description: time is the timestamp when the error was encountered.
@ -212,34 +267,40 @@ spec:
type: string type: string
type: object type: object
readyToUse: readyToUse:
description: readyToUse indicates if a snapshot is ready to be used description: |-
to restore a volume. In dynamic snapshot creation case, this field readyToUse indicates if a snapshot is ready to be used to restore a volume.
will be filled in by the CSI snapshotter sidecar with the "ready_to_use" In dynamic snapshot creation case, this field will be filled in by the
value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing CSI snapshotter sidecar with the "ready_to_use" value returned from CSI
snapshot, this field will be filled with the "ready_to_use" value "CreateSnapshot" gRPC call.
returned from the CSI "ListSnapshots" gRPC call if the driver supports For a pre-existing snapshot, this field will be filled with the "ready_to_use"
it, otherwise, this field will be set to "True". If not specified, value returned from the CSI "ListSnapshots" gRPC call if the driver supports it,
it means the readiness of a snapshot is unknown. otherwise, this field will be set to "True".
If not specified, it means the readiness of a snapshot is unknown.
type: boolean type: boolean
restoreSize: restoreSize:
description: restoreSize represents the complete size of the snapshot description: |-
in bytes. In dynamic snapshot creation case, this field will be restoreSize represents the complete size of the snapshot in bytes.
filled in by the CSI snapshotter sidecar with the "size_bytes" value In dynamic snapshot creation case, this field will be filled in by the
returned from CSI "CreateSnapshot" gRPC call. For a pre-existing CSI snapshotter sidecar with the "size_bytes" value returned from CSI
snapshot, this field will be filled with the "size_bytes" value "CreateSnapshot" gRPC call.
returned from the CSI "ListSnapshots" gRPC call if the driver supports For a pre-existing snapshot, this field will be filled with the "size_bytes"
it. When restoring a volume from this snapshot, the size of the value returned from the CSI "ListSnapshots" gRPC call if the driver supports it.
volume MUST NOT be smaller than the restoreSize if it is specified, When restoring a volume from this snapshot, the size of the volume MUST NOT
otherwise the restoration will fail. If not specified, it indicates be smaller than the restoreSize if it is specified, otherwise the restoration will fail.
that the size is unknown. If not specified, it indicates that the size is unknown.
format: int64 format: int64
minimum: 0 minimum: 0
type: integer type: integer
snapshotHandle: snapshotHandle:
description: snapshotHandle is the CSI "snapshot_id" of a snapshot description: |-
on the underlying storage system. If not specified, it indicates snapshotHandle is the CSI "snapshot_id" of a snapshot on the underlying storage system.
that dynamic snapshot creation has either failed or it is still If not specified, it indicates that dynamic snapshot creation has either failed
in progress. or it is still in progress.
type: string
volumeGroupSnapshotHandle:
description: |-
VolumeGroupSnapshotHandle is the CSI "group_snapshot_id" of a group snapshot
on the underlying storage system.
type: string type: string
type: object type: object
required: required:

View File

@ -5,9 +5,8 @@ metadata:
labels: labels:
addonmanager.kubernetes.io/mode: Reconcile addonmanager.kubernetes.io/mode: Reconcile
annotations: annotations:
controller-gen.kubebuilder.io/version: v0.8.0 controller-gen.kubebuilder.io/version: v0.15.0
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/665" api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/814"
creationTimestamp: null
name: volumesnapshots.snapshot.storage.k8s.io name: volumesnapshots.snapshot.storage.k8s.io
spec: spec:
group: snapshot.storage.k8s.io group: snapshot.storage.k8s.io
@ -63,103 +62,140 @@ spec:
name: v1 name: v1
schema: schema:
openAPIV3Schema: openAPIV3Schema:
description: VolumeSnapshot is a user's request for either creating a point-in-time description: |-
VolumeSnapshot is a user's request for either creating a point-in-time
snapshot of a persistent volume, or binding to a pre-existing snapshot. snapshot of a persistent volume, or binding to a pre-existing snapshot.
properties: properties:
apiVersion: apiVersion:
description: 'APIVersion defines the versioned schema of this representation description: |-
of an object. Servers should convert recognized schemas to the latest APIVersion defines the versioned schema of this representation of an object.
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' Servers should 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
type: string type: string
kind: kind:
description: 'Kind is a string value representing the REST resource this description: |-
object represents. Servers may infer this from the endpoint the client Kind is a string value representing the REST resource this object represents.
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
metadata:
type: object
spec: spec:
description: 'spec defines the desired characteristics of a snapshot requested description: |-
by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots spec defines the desired characteristics of a snapshot requested by a user.
Required.' More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots
Required.
properties: properties:
source: source:
description: source specifies where a snapshot will be created from. description: |-
This field is immutable after creation. Required. source specifies where a snapshot will be created from.
This field is immutable after creation.
Required.
properties: properties:
persistentVolumeClaimName: persistentVolumeClaimName:
description: persistentVolumeClaimName specifies the name of the description: |-
PersistentVolumeClaim object representing the volume from which persistentVolumeClaimName specifies the name of the PersistentVolumeClaim
a snapshot should be created. This PVC is assumed to be in the object representing the volume from which a snapshot should be created.
same namespace as the VolumeSnapshot object. This field should This PVC is assumed to be in the same namespace as the VolumeSnapshot
be set if the snapshot does not exists, and needs to be created. object.
This field should be set if the snapshot does not exists, and needs to be
created.
This field is immutable. This field is immutable.
type: string type: string
x-kubernetes-validations:
- message: persistentVolumeClaimName is immutable
rule: self == oldSelf
volumeSnapshotContentName: volumeSnapshotContentName:
description: volumeSnapshotContentName specifies the name of a description: |-
pre-existing VolumeSnapshotContent object representing an existing volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent
volume snapshot. This field should be set if the snapshot already object representing an existing volume snapshot.
exists and only needs a representation in Kubernetes. This field This field should be set if the snapshot already exists and only needs a representation in Kubernetes.
is immutable. This field is immutable.
type: string type: string
x-kubernetes-validations:
- message: volumeSnapshotContentName is immutable
rule: self == oldSelf
type: object type: object
oneOf: x-kubernetes-validations:
- required: ["persistentVolumeClaimName"] - message: persistentVolumeClaimName is required once set
- required: ["volumeSnapshotContentName"] rule: '!has(oldSelf.persistentVolumeClaimName) || has(self.persistentVolumeClaimName)'
- message: volumeSnapshotContentName is required once set
rule: '!has(oldSelf.volumeSnapshotContentName) || has(self.volumeSnapshotContentName)'
- message: exactly one of volumeSnapshotContentName and persistentVolumeClaimName
must be set
rule: (has(self.volumeSnapshotContentName) && !has(self.persistentVolumeClaimName))
|| (!has(self.volumeSnapshotContentName) && has(self.persistentVolumeClaimName))
volumeSnapshotClassName: volumeSnapshotClassName:
description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass description: |-
requested by the VolumeSnapshot. VolumeSnapshotClassName may be VolumeSnapshotClassName is the name of the VolumeSnapshotClass
left nil to indicate that the default SnapshotClass should be used. requested by the VolumeSnapshot.
A given cluster may have multiple default Volume SnapshotClasses: VolumeSnapshotClassName may be left nil to indicate that the default
one default per CSI Driver. If a VolumeSnapshot does not specify SnapshotClass should be used.
a SnapshotClass, VolumeSnapshotSource will be checked to figure A given cluster may have multiple default Volume SnapshotClasses: one
out what the associated CSI Driver is, and the default VolumeSnapshotClass default per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass,
associated with that CSI Driver will be used. If more than one VolumeSnapshotClass VolumeSnapshotSource will be checked to figure out what the associated
exist for a given CSI Driver and more than one have been marked CSI Driver is, and the default VolumeSnapshotClass associated with that
as default, CreateSnapshot will fail and generate an event. Empty CSI Driver will be used. If more than one VolumeSnapshotClass exist for
string is not allowed for this field.' a given CSI Driver and more than one have been marked as default,
CreateSnapshot will fail and generate an event.
Empty string is not allowed for this field.
type: string type: string
x-kubernetes-validations:
- message: volumeSnapshotClassName must not be the empty string when
set
rule: size(self) > 0
required: required:
- source - source
type: object type: object
status: status:
description: status represents the current information of a snapshot. description: |-
Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent status represents the current information of a snapshot.
objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent Consumers must verify binding between VolumeSnapshot and
point at each other) before using this object. VolumeSnapshotContent objects is successful (by validating that both
VolumeSnapshot and VolumeSnapshotContent point at each other) before
using this object.
properties: properties:
boundVolumeSnapshotContentName: boundVolumeSnapshotContentName:
description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent description: |-
object to which this VolumeSnapshot object intends to bind to. If boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent
not specified, it indicates that the VolumeSnapshot object has not object to which this VolumeSnapshot object intends to bind to.
been successfully bound to a VolumeSnapshotContent object yet. NOTE: If not specified, it indicates that the VolumeSnapshot object has not been
To avoid possible security issues, consumers must verify binding successfully bound to a VolumeSnapshotContent object yet.
between VolumeSnapshot and VolumeSnapshotContent objects is successful NOTE: To avoid possible security issues, consumers must verify binding between
(by validating that both VolumeSnapshot and VolumeSnapshotContent VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that
point at each other) before using this object.' both VolumeSnapshot and VolumeSnapshotContent point at each other) before using
this object.
type: string type: string
creationTime: creationTime:
description: creationTime is the timestamp when the point-in-time description: |-
snapshot is taken by the underlying storage system. In dynamic snapshot creationTime is the timestamp when the point-in-time snapshot is taken
creation case, this field will be filled in by the snapshot controller by the underlying storage system.
with the "creation_time" value returned from CSI "CreateSnapshot" In dynamic snapshot creation case, this field will be filled in by the
gRPC call. For a pre-existing snapshot, this field will be filled snapshot controller with the "creation_time" value returned from CSI
with the "creation_time" value returned from the CSI "ListSnapshots" "CreateSnapshot" gRPC call.
gRPC call if the driver supports it. If not specified, it may indicate For a pre-existing snapshot, this field will be filled with the "creation_time"
that the creation time of the snapshot is unknown. value returned from the CSI "ListSnapshots" gRPC call if the driver supports it.
If not specified, it may indicate that the creation time of the snapshot is unknown.
format: date-time format: date-time
type: string type: string
error: error:
description: error is the last observed error during snapshot creation, description: |-
if any. This field could be helpful to upper level controllers(i.e., error is the last observed error during snapshot creation, if any.
application controller) to decide whether they should continue on This field could be helpful to upper level controllers(i.e., application controller)
waiting for the snapshot to be created based on the type of error to decide whether they should continue on waiting for the snapshot to be created
reported. The snapshot controller will keep retrying when an error based on the type of error reported.
occurs during the snapshot creation. Upon success, this error field The snapshot controller will keep retrying when an error occurs during the
will be cleared. snapshot creation. Upon success, this error field will be cleared.
properties: properties:
message: message:
description: 'message is a string detailing the encountered error description: |-
during snapshot creation if specified. NOTE: message may be message is a string detailing the encountered error during snapshot
logged, and it should not contain sensitive information.' creation if specified.
NOTE: message may be logged, and it should not contain sensitive
information.
type: string type: string
time: time:
description: time is the timestamp when the error was encountered. description: time is the timestamp when the error was encountered.
@ -167,29 +203,36 @@ spec:
type: string type: string
type: object type: object
readyToUse: readyToUse:
description: readyToUse indicates if the snapshot is ready to be used description: |-
to restore a volume. In dynamic snapshot creation case, this field readyToUse indicates if the snapshot is ready to be used to restore a volume.
will be filled in by the snapshot controller with the "ready_to_use" In dynamic snapshot creation case, this field will be filled in by the
value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot controller with the "ready_to_use" value returned from CSI
snapshot, this field will be filled with the "ready_to_use" value "CreateSnapshot" gRPC call.
returned from the CSI "ListSnapshots" gRPC call if the driver supports For a pre-existing snapshot, this field will be filled with the "ready_to_use"
it, otherwise, this field will be set to "True". If not specified, value returned from the CSI "ListSnapshots" gRPC call if the driver supports it,
it means the readiness of a snapshot is unknown. otherwise, this field will be set to "True".
If not specified, it means the readiness of a snapshot is unknown.
type: boolean type: boolean
restoreSize: restoreSize:
type: string type: string
description: restoreSize represents the minimum size of volume required description: |-
to create a volume from this snapshot. In dynamic snapshot creation restoreSize represents the minimum size of volume required to create a volume
case, this field will be filled in by the snapshot controller with from this snapshot.
the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. In dynamic snapshot creation case, this field will be filled in by the
For a pre-existing snapshot, this field will be filled with the snapshot controller with the "size_bytes" value returned from CSI
"size_bytes" value returned from the CSI "ListSnapshots" gRPC call "CreateSnapshot" gRPC call.
if the driver supports it. When restoring a volume from this snapshot, For a pre-existing snapshot, this field will be filled with the "size_bytes"
the size of the volume MUST NOT be smaller than the restoreSize value returned from the CSI "ListSnapshots" gRPC call if the driver supports it.
if it is specified, otherwise the restoration will fail. If not When restoring a volume from this snapshot, the size of the volume MUST NOT
specified, it indicates that the size is unknown. be smaller than the restoreSize if it is specified, otherwise the restoration will fail.
If not specified, it indicates that the size is unknown.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true x-kubernetes-int-or-string: true
volumeGroupSnapshotName:
description: |-
VolumeGroupSnapshotName is the name of the VolumeGroupSnapshot of which this
VolumeSnapshot is a part of.
type: string
type: object type: object
required: required:
- spec - spec

View File

@ -278,11 +278,6 @@ run_tests() {
kubectl apply -f test/e2e/testing-manifests/storage-csi/external-snapshotter/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml || exit 1 kubectl apply -f test/e2e/testing-manifests/storage-csi/external-snapshotter/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml || exit 1
kubectl apply -f test/e2e/testing-manifests/storage-csi/external-snapshotter/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml || exit 1 kubectl apply -f test/e2e/testing-manifests/storage-csi/external-snapshotter/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml || exit 1
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/refs/tags/v8.2.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml || exit 1
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/refs/tags/v8.2.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml || exit 1
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/refs/tags/v8.2.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml || exit 1
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/refs/tags/v8.2.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml || exit 1 kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/refs/tags/v8.2.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml || exit 1
curl -s https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/refs/tags/v8.2.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml | \ curl -s https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/refs/tags/v8.2.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml | \
awk '/--leader-election=true/ {print; print " - \"--feature-gates=CSIVolumeGroupSnapshot=true\""; next}1' | \ awk '/--leader-election=true/ {print; print " - \"--feature-gates=CSIVolumeGroupSnapshot=true\""; next}1' | \