78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/emicklei/go-restful/v3"
|
|
"github.com/gorilla/websocket"
|
|
"github.com/infraboard/mcube/v2/http/restful/response"
|
|
"github.com/infraboard/mcube/v2/ioc"
|
|
"github.com/infraboard/mcube/v2/ioc/config/gorestful"
|
|
"github.com/infraboard/mpaas/common/terminal"
|
|
"github.com/infraboard/mpaas/provider/k8s/workload"
|
|
"gitlab.com/go-course-project/go17/devcloud-mini/mpaas/apps/deploy"
|
|
"gitlab.com/go-course-project/go17/devcloud-mini/mpaas/apps/k8s"
|
|
)
|
|
|
|
func init() {
|
|
ioc.Api().Registry(&DeployApiHandler{})
|
|
}
|
|
|
|
type DeployApiHandler struct {
|
|
ioc.ObjectImpl
|
|
}
|
|
|
|
func (r *DeployApiHandler) Name() string {
|
|
return deploy.AppName
|
|
}
|
|
|
|
func (r *DeployApiHandler) Init() error {
|
|
ws := gorestful.ObjectRouter(r)
|
|
ws.Route(ws.GET("/container/login").To(r.LoginContainer))
|
|
|
|
return nil
|
|
}
|
|
|
|
// 配置 WebSocket 升级器
|
|
var upgrader = websocket.Upgrader{
|
|
ReadBufferSize: 1024,
|
|
WriteBufferSize: 1024,
|
|
CheckOrigin: func(r *http.Request) bool {
|
|
return true // 允许所有跨域请求(生产环境需限制)
|
|
},
|
|
}
|
|
|
|
func (r *DeployApiHandler) LoginContainer(req *restful.Request, resp *restful.Response) {
|
|
// 升级 HTTP 连接到 WebSocket
|
|
conn, err := upgrader.Upgrade(resp, req.Request, nil)
|
|
if err != nil {
|
|
response.Failed(resp, err)
|
|
return
|
|
}
|
|
|
|
// 创建好叻
|
|
ins, err := k8s.GetService().DescribeCluster(req.Request.Context(), &k8s.DescribeClusterRequest{
|
|
Id: "docker-desktop",
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
client, err := ins.GetK8sClient()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
term := terminal.NewWebSocketTerminal(conn)
|
|
loginReq := workload.NewLoginContainerRequest(term)
|
|
loginReq.Namespace = "default"
|
|
loginReq.PodName = "nginx-7dbf64989-cr89v"
|
|
loginReq.Command = []string{"bash"}
|
|
err = client.WorkLoad().LoginContainer(req.Request.Context(), loginReq)
|
|
if err != nil {
|
|
term.Failed(err)
|
|
return
|
|
}
|
|
term.Success("ok")
|
|
}
|