| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- package models
- import (
- "context"
- "fmt"
- "yunion.io/x/jsonutils"
- "yunion.io/x/onecloud/pkg/apis"
- computeapi "yunion.io/x/onecloud/pkg/apis/compute"
- api "yunion.io/x/onecloud/pkg/apis/llm"
- "yunion.io/x/onecloud/pkg/mcclient"
- )
- const (
- POD_METADATA_POST_STOP_CLEANUP_CONFIG = "post_stop_cleanup_config"
- )
- type PodPostStopCleanupConfig struct {
- Dirs []string `json:"dirs"`
- }
- func GetLLMBasePodCreateInput(
- ctx context.Context,
- userCred mcclient.TokenCredential,
- input *api.LLMBaseCreateInput,
- llmBase *SLLMBase,
- skuBase *SLLMSkuBase,
- eip string,
- ) (*computeapi.ServerCreateInput, error) {
- data := computeapi.ServerCreateInput{}
- data.AutoStart = input.AutoStart
- data.ServerConfigs = computeapi.NewServerConfigs()
- data.Hypervisor = computeapi.HYPERVISOR_POD
- postStopCleanupConfgi := PodPostStopCleanupConfig{
- Dirs: []string{
- GetTmpHostPath(llmBase.GetName()),
- },
- }
- data.Metadata = map[string]string{
- POD_METADATA_POST_STOP_CLEANUP_CONFIG: jsonutils.Marshal(postStopCleanupConfgi).String(),
- }
- data.VcpuCount = skuBase.Cpu
- data.VmemSize = skuBase.Memory
- // data.Name = input.Name + "-" + seclib.RandomPassword(6)
- data.Name = input.Name
- // disks
- data.Disks = make([]*computeapi.DiskConfig, 0)
- if skuBase.Volumes != nil && !skuBase.Volumes.IsZero() {
- for idx, volume := range *skuBase.Volumes {
- data.Disks = append(data.Disks, &computeapi.DiskConfig{
- DiskType: "data",
- Format: "raw",
- Fs: "ext4",
- SizeMb: volume.SizeMB,
- Index: idx,
- })
- }
- }
- // isolated devices
- if skuBase.Devices != nil && !skuBase.Devices.IsZero() {
- data.IsolatedDevices = make([]*computeapi.IsolatedDeviceConfig, 0)
- devices := *skuBase.Devices
- for i := 0; i < len(devices); i++ {
- isolatedDevice := &computeapi.IsolatedDeviceConfig{
- DevType: devices[i].DevType,
- Model: devices[i].Model,
- DevicePath: devices[i].DevicePath,
- }
- data.IsolatedDevices = append(data.IsolatedDevices, isolatedDevice)
- }
- }
- // port mappings
- // var portRange *computeapi.GuestPortMappingPortRange
- portMappings := computeapi.GuestPortMappings{}
- if skuBase.PortMappings != nil && !skuBase.PortMappings.IsZero() {
- // hostTcpPortRange := computeapi.GuestPortMappingPortRange{
- // Start: options.Options.HostTcpPortStart,
- // End: options.Options.HostTcpPortEnd,
- // }
- // hostUdpPortRange := computeapi.GuestPortMappingPortRange{
- // Start: options.Options.HostUdpPortStart,
- // End: options.Options.HostUdpPortEnd,
- // }
- for _, portInfo := range *skuBase.PortMappings {
- remoteIps := portInfo.RemoteIps
- if len(remoteIps) == 0 {
- remoteIps = nil
- }
- // if portInfo.Protocol == "tcp" {
- // portRange = &hostTcpPortRange
- // } else {
- // portRange = &hostUdpPortRange
- // }
- portMappings = append(portMappings, &computeapi.GuestPortMapping{
- Port: portInfo.ContainerPort,
- Protocol: computeapi.GuestPortMappingProtocol(portInfo.Protocol),
- RemoteIps: remoteIps,
- // HostPortRange: portRange,
- Rule: &computeapi.GuestPortMappingRule{
- FirstPortOffset: portInfo.FirstPortOffset,
- },
- Envs: portInfo.Envs,
- })
- }
- }
- var network *computeapi.NetworkConfig
- if len(input.Nets) > 0 {
- network = input.Nets[0]
- networkCopy := *network
- network = &networkCopy
- network.Index = 0
- }
- bandwidth := input.BandwidthMB
- if bandwidth == 0 && network.BwLimit != 0 {
- bandwidth = network.BwLimit
- }
- if bandwidth == 0 && skuBase.Bandwidth != 0 {
- bandwidth = skuBase.Bandwidth
- }
- network.BwLimit = bandwidth
- if len(network.PortMappings) == 0 {
- network.PortMappings = portMappings
- }
- data.Networks = []*computeapi.NetworkConfig{
- network,
- }
- data.Count = 1
- data.PreferHost = input.PreferHost
- data.ProjectId = input.ProjectId
- if len(data.ProjectId) == 0 {
- data.ProjectId = userCred.GetProjectId()
- data.TenantId = userCred.GetTenantId()
- }
- return &data, nil
- }
- func NewHostDev(path string) *computeapi.ContainerDevice {
- return &computeapi.ContainerDevice{
- Type: apis.CONTAINER_DEVICE_TYPE_HOST,
- Host: &computeapi.ContainerHostDevice{
- HostPath: path,
- ContainerPath: path,
- Permissions: "rwm",
- },
- }
- }
- func NewEnv(key, val string) *apis.ContainerKeyValue {
- return &apis.ContainerKeyValue{
- Key: key,
- Value: val,
- }
- }
- func GetTmpHostPath(name string) string {
- return fmt.Sprintf("/tmp/%s", name)
- }
- func GetSvrLLMContainer(ctrs []*computeapi.PodContainerDesc) *computeapi.PodContainerDesc {
- return ctrs[0]
- }
|