Files
kubesphere/pkg/models/storage.go
2018-06-05 20:52:50 +08:00

59 lines
1.4 KiB
Go

package models
import (
v12 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/apis/meta/v1"
"kubesphere.io/kubesphere/pkg/client"
)
type PvcListBySc struct {
Name string `json:"name"`
Claims []v12.PersistentVolumeClaim `json:"items"`
}
type ScMetrics struct {
Name string `json:"name"`
Metrics StorageMetrics `json:"metrics"`
}
type StorageMetrics struct {
Capacity string `json:"capacity,omitempty"`
Usage string `json:"usage,omitempty"`
}
func GetPvcListBySc(storageclass string) (res []v12.PersistentVolumeClaim, err error) {
cli := client.NewK8sClient()
claimList, err := cli.CoreV1().PersistentVolumeClaims("").List(v1.ListOptions{})
if err != nil {
return nil, err
}
for _, claim := range claimList.Items {
if *claim.Spec.StorageClassName != storageclass {
continue
}
res = append(res, claim)
}
return res, nil
}
func GetScMetrics(storageclass string) (res StorageMetrics, err error) {
cli := client.NewK8sClient()
pvList, err := cli.CoreV1().PersistentVolumes().List(v1.ListOptions{})
if err != nil {
return StorageMetrics{}, err
}
var total resource.Quantity
for _, volume := range pvList.Items {
if volume.Spec.StorageClassName != storageclass {
continue
}
total.Add(volume.Spec.Capacity[v12.ResourceStorage])
}
return StorageMetrics{Usage: total.String()}, nil
}