mirror of
https://github.com/kubevirt/containerized-data-importer.git
synced 2025-06-03 06:30:22 +00:00
60 lines
2.0 KiB
Go
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
|
|
})
|
|
}
|