| /* |
| Copyright 2017 The Kubernetes Authors. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| package v1 |
| |
| import ( |
| "k8s.io/api/core/v1" |
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
| ) |
| |
| // +genclient |
| // +genclient:nonNamespaced |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // StorageClass describes the parameters for a class of storage for |
| // which PersistentVolumes can be dynamically provisioned. |
| // |
| // StorageClasses are non-namespaced; the name of the storage class |
| // according to etcd is in ObjectMeta.Name. |
| type StorageClass struct { |
| metav1.TypeMeta `json:",inline"` |
| // Standard object's metadata. |
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata |
| // +optional |
| metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` |
| |
| // Provisioner indicates the type of the provisioner. |
| Provisioner string `json:"provisioner" protobuf:"bytes,2,opt,name=provisioner"` |
| |
| // Parameters holds the parameters for the provisioner that should |
| // create volumes of this storage class. |
| // +optional |
| Parameters map[string]string `json:"parameters,omitempty" protobuf:"bytes,3,rep,name=parameters"` |
| |
| // Dynamically provisioned PersistentVolumes of this storage class are |
| // created with this reclaimPolicy. Defaults to Delete. |
| // +optional |
| ReclaimPolicy *v1.PersistentVolumeReclaimPolicy `json:"reclaimPolicy,omitempty" protobuf:"bytes,4,opt,name=reclaimPolicy,casttype=k8s.io/api/core/v1.PersistentVolumeReclaimPolicy"` |
| |
| // Dynamically provisioned PersistentVolumes of this storage class are |
| // created with these mountOptions, e.g. ["ro", "soft"]. Not validated - |
| // mount of the PVs will simply fail if one is invalid. |
| // +optional |
| MountOptions []string `json:"mountOptions,omitempty" protobuf:"bytes,5,opt,name=mountOptions"` |
| |
| // AllowVolumeExpansion shows whether the storage class allow volume expand |
| // +optional |
| AllowVolumeExpansion *bool `json:"allowVolumeExpansion,omitempty" protobuf:"varint,6,opt,name=allowVolumeExpansion"` |
| |
| // VolumeBindingMode indicates how PersistentVolumeClaims should be |
| // provisioned and bound. When unset, VolumeBindingImmediate is used. |
| // This field is alpha-level and is only honored by servers that enable |
| // the VolumeScheduling feature. |
| // +optional |
| VolumeBindingMode *VolumeBindingMode `json:"volumeBindingMode,omitempty" protobuf:"bytes,7,opt,name=volumeBindingMode"` |
| |
| // Restrict the node topologies where volumes can be dynamically provisioned. |
| // Each volume plugin defines its own supported topology specifications. |
| // An empty TopologySelectorTerm list means there is no topology restriction. |
| // This field is alpha-level and is only honored by servers that enable |
| // the DynamicProvisioningScheduling feature. |
| // +optional |
| AllowedTopologies []v1.TopologySelectorTerm `json:"allowedTopologies,omitempty" protobuf:"bytes,8,rep,name=allowedTopologies"` |
| } |
| |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // StorageClassList is a collection of storage classes. |
| type StorageClassList struct { |
| metav1.TypeMeta `json:",inline"` |
| // Standard list metadata |
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata |
| // +optional |
| metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` |
| |
| // Items is the list of StorageClasses |
| Items []StorageClass `json:"items" protobuf:"bytes,2,rep,name=items"` |
| } |
| |
| // VolumeBindingMode indicates how PersistentVolumeClaims should be bound. |
| type VolumeBindingMode string |
| |
| const ( |
| // VolumeBindingImmediate indicates that PersistentVolumeClaims should be |
| // immediately provisioned and bound. This is the default mode. |
| VolumeBindingImmediate VolumeBindingMode = "Immediate" |
| |
| // VolumeBindingWaitForFirstConsumer indicates that PersistentVolumeClaims |
| // should not be provisioned and bound until the first Pod is created that |
| // references the PeristentVolumeClaim. The volume provisioning and |
| // binding will occur during Pod scheduing. |
| VolumeBindingWaitForFirstConsumer VolumeBindingMode = "WaitForFirstConsumer" |
| ) |