Add API for setting default storage class (#1757)

Signed-off-by: Xin Wang <wileywang@yunify.com>
This commit is contained in:
Wiley Wang
2020-01-14 19:57:34 +08:00
committed by zryfish
parent f022b28ccc
commit 66850ee3ee
3 changed files with 73 additions and 5 deletions

View File

@@ -18,6 +18,7 @@
package storage
import (
"kubesphere.io/kubesphere/pkg/simple/client"
"strconv"
"k8s.io/api/core/v1"
@@ -27,16 +28,17 @@ import (
"kubesphere.io/kubesphere/pkg/informers"
)
const (
IsDefaultStorageClassAnnotation = "storageclass.kubernetes.io/is-default-class"
betaIsDefaultStorageClassAnnotation = "storageclass.beta.kubernetes.io/is-default-class"
)
type ScMetrics struct {
Capacity string `json:"capacity,omitempty"`
Usage string `json:"usage,omitempty"`
PvcNumber string `json:"pvcNumber"`
}
func init() {
}
func GetPvcListBySc(scName string) ([]*v1.PersistentVolumeClaim, error) {
persistentVolumeClaimLister := informers.SharedInformerFactory().Core().V1().PersistentVolumeClaims().Lister()
all, err := persistentVolumeClaimLister.List(labels.Everything())
@@ -102,3 +104,36 @@ func GetScList() ([]*storageV1.StorageClass, error) {
return scList, nil
}
func SetDefaultStorageClass(defaultScName string) (*storageV1.StorageClass, error) {
scLister := informers.SharedInformerFactory().Storage().V1().StorageClasses().Lister()
// 1. verify storage class name
sc, err := scLister.Get(defaultScName)
if sc == nil || err != nil {
return sc, err
}
// 2. unset all default sc and then set default sc
scList, err := scLister.List(labels.Everything())
if err != nil {
return nil, err
}
k8sClient := client.ClientSets().K8s().Kubernetes()
var defaultSc *storageV1.StorageClass
for _, sc := range scList {
_, hasDefault := sc.Annotations[IsDefaultStorageClassAnnotation]
_, hasBeta := sc.Annotations[betaIsDefaultStorageClassAnnotation]
if sc.Name == defaultScName || hasDefault || hasBeta {
delete(sc.Annotations, IsDefaultStorageClassAnnotation)
delete(sc.Annotations, betaIsDefaultStorageClassAnnotation)
if sc.Name == defaultScName {
sc.Annotations[IsDefaultStorageClassAnnotation] = "true"
defaultSc = sc
}
_, err := k8sClient.StorageV1().StorageClasses().Update(sc)
if err != nil {
return nil, err
}
}
}
return defaultSc, nil
}