我试图得到"AGE"来自kubernetes API的列值,如命令输出
> kubectl get po
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-56c75d774d-d7zx8 1/1 Running 1 29d
nfs-client-provisioner-5cd984898b-s8fzh 1/1 Running 1 13d
func getVolumes() VolumesOutput {
userNamespace := "test"
listOptions := metav1.ListOptions{
Limit: 100,
}
volumeList, err := ClientSet.CoreV1().PersistentVolumeClaims(userNamespace).List(listOptions)
if err != nil {
// handle err
}
volumeItems := volumeList.Items
volumes := make([]Volume, 0)
if len(volumeItems) > 0 {
for _, volumeItem := range volumeItems {
quant := volumeItem.Spec.Resources.Requests[v1.ResourceStorage]
volume := Volume{
Name: volumeItem.Name,
Capacity: quant.String(),
Age: volumeItem.ObjectMeta.CreationTimestamp.String(),
UserID: UserID,
}
volumes = append(volumes, volume)
}
} else {
fmt.Println("no volumes found")
}
log.Println(volumes)
vol := VolumesOutput{
Volumes: volumes,
}
return vol
}
我可以在
中获取CreationTimestampAge: volumeItem.ObjectMeta.CreationTimestamp.String(),
我试图找到从时间到AGE转换的代码,但在kubernetes github repo中找不到。
我喜欢将其转换为与kubectl中的相同。所以请给我一个例子,并指出在repo上正确的行。
由于ObjectMeta.CreationTimestamp
是time.Time
类型,您可以简单地使用Time.Sub()
来获得当前时间和创建时间戳之间的差值,这将为您提供资源的年龄。
您可以使用time.Now()
来获取当前时间戳。
package main
import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
creationTime := currentTime.Add(time.Hour * 12)
diff := creationTime.Sub(currentTime)
fmt.Println("Age:", diff)
}
输出:
Age: 12h0m0s
注意:由于创建时间通常在当前时间之前,因此上面的内容仅用于示例目的。