| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package models
- import (
- "context"
- "yunion.io/x/jsonutils"
- "yunion.io/x/pkg/errors"
- computeapi "yunion.io/x/onecloud/pkg/apis/compute"
- api "yunion.io/x/onecloud/pkg/apis/llm"
- llmutil "yunion.io/x/onecloud/pkg/llm/utils"
- "yunion.io/x/onecloud/pkg/mcclient"
- "yunion.io/x/onecloud/pkg/mcclient/auth"
- "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
- )
- func GetLLMPodCreateInput(
- ctx context.Context,
- userCred mcclient.TokenCredential,
- input *api.LLMCreateInput,
- llm *SLLM,
- sku *SLLMSku,
- llmImage *SLLMImage,
- eip string,
- ) (*computeapi.ServerCreateInput, error) {
- data, err := GetLLMBasePodCreateInput(ctx, userCred, &input.LLMBaseCreateInput, &llm.SLLMBase, &sku.SLLMSkuBase, eip)
- if err != nil {
- return nil, errors.Wrap(err, "GetLLMBasePodCreateInput: ")
- }
- // generate post overlay info
- {
- err = llm.UpdateMountedModelFullNames(ctx, userCred, nil, true, input.LLMImageId, input.LLMSkuId)
- if err != nil {
- return nil, errors.Wrap(err, "UpdateMountedModelFullNames")
- }
- }
- lcd := llm.GetLLMContainerDriver()
- containers := GetDriverPodContainers(ctx, lcd, llm, llmImage, sku, nil, nil, "")
- data.Pod = &computeapi.PodCreateInput{
- HostIPC: true,
- Containers: containers,
- }
- return data, nil
- }
- func GetLLMContainers(ctx context.Context, llm *SLLM) ([]*computeapi.SContainer, error) {
- admSession := auth.GetAdminSession(ctx, "")
- resp, err := compute.Containers.List(admSession, jsonutils.Marshal(map[string]string{"guest_id": llm.CmpId, "scope": "max"}))
- if err != nil {
- return nil, errors.Wrap(err, "Containers.List")
- }
- ctrs := make([]*computeapi.SContainer, 0)
- for _, c := range resp.Data {
- container := computeapi.SContainer{}
- if err := c.Unmarshal(&container); err != nil {
- return nil, errors.Wrap(err, "Unmarshal")
- }
- ctrs = append(ctrs, &container)
- }
- return ctrs, nil
- }
- func UpdateContainerIfNeeded(ctx context.Context, userCred mcclient.TokenCredential, ctrId string, input *computeapi.PodContainerCreateInput) (*computeapi.SContainer, error) {
- ctr, err := llmutil.UpdateContainer(ctx, ctrId, func(ctr *computeapi.SContainer) *computeapi.ContainerSpec {
- return &input.ContainerSpec
- })
- if err != nil {
- return nil, errors.Wrapf(err, "UpdateContainer %s", ctrId)
- }
- return ctr, nil
- }
- func GetContainersToUpdate(
- drv ILLMContainerDriver,
- ctx context.Context,
- input *ContainersToUpdateInput,
- ) (map[string]*computeapi.PodContainerCreateInput, error) {
- podCtrs := GetDriverPodContainers(ctx, drv, input.LLM, input.Image, input.Sku, input.Input.Property, input.ServerDetails.IsolatedDevices, input.Disk.Id)
- ret := make(map[string]*computeapi.PodContainerCreateInput)
- for i := range input.Containers {
- currentCtr := input.Containers[i]
- podCtr, err := drv.MatchContainerToUpdate(currentCtr, podCtrs)
- if err != nil {
- return nil, errors.Wrapf(err, "match container %s to update", currentCtr.Name)
- }
- ret[currentCtr.Id] = podCtr
- }
- return ret, nil
- }
|