forked from rook/rook
70 lines
2.5 KiB
Go
70 lines
2.5 KiB
Go
/*
|
|||
|
|
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 controller
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"k8s.io/api/core/v1"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Provisioner is an interface that creates templates for PersistentVolumes
|
||
|
|
// and can create the volume as a new resource in the infrastructure provider.
|
||
|
|
// It can also remove the volume it created from the underlying storage
|
||
|
|
// provider.
|
||
|
|
type Provisioner interface {
|
||
|
|
// Provision creates a volume i.e. the storage asset and returns a PV object
|
||
|
|
// for the volume
|
||
|
|
Provision(VolumeOptions) (*v1.PersistentVolume, error)
|
||
|
|
// Delete removes the storage asset that was created by Provision backing the
|
||
|
|
// given PV. Does not delete the PV object itself.
|
||
|
|
//
|
||
|
|
// May return IgnoredError to indicate that the call has been ignored and no
|
||
|
|
// action taken.
|
||
|
|
Delete(*v1.PersistentVolume) error
|
||
|
|
}
|
||
|
|
|
||
|
|
// IgnoredError is the value for Delete to return to indicate that the call has
|
||
|
|
// been ignored and no action taken. In case multiple provisioners are serving
|
||
|
|
// the same storage class, provisioners may ignore PVs they are not responsible
|
||
|
|
// for (e.g. ones they didn't create). The controller will act accordingly,
|
||
|
|
// i.e. it won't emit a misleading VolumeFailedDelete event.
|
||
|
|
type IgnoredError struct {
|
||
|
|
Reason string
|
||
|
|
}
|
||
|
|
|
||
|
|
func (e *IgnoredError) Error() string {
|
||
|
|
return fmt.Sprintf("ignored because %s", e.Reason)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VolumeOptions contains option information about a volume
|
||
|
|
// https://github.com/kubernetes/kubernetes/blob/release-1.4/pkg/volume/plugins.go
|
||
|
|
type VolumeOptions struct {
|
||
|
|
// Reclamation policy for a persistent volume
|
||
|
|
PersistentVolumeReclaimPolicy v1.PersistentVolumeReclaimPolicy
|
||
|
|
// PV.Name of the appropriate PersistentVolume. Used to generate cloud
|
||
|
|
// volume name.
|
||
|
|
PVName string
|
||
|
|
// PVC is reference to the claim that lead to provisioning of a new PV.
|
||
|
|
// Provisioners *must* create a PV that would be matched by this PVC,
|
||
|
|
// i.e. with required capacity, accessMode, labels matching PVC.Selector and
|
||
|
|
// so on.
|
||
|
|
PVC *v1.PersistentVolumeClaim
|
||
|
|
// Volume provisioning parameters from StorageClass
|
||
|
|
Parameters map[string]string
|
||
|
|
}
|