mirror of
https://github.com/XShengTech/MEGREZ.git
synced 2026-01-14 09:07:16 +08:00
76 lines
2.6 KiB
Go
76 lines
2.6 KiB
Go
package instanceController
|
|
|
|
import (
|
|
"megrez/models"
|
|
"megrez/services/database"
|
|
)
|
|
|
|
func Create(instance *models.Instances) (containerName, volumeName string, err error) {
|
|
l.SetFunction("Create")
|
|
|
|
server := models.Servers{
|
|
ID: instance.ServerID,
|
|
}
|
|
result := database.DB.First(&server)
|
|
if result.Error != nil {
|
|
l.Error("query server error: %v", result.Error)
|
|
return "", "", result.Error
|
|
}
|
|
|
|
if instance.VolumeSize != 0 {
|
|
volumeName, err = createVolume(server.IP, server.Port, server.Apikey, instance.VolumeSize)
|
|
if err != nil {
|
|
l.Error("create volume error: %v", err)
|
|
return "", "", err
|
|
}
|
|
instance.VolumeName = volumeName
|
|
}
|
|
|
|
containerName, err = createInstance(server.IP, server.Port, server.Apikey, instance.GpuCount, server.CpuCountPerGpu*instance.GpuCount, server.MemoryPerGpu*instance.GpuCount, instance.VolumeName, instance.ImageName)
|
|
if err != nil {
|
|
l.Error("create instance error: %v", err)
|
|
deleteInstance(server.IP, server.Port, server.Apikey, containerName)
|
|
if instance.VolumeName != "" {
|
|
deleteVolume(server.IP, server.Port, server.Apikey, instance.VolumeName, false)
|
|
}
|
|
return "", "", err
|
|
}
|
|
instance.ContainerName = containerName
|
|
|
|
err = SetRootPassword(server.IP, server.Port, server.Apikey, containerName, instance.SshPasswd)
|
|
if err != nil {
|
|
deleteInstance(server.IP, server.Port, server.Apikey, containerName)
|
|
if instance.VolumeName != "" {
|
|
deleteVolume(server.IP, server.Port, server.Apikey, instance.VolumeName, false)
|
|
}
|
|
l.Error("set root password error: %v", err)
|
|
return "", "", err
|
|
}
|
|
|
|
go func() {
|
|
SetJupyterPassword(server.IP, server.Port, server.Apikey, containerName, instance.SshPasswd)
|
|
SetCodeServerPassword(server.IP, server.Port, server.Apikey, containerName, instance.SshPasswd)
|
|
}()
|
|
|
|
portBindings, err := GetPortForward(server.IP, server.Port, server.Apikey, containerName)
|
|
if err != nil {
|
|
deleteInstance(server.IP, server.Port, server.Apikey, containerName)
|
|
if instance.VolumeName != "" {
|
|
deleteVolume(server.IP, server.Port, server.Apikey, instance.VolumeName, false)
|
|
}
|
|
l.Error("get port forward error: %v", err)
|
|
return "", "", err
|
|
}
|
|
|
|
instance.SshAddress = server.IP + ":" + portBindings["22"]
|
|
instance.TensorBoardAddress = server.IP + ":" + portBindings["6007"]
|
|
instance.JupyterAddress = server.IP + ":" + portBindings["80"] + "/jupyter"
|
|
instance.GrafanaAddress = server.IP + ":" + portBindings["80"] + "/monitor/public-dashboards/2c510f203876465ba76617510ce3e219"
|
|
instance.CodeServerAddress = server.IP + ":" + portBindings["80"] + "/code-server/"
|
|
|
|
instance.Status = 0
|
|
result = database.DB.Save(&instance)
|
|
|
|
return containerName, volumeName, nil
|
|
}
|