blob: 21531c9e1465718ef817c1cf284ff083d22dd4f3 [file] [log] [blame]
Zack Williamse940c7a2019-08-21 14:25:39 -07001/*
2Copyright 2017 The Kubernetes Authors.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17package v1
18
19import (
20 "k8s.io/api/core/v1"
21 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22)
23
24// +genclient
25// +genclient:nonNamespaced
26// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
27
28// StorageClass describes the parameters for a class of storage for
29// which PersistentVolumes can be dynamically provisioned.
30//
31// StorageClasses are non-namespaced; the name of the storage class
32// according to etcd is in ObjectMeta.Name.
33type StorageClass struct {
34 metav1.TypeMeta `json:",inline"`
35 // Standard object's metadata.
36 // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
37 // +optional
38 metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
39
40 // Provisioner indicates the type of the provisioner.
41 Provisioner string `json:"provisioner" protobuf:"bytes,2,opt,name=provisioner"`
42
43 // Parameters holds the parameters for the provisioner that should
44 // create volumes of this storage class.
45 // +optional
46 Parameters map[string]string `json:"parameters,omitempty" protobuf:"bytes,3,rep,name=parameters"`
47
48 // Dynamically provisioned PersistentVolumes of this storage class are
49 // created with this reclaimPolicy. Defaults to Delete.
50 // +optional
51 ReclaimPolicy *v1.PersistentVolumeReclaimPolicy `json:"reclaimPolicy,omitempty" protobuf:"bytes,4,opt,name=reclaimPolicy,casttype=k8s.io/api/core/v1.PersistentVolumeReclaimPolicy"`
52
53 // Dynamically provisioned PersistentVolumes of this storage class are
54 // created with these mountOptions, e.g. ["ro", "soft"]. Not validated -
55 // mount of the PVs will simply fail if one is invalid.
56 // +optional
57 MountOptions []string `json:"mountOptions,omitempty" protobuf:"bytes,5,opt,name=mountOptions"`
58
59 // AllowVolumeExpansion shows whether the storage class allow volume expand
60 // +optional
61 AllowVolumeExpansion *bool `json:"allowVolumeExpansion,omitempty" protobuf:"varint,6,opt,name=allowVolumeExpansion"`
62
63 // VolumeBindingMode indicates how PersistentVolumeClaims should be
64 // provisioned and bound. When unset, VolumeBindingImmediate is used.
65 // This field is only honored by servers that enable the VolumeScheduling feature.
66 // +optional
67 VolumeBindingMode *VolumeBindingMode `json:"volumeBindingMode,omitempty" protobuf:"bytes,7,opt,name=volumeBindingMode"`
68
69 // Restrict the node topologies where volumes can be dynamically provisioned.
70 // Each volume plugin defines its own supported topology specifications.
71 // An empty TopologySelectorTerm list means there is no topology restriction.
72 // This field is only honored by servers that enable the VolumeScheduling feature.
73 // +optional
74 AllowedTopologies []v1.TopologySelectorTerm `json:"allowedTopologies,omitempty" protobuf:"bytes,8,rep,name=allowedTopologies"`
75}
76
77// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
78
79// StorageClassList is a collection of storage classes.
80type StorageClassList struct {
81 metav1.TypeMeta `json:",inline"`
82 // Standard list metadata
83 // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
84 // +optional
85 metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
86
87 // Items is the list of StorageClasses
88 Items []StorageClass `json:"items" protobuf:"bytes,2,rep,name=items"`
89}
90
91// VolumeBindingMode indicates how PersistentVolumeClaims should be bound.
92type VolumeBindingMode string
93
94const (
95 // VolumeBindingImmediate indicates that PersistentVolumeClaims should be
96 // immediately provisioned and bound. This is the default mode.
97 VolumeBindingImmediate VolumeBindingMode = "Immediate"
98
99 // VolumeBindingWaitForFirstConsumer indicates that PersistentVolumeClaims
100 // should not be provisioned and bound until the first Pod is created that
101 // references the PeristentVolumeClaim. The volume provisioning and
102 // binding will occur during Pod scheduing.
103 VolumeBindingWaitForFirstConsumer VolumeBindingMode = "WaitForFirstConsumer"
104)
105
106// +genclient
107// +genclient:nonNamespaced
108// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
109
110// VolumeAttachment captures the intent to attach or detach the specified volume
111// to/from the specified node.
112//
113// VolumeAttachment objects are non-namespaced.
114type VolumeAttachment struct {
115 metav1.TypeMeta `json:",inline"`
116
117 // Standard object metadata.
118 // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
119 // +optional
120 metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
121
122 // Specification of the desired attach/detach volume behavior.
123 // Populated by the Kubernetes system.
124 Spec VolumeAttachmentSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"`
125
126 // Status of the VolumeAttachment request.
127 // Populated by the entity completing the attach or detach
128 // operation, i.e. the external-attacher.
129 // +optional
130 Status VolumeAttachmentStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
131}
132
133// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
134
135// VolumeAttachmentList is a collection of VolumeAttachment objects.
136type VolumeAttachmentList struct {
137 metav1.TypeMeta `json:",inline"`
138 // Standard list metadata
139 // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
140 // +optional
141 metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
142
143 // Items is the list of VolumeAttachments
144 Items []VolumeAttachment `json:"items" protobuf:"bytes,2,rep,name=items"`
145}
146
147// VolumeAttachmentSpec is the specification of a VolumeAttachment request.
148type VolumeAttachmentSpec struct {
149 // Attacher indicates the name of the volume driver that MUST handle this
150 // request. This is the name returned by GetPluginName().
151 Attacher string `json:"attacher" protobuf:"bytes,1,opt,name=attacher"`
152
153 // Source represents the volume that should be attached.
154 Source VolumeAttachmentSource `json:"source" protobuf:"bytes,2,opt,name=source"`
155
156 // The node that the volume should be attached to.
157 NodeName string `json:"nodeName" protobuf:"bytes,3,opt,name=nodeName"`
158}
159
160// VolumeAttachmentSource represents a volume that should be attached.
161// Right now only PersistenVolumes can be attached via external attacher,
162// in future we may allow also inline volumes in pods.
163// Exactly one member can be set.
164type VolumeAttachmentSource struct {
165 // Name of the persistent volume to attach.
166 // +optional
167 PersistentVolumeName *string `json:"persistentVolumeName,omitempty" protobuf:"bytes,1,opt,name=persistentVolumeName"`
168
169 // inlineVolumeSpec contains all the information necessary to attach
170 // a persistent volume defined by a pod's inline VolumeSource. This field
171 // is populated only for the CSIMigration feature. It contains
172 // translated fields from a pod's inline VolumeSource to a
173 // PersistentVolumeSpec. This field is alpha-level and is only
174 // honored by servers that enabled the CSIMigration feature.
175 // +optional
176 InlineVolumeSpec *v1.PersistentVolumeSpec `json:"inlineVolumeSpec,omitempty" protobuf:"bytes,2,opt,name=inlineVolumeSpec"`
177}
178
179// VolumeAttachmentStatus is the status of a VolumeAttachment request.
180type VolumeAttachmentStatus struct {
181 // Indicates the volume is successfully attached.
182 // This field must only be set by the entity completing the attach
183 // operation, i.e. the external-attacher.
184 Attached bool `json:"attached" protobuf:"varint,1,opt,name=attached"`
185
186 // Upon successful attach, this field is populated with any
187 // information returned by the attach operation that must be passed
188 // into subsequent WaitForAttach or Mount calls.
189 // This field must only be set by the entity completing the attach
190 // operation, i.e. the external-attacher.
191 // +optional
192 AttachmentMetadata map[string]string `json:"attachmentMetadata,omitempty" protobuf:"bytes,2,rep,name=attachmentMetadata"`
193
194 // The last error encountered during attach operation, if any.
195 // This field must only be set by the entity completing the attach
196 // operation, i.e. the external-attacher.
197 // +optional
198 AttachError *VolumeError `json:"attachError,omitempty" protobuf:"bytes,3,opt,name=attachError,casttype=VolumeError"`
199
200 // The last error encountered during detach operation, if any.
201 // This field must only be set by the entity completing the detach
202 // operation, i.e. the external-attacher.
203 // +optional
204 DetachError *VolumeError `json:"detachError,omitempty" protobuf:"bytes,4,opt,name=detachError,casttype=VolumeError"`
205}
206
207// VolumeError captures an error encountered during a volume operation.
208type VolumeError struct {
209 // Time the error was encountered.
210 // +optional
211 Time metav1.Time `json:"time,omitempty" protobuf:"bytes,1,opt,name=time"`
212
213 // String detailing the error encountered during Attach or Detach operation.
214 // This string may be logged, so it should not contain sensitive
215 // information.
216 // +optional
217 Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"`
218}