Skip to content

Commit 805eecf

Browse files
authored
Merge pull request kubernetes#80058 from xing-yang/snapshot_beta
Enable VolumeSnapshotDataSource Feature Gate and update e2e tests for VolumeSnapshot CRD v1beta1
2 parents 7d1f9b4 + 3324722 commit 805eecf

18 files changed

+615
-39
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
approvers:
2+
- saad-ali
3+
- msau42
4+
reviewers:
5+
- jingxu97
6+
- xing-yang
7+
- yuxiangqian
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
apiVersion: apiextensions.k8s.io/v1beta1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: volumesnapshotclasses.snapshot.storage.k8s.io
5+
labels:
6+
addonmanager.kubernetes.io/mode: Reconcile
7+
spec:
8+
group: snapshot.storage.k8s.io
9+
names:
10+
kind: VolumeSnapshotClass
11+
listKind: VolumeSnapshotClassList
12+
plural: volumesnapshotclasses
13+
singular: volumesnapshotclass
14+
scope: Cluster
15+
preserveUnknownFields: false
16+
validation:
17+
openAPIV3Schema:
18+
description: VolumeSnapshotClass specifies parameters that a underlying storage
19+
system uses when creating a volume snapshot. A specific VolumeSnapshotClass
20+
is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses
21+
are non-namespaced
22+
properties:
23+
apiVersion:
24+
description: 'APIVersion defines the versioned schema of this representation
25+
of an object. Servers should convert recognized schemas to the latest
26+
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
27+
type: string
28+
deletionPolicy:
29+
description: deletionPolicy determines whether a VolumeSnapshotContent created
30+
through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot
31+
is deleted. Supported values are "Retain" and "Delete". "Retain" means
32+
that the VolumeSnapshotContent and its physical snapshot on underlying
33+
storage system are kept. "Delete" means that the VolumeSnapshotContent
34+
and its physical snapshot on underlying storage system are deleted. Required.
35+
enum:
36+
- Delete
37+
- Retain
38+
type: string
39+
driver:
40+
description: driver is the name of the storage driver that handles this
41+
VolumeSnapshotClass. Required.
42+
type: string
43+
kind:
44+
description: 'Kind is a string value representing the REST resource this
45+
object represents. Servers may infer this from the endpoint the client
46+
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
47+
type: string
48+
parameters:
49+
additionalProperties:
50+
type: string
51+
description: parameters is a key-value map with storage driver specific
52+
parameters for creating snapshots. These values are opaque to Kubernetes.
53+
type: object
54+
required:
55+
- deletionPolicy
56+
- driver
57+
type: object
58+
version: v1beta1
59+
versions:
60+
- name: v1beta1
61+
served: true
62+
storage: true
63+
status:
64+
acceptedNames:
65+
kind: ""
66+
plural: ""
67+
conditions: []
68+
storedVersions: []
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
apiVersion: apiextensions.k8s.io/v1beta1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: volumesnapshotcontents.snapshot.storage.k8s.io
5+
labels:
6+
addonmanager.kubernetes.io/mode: Reconcile
7+
spec:
8+
group: snapshot.storage.k8s.io
9+
names:
10+
kind: VolumeSnapshotContent
11+
listKind: VolumeSnapshotContentList
12+
plural: volumesnapshotcontents
13+
singular: volumesnapshotcontent
14+
scope: Cluster
15+
subresources:
16+
status: {}
17+
preserveUnknownFields: false
18+
validation:
19+
openAPIV3Schema:
20+
description: VolumeSnapshotContent represents the actual "on-disk" snapshot
21+
object in the underlying storage system
22+
properties:
23+
apiVersion:
24+
description: 'APIVersion defines the versioned schema of this representation
25+
of an object. Servers should convert recognized schemas to the latest
26+
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
27+
type: string
28+
kind:
29+
description: 'Kind is a string value representing the REST resource this
30+
object represents. Servers may infer this from the endpoint the client
31+
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
32+
type: string
33+
spec:
34+
description: spec defines properties of a VolumeSnapshotContent created
35+
by the underlying storage system. Required.
36+
properties:
37+
deletionPolicy:
38+
description: deletionPolicy determines whether this VolumeSnapshotContent
39+
and its physical snapshot on the underlying storage system should
40+
be deleted when its bound VolumeSnapshot is deleted. Supported values
41+
are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent
42+
and its physical snapshot on underlying storage system are kept. "Delete"
43+
means that the VolumeSnapshotContent and its physical snapshot on
44+
underlying storage system are deleted. In dynamic snapshot creation
45+
case, this field will be filled in with the "DeletionPolicy" field
46+
defined in the VolumeSnapshotClass the VolumeSnapshot refers to. For
47+
pre-existing snapshots, users MUST specify this field when creating
48+
the VolumeSnapshotContent object. Required.
49+
enum:
50+
- Delete
51+
- Retain
52+
type: string
53+
driver:
54+
description: driver is the name of the CSI driver used to create the
55+
physical snapshot on the underlying storage system. This MUST be the
56+
same as the name returned by the CSI GetPluginName() call for that
57+
driver. Required.
58+
type: string
59+
source:
60+
description: source specifies from where a snapshot will be created.
61+
This field is immutable after creation. Required.
62+
properties:
63+
snapshotHandle:
64+
description: snapshotHandle specifies the CSI "snapshot_id" of a
65+
pre-existing snapshot on the underlying storage system. This field
66+
is immutable.
67+
type: string
68+
volumeHandle:
69+
description: volumeHandle specifies the CSI "volume_id" of the volume
70+
from which a snapshot should be dynamically taken from. This field
71+
is immutable.
72+
type: string
73+
type: object
74+
volumeSnapshotClassName:
75+
description: name of the VolumeSnapshotClass to which this snapshot
76+
belongs.
77+
type: string
78+
volumeSnapshotRef:
79+
description: volumeSnapshotRef specifies the VolumeSnapshot object to
80+
which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName
81+
field must reference to this VolumeSnapshotContent's name for the
82+
bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent
83+
object, name and namespace of the VolumeSnapshot object MUST be provided
84+
for binding to happen. This field is immutable after creation. Required.
85+
properties:
86+
apiVersion:
87+
description: API version of the referent.
88+
type: string
89+
fieldPath:
90+
description: 'If referring to a piece of an object instead of an
91+
entire object, this string should contain a valid JSON/Go field
92+
access statement, such as desiredState.manifest.containers[2].
93+
For example, if the object reference is to a container within
94+
a pod, this would take on a value like: "spec.containers{name}"
95+
(where "name" refers to the name of the container that triggered
96+
the event) or if no container name is specified "spec.containers[2]"
97+
(container with index 2 in this pod). This syntax is chosen only
98+
to have some well-defined way of referencing a part of an object.
99+
TODO: this design is not final and this field is subject to change
100+
in the future.'
101+
type: string
102+
kind:
103+
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
104+
type: string
105+
name:
106+
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
107+
type: string
108+
namespace:
109+
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
110+
type: string
111+
resourceVersion:
112+
description: 'Specific resourceVersion to which this reference is
113+
made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency'
114+
type: string
115+
uid:
116+
description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
117+
type: string
118+
type: object
119+
required:
120+
- deletionPolicy
121+
- driver
122+
- source
123+
- volumeSnapshotRef
124+
type: object
125+
status:
126+
description: status represents the current information of a snapshot.
127+
properties:
128+
creationTime:
129+
description: creationTime is the timestamp when the point-in-time snapshot
130+
is taken by the underlying storage system. In dynamic snapshot creation
131+
case, this field will be filled in with the "creation_time" value
132+
returned from CSI "CreateSnapshotRequest" gRPC call. For a pre-existing
133+
snapshot, this field will be filled with the "creation_time" value
134+
returned from the CSI "ListSnapshots" gRPC call if the driver supports
135+
it. If not specified, it indicates the creation time is unknown. The
136+
format of this field is a Unix nanoseconds time encoded as an int64.
137+
On Unix, the command `date +%s%N` returns the current time in nanoseconds
138+
since 1970-01-01 00:00:00 UTC.
139+
format: int64
140+
type: integer
141+
error:
142+
description: error is the latest observed error during snapshot creation,
143+
if any.
144+
properties:
145+
message:
146+
description: 'message is a string detailing the encountered error
147+
during snapshot creation if specified. NOTE: message may be logged,
148+
and it should not contain sensitive information.'
149+
type: string
150+
time:
151+
description: time is the timestamp when the error was encountered.
152+
format: date-time
153+
type: string
154+
type: object
155+
readyToUse:
156+
description: readyToUse indicates if a snapshot is ready to be used
157+
to restore a volume. In dynamic snapshot creation case, this field
158+
will be filled in with the "ready_to_use" value returned from CSI
159+
"CreateSnapshotRequest" gRPC call. For a pre-existing snapshot, this
160+
field will be filled with the "ready_to_use" value returned from the
161+
CSI "ListSnapshots" gRPC call if the driver supports it, otherwise,
162+
this field will be set to "True". If not specified, it means the readiness
163+
of a snapshot is unknown.
164+
type: boolean
165+
restoreSize:
166+
description: restoreSize represents the complete size of the snapshot
167+
in bytes. In dynamic snapshot creation case, this field will be filled
168+
in with the "size_bytes" value returned from CSI "CreateSnapshotRequest"
169+
gRPC call. For a pre-existing snapshot, this field will be filled
170+
with the "size_bytes" value returned from the CSI "ListSnapshots"
171+
gRPC call if the driver supports it. When restoring a volume from
172+
this snapshot, the size of the volume MUST NOT be smaller than the
173+
restoreSize if it is specified, otherwise the restoration will fail.
174+
If not specified, it indicates that the size is unknown.
175+
format: int64
176+
minimum: 0
177+
type: integer
178+
snapshotHandle:
179+
description: snapshotHandle is the CSI "snapshot_id" of a snapshot on
180+
the underlying storage system. If not specified, it indicates that
181+
dynamic snapshot creation has either failed or it is still in progress.
182+
type: string
183+
type: object
184+
required:
185+
- spec
186+
type: object
187+
version: v1beta1
188+
versions:
189+
- name: v1beta1
190+
served: true
191+
storage: true
192+
status:
193+
acceptedNames:
194+
kind: ""
195+
plural: ""
196+
conditions: []
197+
storedVersions: []

0 commit comments

Comments
 (0)