containerized-data-importer/tests/utils/storageclass.go
tavni d4c7b0be54 Adding support to import disk image into Block PV
Signed-off-by: tavni <tavni@redhat.com>
2019-03-28 11:43:56 +02:00

60 lines
2.0 KiB
Go

package utils
import (
corev1 "k8s.io/api/core/v1"
storageV1 "k8s.io/api/storage/v1"
"k8s.io/client-go/kubernetes"
apierrs "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
)
const (
storageClassPollInterval = defaultPollInterval
storageClassCreateTime = defaultPollPeriod
storageClassDeleteTime = defaultPollPeriod
)
// CreateStorageClassFromDefinition creates a StorageClass from the passed in StorageClass definition.
func CreateStorageClassFromDefinition(clientSet *kubernetes.Clientset, def *storageV1.StorageClass) (*storageV1.StorageClass, error) {
var storageClass *storageV1.StorageClass
err := wait.PollImmediate(storageClassPollInterval, storageClassCreateTime, func() (bool, error) {
var err error
storageClass, err = clientSet.StorageV1().StorageClasses().Create(def)
if err == nil || apierrs.IsAlreadyExists(err) {
return true, nil
}
return false, err
})
if err != nil {
return nil, err
}
return storageClass, nil
}
// NewStorageClassForBlockPVDefinition creates a StorageClass definition for Block PV
func NewStorageClassForBlockPVDefinition(storageClassName string) *storageV1.StorageClass {
volumeBindingMode := storageV1.VolumeBindingWaitForFirstConsumer
reclaimPolicy := corev1.PersistentVolumeReclaimPolicy(corev1.PersistentVolumeReclaimDelete)
return &storageV1.StorageClass{
ObjectMeta: metav1.ObjectMeta{
Name: storageClassName,
},
VolumeBindingMode: &volumeBindingMode,
ReclaimPolicy: &reclaimPolicy,
Provisioner: "kubernetes.io/no-provisioner",
}
}
// DeleteStorageClass deletes the passed in storageClass
func DeleteStorageClass(clientSet *kubernetes.Clientset, storageClass *storageV1.StorageClass) error {
return wait.PollImmediate(pvPollInterval, storageClassDeleteTime, func() (bool, error) {
err := clientSet.StorageV1().StorageClasses().Delete(storageClass.Name, nil)
if err == nil || apierrs.IsNotFound(err) {
return true, nil
}
return false, err
})
}