added kubernetes support

This commit is contained in:
ACoolName 2025-04-07 14:00:59 +03:00
parent bcd05ebf4e
commit 5d6adb88d8
5 changed files with 49 additions and 23 deletions

View File

@ -2,6 +2,7 @@ package mongo
import (
"context"
"log"
"git.acooldomain.co/server-manager/backend/dbhandler"
"git.acooldomain.co/server-manager/backend/models"
@ -10,6 +11,7 @@ import (
)
type Image struct {
Id string `bson:"id"`
Registry string `bson:"registry"`
Tag string `bson:"tag"`
}
@ -44,6 +46,7 @@ func convertToDbServer(server dbhandler.Server) Server {
Id: server.Id,
Owner: server.Owner,
Image: Image{
Id: server.Image.Id,
Registry: server.Image.Registry,
Tag: server.Image.Tag,
},
@ -68,6 +71,7 @@ func convertToResponseServer(server Server) dbhandler.Server {
Id: server.Id,
Owner: server.Owner,
Image: &models.Image{
Id: server.Image.Id,
Registry: server.Image.Registry,
Tag: server.Image.Tag,
},
@ -82,9 +86,9 @@ type ServersDbHandler struct {
collection *mongo.Collection
}
func (self *ServersDbHandler) ListServers(ctx context.Context) ([]dbhandler.Server, error) {
func (dbh *ServersDbHandler) ListServers(ctx context.Context) ([]dbhandler.Server, error) {
var servers []Server
cursor, err := self.collection.Find(ctx, bson.M{})
cursor, err := dbh.collection.Find(ctx, bson.M{})
if err != nil {
return nil, err
}
@ -104,9 +108,9 @@ func (self *ServersDbHandler) ListServers(ctx context.Context) ([]dbhandler.Serv
return dbServers, nil
}
func (self *ServersDbHandler) GetServer(ctx context.Context, serverId string) (*dbhandler.Server, error) {
func (dbh *ServersDbHandler) GetServer(ctx context.Context, serverId string) (*dbhandler.Server, error) {
var server Server
err := self.collection.FindOne(ctx, bson.M{"id": serverId}).Decode(&server)
err := dbh.collection.FindOne(ctx, bson.M{"id": serverId}).Decode(&server)
if err != nil {
return nil, err
}
@ -116,22 +120,27 @@ func (self *ServersDbHandler) GetServer(ctx context.Context, serverId string) (*
return &responseServer, nil
}
func (self *ServersDbHandler) CreateServer(ctx context.Context, server dbhandler.Server) error {
func (dbh *ServersDbHandler) CreateServer(ctx context.Context, server dbhandler.Server) error {
log.Printf("Converting server %#v", server)
dbServer := convertToDbServer(server)
_, err := self.collection.InsertOne(ctx, &dbServer)
log.Printf("Converting server %#v", dbServer)
_, err := dbh.collection.InsertOne(ctx, &dbServer)
if err != nil {
log.Printf("Converting server %e", err)
}
return err
}
func (self *ServersDbHandler) DeleteServer(ctx context.Context, serverId string) error {
_, err := self.collection.DeleteOne(ctx, bson.M{
func (dbh *ServersDbHandler) DeleteServer(ctx context.Context, serverId string) error {
_, err := dbh.collection.DeleteOne(ctx, bson.M{
"id": serverId,
})
return err
}
func (self *ServersDbHandler) UpdateServer(ctx context.Context, serverId string, updateParams dbhandler.ServerUpdateRequest) error {
func (dbh *ServersDbHandler) UpdateServer(ctx context.Context, serverId string, updateParams dbhandler.ServerUpdateRequest) error {
updateServerRequest := bson.M{}
if updateParams.Owner != "" {
@ -163,7 +172,7 @@ func (self *ServersDbHandler) UpdateServer(ctx context.Context, serverId string,
updateServerRequest["command"] = updateParams.Command
}
_, err := self.collection.UpdateOne(ctx, bson.M{"id": serverId}, bson.M{"$set": updateServerRequest})
_, err := dbh.collection.UpdateOne(ctx, bson.M{"id": serverId}, bson.M{"$set": updateServerRequest})
return err
}

View File

@ -98,6 +98,7 @@ func convertImageInspectToInstanceImage(image image.InspectResponse) instanceman
fmt.Printf("image: %#v\nconfig: %#v\nports: %#v\n", image, image.Config, ports)
return instancemanager.Image{
Id: image.RepoTags[0],
Registry: modelsImage.Registry,
Tag: modelsImage.Tag,
Command: strings.Join(image.Config.Cmd, " "),
@ -115,7 +116,6 @@ func convertContainerLabelsToStruct(labels map[string]string) (*ContainerLabels,
}
err = json.Unmarshal(rawLabels, &containerLabels)
if err != nil {
return nil, err
}
@ -132,7 +132,6 @@ func convertVolumeLabelsToStruct(labels map[string]string) (*VolumeLabels, error
}
err = json.Unmarshal(rawLabels, &volumeLabels)
if err != nil {
return nil, err
}
@ -149,7 +148,6 @@ func convertImageLabelsToStruct(labels map[string]string) (*ImageLabels, error)
}
err = json.Unmarshal(rawLabels, &imageLabels)
if err != nil {
return nil, err
}

View File

@ -119,11 +119,22 @@ func (i *InstanceManager) ListServers(ctx context.Context) ([]instancemanager.Se
if err != nil {
return nil, err
}
ports := make([]models.Port, len(serverManager.Status.Server.HostPorts))
for i, port := range serverManager.Status.Server.HostPorts {
ports[i] = models.Port{
Protocol: models.PortProtocol(port.Protocol),
PublicPort: uint16(port.HostPort),
ContainerPort: uint16(port.TargetPort),
}
}
servers[index] = instancemanager.Server{
Id: serverManager.Name,
Running: serverManager.Spec.Server.On,
RunningCommand: strings.Join(serverManager.Status.Server.Args, " "),
Ports: ports,
Domain: serverManager.Status.Server.Domain,
RunningImage: &models.Image{
Registry: image.Registry,
Tag: image.Tag,
@ -308,6 +319,8 @@ func (i *InstanceManager) StartFileBrowser(ctx context.Context, serverId string)
return nil, err
}
serverManager.Spec.Browser.On = true
err = i.client.Update(ctx, serverManager)
if err != nil {
return nil, err
@ -333,6 +346,8 @@ func (i *InstanceManager) StopFileBrowser(ctx context.Context, serverId string)
return err
}
serverManager.Spec.Browser.On = false
err = i.client.Update(ctx, serverManager)
if err != nil {
return err

View File

@ -18,15 +18,14 @@ type ImageData struct {
}
func convertImageToImageData(instanceImage instancemanager.Image) *ImageData {
imageId := instanceImage.Registry + ":" + instanceImage.Tag
return &ImageData{
Id: imageId,
Id: instanceImage.Id,
Name: instanceImage.Registry,
Version: instanceImage.Tag,
DisplayName: fmt.Sprintf("%s %s", instanceImage.Registry, instanceImage.Tag),
}
}
func (con ServersApi) GetImages(ctx *gin.Context) {
images, err := con.InstanceManager.ListImages(ctx)
if err != nil {

View File

@ -80,23 +80,25 @@ func (con ServersApi) CreateServer(ctx *gin.Context) {
return
}
instanceImage, err := con.InstanceManager.GetImage(ctx, request.ImageId)
if err != nil {
ctx.AbortWithError(500, err)
return
}
instanceServer, err := con.InstanceManager.CreateServer(ctx)
if err != nil {
ctx.AbortWithError(500, err)
return
}
imageSegments := strings.Split(request.ImageId, ":")
registry := imageSegments[0]
tag := imageSegments[1]
err = con.ServersDbHandler.CreateServer(ctx, dbhandler.Server{
Id: instanceServer.Id,
Owner: serverClaims.Username,
Image: &models.Image{
Registry: registry,
Tag: tag,
Id: instanceImage.Id,
Registry: instanceImage.Registry,
Tag: instanceImage.Tag,
},
Nickname: request.Nickname,
Command: request.DefaultCommand,
@ -191,6 +193,7 @@ func (con ServersApi) GetServers(ctx *gin.Context) {
server := serverConfigsMap[instanceServer.Id]
var image ImageInfo
log.Printf("server=%#v\t|\tinstanceServer=%#v", server, instanceServer)
if instanceServer.Running {
image = ImageInfo{
@ -198,6 +201,8 @@ func (con ServersApi) GetServers(ctx *gin.Context) {
Version: instanceServer.RunningImage.Tag,
}
} else {
log.Printf("serverImage:%#v", server.Image)
image = ImageInfo{
Name: server.Image.Registry,
Version: server.Image.Tag,