Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / k8s.io / api / storage / v1 / types.go
1 /*
2 Copyright 2017 The Kubernetes Authors.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8     http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 */
16
17 package v1
18
19 import (
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.
33 type 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.
80 type 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.
92 type VolumeBindingMode string
93
94 const (
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.
114 type 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.
136 type 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.
148 type 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.
164 type 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         // Placeholder for *VolumeSource to accommodate inline volumes in pods.
170 }
171
172 // VolumeAttachmentStatus is the status of a VolumeAttachment request.
173 type VolumeAttachmentStatus struct {
174         // Indicates the volume is successfully attached.
175         // This field must only be set by the entity completing the attach
176         // operation, i.e. the external-attacher.
177         Attached bool `json:"attached" protobuf:"varint,1,opt,name=attached"`
178
179         // Upon successful attach, this field is populated with any
180         // information returned by the attach operation that must be passed
181         // into subsequent WaitForAttach or Mount calls.
182         // This field must only be set by the entity completing the attach
183         // operation, i.e. the external-attacher.
184         // +optional
185         AttachmentMetadata map[string]string `json:"attachmentMetadata,omitempty" protobuf:"bytes,2,rep,name=attachmentMetadata"`
186
187         // The last error encountered during attach operation, if any.
188         // This field must only be set by the entity completing the attach
189         // operation, i.e. the external-attacher.
190         // +optional
191         AttachError *VolumeError `json:"attachError,omitempty" protobuf:"bytes,3,opt,name=attachError,casttype=VolumeError"`
192
193         // The last error encountered during detach operation, if any.
194         // This field must only be set by the entity completing the detach
195         // operation, i.e. the external-attacher.
196         // +optional
197         DetachError *VolumeError `json:"detachError,omitempty" protobuf:"bytes,4,opt,name=detachError,casttype=VolumeError"`
198 }
199
200 // VolumeError captures an error encountered during a volume operation.
201 type VolumeError struct {
202         // Time the error was encountered.
203         // +optional
204         Time metav1.Time `json:"time,omitempty" protobuf:"bytes,1,opt,name=time"`
205
206         // String detailing the error encountered during Attach or Detach operation.
207         // This string maybe logged, so it should not contain sensitive
208         // information.
209         // +optional
210         Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"`
211 }