kubernetes 获取PersistentVolumeClaim大小不像获取CPU和MEMORY那样方便:
pod.Spec.Containers[0].Resources.Limits.Memory().Value()
pod.Spec.Containers[0].Resources.Limits.Cpu().Value()
原因是kubernetes提供了获取CPU和Memory的指针方法但没有提供获取PersistentVolumeClaim的指针方法
package api
import (
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/unversioned"
)
// Returns string version of ResourceName.
func (self ResourceName) String() string {
return string(self)
}
// Returns the CPU limit if specified.
func (self *ResourceList) Cpu() *resource.Quantity {
if val, ok := (*self)[ResourceCPU]; ok {
return &val
}
return &resource.Quantity{Format: resource.DecimalSI}
}
// Returns the Memory limit if specified.
func (self *ResourceList) Memory() *resource.Quantity {
if val, ok := (*self)[ResourceMemory]; ok {
return &val
}
return &resource.Quantity{Format: resource.BinarySI}
}
func (self *ResourceList) Pods() *resource.Quantity {
if val, ok := (*self)[ResourcePods]; ok {
return &val
}
return &resource.Quantity{}
}
func (self *ResourceList) NvidiaGPU() *resource.Quantity {
if val, ok := (*self)[ResourceNvidiaGPU]; ok {
return &val
}
return &resource.Quantity{}
}
所以,kubernetes 获取PersistentVolumeClaim的大小需要转换成指针类型,才能获取其大小
import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/resource"
)
func NewOrderPVC(userUUID string, pvc *api.PersistentVolumeClaim) Order {
//storage
quantity := new(resource.Quantity)
*quantity = pvc.Spec.Resources.Limits["storage"]
size := quantity.Size()
order := Order{
UserUUID: userUUID,
BillingType: "USAGE",
BillingPeriod: "MONTHLY",
Unit: "月",
PayDuration: 12,
ProductName: "测试创建订单",
ProductType: "测试存储",
PromotionId: 0,
Skus: []Sku{
Sku{
UUID: "49fedb9c-807f-4767-9090-7960655b4112", //产品唯一标志字段(对应目录中的产品的uuid)
Id: "STORAGE", //对应的目录中的productCode
Value: size,
Count: 1,
ResourceId: fmt.Sprintf("%s", pvc.GetUID()),
},
},
}
return order
}