| /* |
| Copyright 2016 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 storage |
| |
| import ( |
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
| api "k8s.io/kubernetes/pkg/apis/core" |
| ) |
| |
| // +genclient |
| // +genclient:nonNamespaced |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // StorageClass describes a named "class" of storage offered in a cluster. |
| // Different classes might map to quality-of-service levels, or to backup policies, |
| // or to arbitrary policies determined by the cluster administrators. Kubernetes |
| // itself is unopinionated about what classes represent. This concept is sometimes |
| // called "profiles" in other storage systems. |
| // The name of a StorageClass object is significant, and is how users can request a particular class. |
| type StorageClass struct { |
| metav1.TypeMeta |
| // +optional |
| metav1.ObjectMeta |
| |
| // provisioner is the driver expected to handle this StorageClass. |
| // This is an optionally-prefixed name, like a label key. |
| // For example: "kubernetes.io/gce-pd" or "kubernetes.io/aws-ebs". |
| // This value may not be empty. |
| Provisioner string |
| |
| // parameters holds parameters for the provisioner. |
| // These values are opaque to the system and are passed directly |
| // to the provisioner. The only validation done on keys is that they are |
| // not empty. The maximum number of parameters is |
| // 512, with a cumulative max size of 256K |
| // +optional |
| Parameters map[string]string |
| |
| // reclaimPolicy is the reclaim policy that dynamically provisioned |
| // PersistentVolumes of this storage class are created with |
| // +optional |
| ReclaimPolicy *api.PersistentVolumeReclaimPolicy |
| |
| // mountOptions are the mount options that dynamically provisioned |
| // PersistentVolumes of this storage class are created with |
| // +optional |
| MountOptions []string |
| |
| // AllowVolumeExpansion shows whether the storage class allow volume expand |
| // If the field is nil or not set, it would amount to expansion disabled |
| // for all PVs created from this storageclass. |
| // +optional |
| AllowVolumeExpansion *bool |
| |
| // VolumeBindingMode indicates how PersistentVolumeClaims should be |
| // provisioned and bound. When unset, VolumeBindingImmediate is used. |
| // This field is only honored by servers that enable the VolumeScheduling feature. |
| // +optional |
| VolumeBindingMode *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 only honored by servers that enable the VolumeScheduling feature. |
| // +optional |
| AllowedTopologies []api.TopologySelectorTerm |
| } |
| |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // StorageClassList is a collection of storage classes. |
| type StorageClassList struct { |
| metav1.TypeMeta |
| // Standard list metadata |
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata |
| // +optional |
| metav1.ListMeta |
| |
| // Items is the list of StorageClasses |
| Items []StorageClass |
| } |
| |
| // +genclient |
| // +genclient:nonNamespaced |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // Captures the intent to attach or detach the specified volume to/from |
| // the specified node. |
| // |
| // VolumeAttachment objects are non-namespaced. |
| type VolumeAttachment struct { |
| metav1.TypeMeta |
| |
| // Standard object metadata. |
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata |
| // +optional |
| metav1.ObjectMeta |
| |
| // Specification of the desired attach/detach volume behavior. |
| // Populated by the Kubernetes system. |
| Spec VolumeAttachmentSpec |
| |
| // Status of the VolumeAttachment request. |
| // Populated by the entity completing the attach or detach |
| // operation, i.e. the external-attacher. |
| // +optional |
| Status VolumeAttachmentStatus |
| } |
| |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // VolumeAttachmentList is a collection of VolumeAttachment objects. |
| type VolumeAttachmentList struct { |
| metav1.TypeMeta |
| // Standard list metadata |
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata |
| // +optional |
| metav1.ListMeta |
| |
| // Items is the list of VolumeAttachments |
| Items []VolumeAttachment |
| } |
| |
| // The specification of a VolumeAttachment request. |
| type VolumeAttachmentSpec struct { |
| // Attacher indicates the name of the volume driver that MUST handle this |
| // request. This is the name returned by GetPluginName(). |
| Attacher string |
| |
| // Source represents the volume that should be attached. |
| Source VolumeAttachmentSource |
| |
| // The node that the volume should be attached to. |
| NodeName string |
| } |
| |
| // VolumeAttachmentSource represents a volume that should be attached. |
| // Right now only PersistenVolumes can be attached via external attacher, |
| // in future we may allow also inline volumes in pods. |
| // Exactly one member can be set. |
| type VolumeAttachmentSource struct { |
| // Name of the persistent volume to attach. |
| // +optional |
| PersistentVolumeName *string |
| |
| // Placeholder for *VolumeSource to accommodate inline volumes in pods. |
| } |
| |
| // The status of a VolumeAttachment request. |
| type VolumeAttachmentStatus struct { |
| // Indicates the volume is successfully attached. |
| // This field must only be set by the entity completing the attach |
| // operation, i.e. the external-attacher. |
| Attached bool |
| |
| // Upon successful attach, this field is populated with any |
| // information returned by the attach operation that must be passed |
| // into subsequent WaitForAttach or Mount calls. |
| // This field must only be set by the entity completing the attach |
| // operation, i.e. the external-attacher. |
| // +optional |
| AttachmentMetadata map[string]string |
| |
| // The last error encountered during attach operation, if any. |
| // This field must only be set by the entity completing the attach |
| // operation, i.e. the external-attacher. |
| // +optional |
| AttachError *VolumeError |
| |
| // The last error encountered during detach operation, if any. |
| // This field must only be set by the entity completing the detach |
| // operation, i.e. the external-attacher. |
| // +optional |
| DetachError *VolumeError |
| } |
| |
| // Captures an error encountered during a volume operation. |
| type VolumeError struct { |
| // Time the error was encountered. |
| // +optional |
| Time metav1.Time |
| |
| // String detailing the error encountered during Attach or Detach operation. |
| // This string maybe logged, so it should not contain sensitive |
| // information. |
| // +optional |
| Message string |
| } |
| |
| // VolumeBindingMode indicates how PersistentVolumeClaims should be bound. |
| type VolumeBindingMode string |
| |
| const ( |
| // VolumeBindingImmediate indicates that PersistentVolumeClaims should be |
| // immediately provisioned and bound. |
| 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" |
| ) |