package statefulset import ( "context" "fmt" "pandax/base/global" apps "k8s.io/api/apps/v1" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" k8scommon "pandax/apps/devops/services/k8s/common" "pandax/apps/devops/services/k8s/dataselect" "pandax/apps/devops/services/k8s/event" "pandax/apps/devops/services/k8s/service" ) // StatefulSetDetail is a presentation layer view of Kubernetes Stateful Set resource. This means it is Stateful type StatefulSetDetail struct { // Extends list item structure. StatefulSet `json:",inline"` Events *k8scommon.EventList `json:"events"` PodList *PodList `json:"podList"` SvcList *service.ServiceList `json:"svcList"` } // GetStatefulSetDetail gets Stateful Set details. func GetStatefulSetDetail(client *kubernetes.Clientset, dsQuery *dataselect.DataSelectQuery, namespace, name string) (*StatefulSetDetail, error) { global.Log.Info(fmt.Sprintf("Getting details of %s statefulset in %s namespace", name, namespace)) ss, err := client.AppsV1().StatefulSets(namespace).Get(context.TODO(), name, metaV1.GetOptions{}) if err != nil { return nil, err } podInfo, err := getStatefulSetPodInfo(client, ss) if err != nil { return nil, err } events, err := event.GetResourceEvents(client, dsQuery, namespace, name) if err != nil { return nil, err } serviceList, _ := service.GetToService(client, namespace, name) ssDetail := getStatefulSetDetail(ss, podInfo, events, serviceList, client) return &ssDetail, nil } func getStatefulSetDetail(statefulSet *apps.StatefulSet, podInfo *k8scommon.PodInfo, events *k8scommon.EventList, svc *service.ServiceList, client *kubernetes.Clientset) StatefulSetDetail { return StatefulSetDetail{ StatefulSet: toStatefulSet(statefulSet, podInfo), Events: events, PodList: getStatefulSetToPod(client, statefulSet), SvcList: svc, } }