forked from nudtpc/pcm-kubernetes
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package logic
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"gitlink.org.cn/jcce-pcm/utils/tool"
|
||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||
|
||
"gitlink.org.cn/jcce-pcm/pcm-participant-kubernetes/internal/svc"
|
||
"gitlink.org.cn/jcce-pcm/pcm-participant-kubernetes/kubernetes"
|
||
|
||
"github.com/zeromicro/go-zero/core/logx"
|
||
)
|
||
|
||
type GetAppPodLogic struct {
|
||
ctx context.Context
|
||
svcCtx *svc.ServiceContext
|
||
logx.Logger
|
||
}
|
||
|
||
func NewGetAppPodLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAppPodLogic {
|
||
return &GetAppPodLogic{
|
||
ctx: ctx,
|
||
svcCtx: svcCtx,
|
||
Logger: logx.WithContext(ctx),
|
||
}
|
||
}
|
||
|
||
// 获取应用pod
|
||
func (l *GetAppPodLogic) GetAppPod(in *kubernetes.DeploymentDetailReq) (*kubernetes.AppPodResp, error) {
|
||
// 获取指定Deployment的Pod列表
|
||
deployment, err := l.svcCtx.ClientSet.AppsV1().Deployments(in.Namespace).Get(l.ctx, in.Name, metav1.GetOptions{})
|
||
if err != nil {
|
||
return &kubernetes.AppPodResp{
|
||
Code: "500",
|
||
Msg: err.Error(),
|
||
}, nil
|
||
}
|
||
podList := deployment.Status.Replicas // 获取Pod列表的副本数量
|
||
if podList == 0 {
|
||
return nil, fmt.Errorf("Deployment %s has no running pods\n", in.Name)
|
||
}
|
||
podListOptions := metav1.ListOptions{LabelSelector: fmt.Sprintf("app=%s", in.Name)} // 设置Pod列表选项的标签选择器,匹配Deployment的名称
|
||
list, err := l.svcCtx.ClientSet.CoreV1().Pods(in.Namespace).List(l.ctx, podListOptions)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
var kPodList kubernetes.PodList
|
||
tool.Convert(list, &kPodList)
|
||
return &kubernetes.AppPodResp{
|
||
Code: "200",
|
||
Msg: "success",
|
||
Data: &kPodList,
|
||
}, nil
|
||
}
|