sku.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package models
  2. import (
  3. "context"
  4. "yunion.io/x/jsonutils"
  5. "yunion.io/x/pkg/errors"
  6. "yunion.io/x/sqlchemy"
  7. "yunion.io/x/onecloud/pkg/apis"
  8. api "yunion.io/x/onecloud/pkg/apis/llm"
  9. "yunion.io/x/onecloud/pkg/cloudcommon/db"
  10. "yunion.io/x/onecloud/pkg/httperrors"
  11. "yunion.io/x/onecloud/pkg/mcclient"
  12. )
  13. func NewSLLMSkuBaseManager(dt interface{}, tableName string, keyword string, keywordPlural string) SLLMSkuBaseManager {
  14. return SLLMSkuBaseManager{
  15. SSharableVirtualResourceBaseManager: db.NewSharableVirtualResourceBaseManager(
  16. dt,
  17. tableName,
  18. keyword,
  19. keywordPlural,
  20. ),
  21. }
  22. }
  23. type SLLMSkuBaseManager struct {
  24. db.SSharableVirtualResourceBaseManager
  25. }
  26. type SLLMSkuBase struct {
  27. db.SSharableVirtualResourceBase
  28. Bandwidth int `nullable:"false" default:"0" create:"optional" list:"user" update:"user"`
  29. Cpu int `nullable:"false" default:"1" create:"optional" list:"user" update:"user"`
  30. Memory int `nullable:"false" default:"512" create:"optional" list:"user" update:"user"`
  31. Volumes *api.Volumes `charset:"utf8" length:"medium" nullable:"true" list:"user" update:"user" create:"optional"`
  32. PortMappings *api.PortMappings `charset:"utf8" length:"medium" nullable:"true" list:"user" update:"user" create:"optional"`
  33. Devices *api.Devices `charset:"utf8" length:"medium" nullable:"true" list:"user" update:"user" create:"optional"`
  34. Envs *api.Envs `charset:"utf8" nullable:"true" list:"user" update:"user" create:"optional"`
  35. // Properties
  36. Properties map[string]string `charset:"utf8" nullable:"true" list:"user" update:"user" create:"optional"`
  37. }
  38. func (man *SLLMSkuBaseManager) ListItemFilter(
  39. ctx context.Context,
  40. q *sqlchemy.SQuery,
  41. userCred mcclient.TokenCredential,
  42. input apis.SharableVirtualResourceListInput,
  43. ) (*sqlchemy.SQuery, error) {
  44. var err error
  45. q, err = man.SSharableVirtualResourceBaseManager.ListItemFilter(ctx, q, userCred, input)
  46. if err != nil {
  47. return nil, errors.Wrapf(err, "SSharableBaseResourceManager.ListItemFilter")
  48. }
  49. return q, nil
  50. }
  51. func (man *SLLMSkuBaseManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.LLMSKuBaseCreateInput) (api.LLMSKuBaseCreateInput, error) {
  52. var err error
  53. input.SharableVirtualResourceCreateInput, err = man.SSharableVirtualResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.SharableVirtualResourceCreateInput)
  54. if err != nil {
  55. return input, errors.Wrap(err, "SSharableVirtualResourceBaseManager.ValidateCreateData")
  56. }
  57. if input.Cpu <= 0 {
  58. return input, errors.Wrap(httperrors.ErrInputParameter, "cpu must > 0")
  59. }
  60. if input.Memory <= 0 {
  61. return input, errors.Wrap(httperrors.ErrInputParameter, "mem must > 0")
  62. }
  63. if input.Volumes == nil {
  64. return input, errors.Wrap(httperrors.ErrInputParameter, "volumes cannot be empty")
  65. }
  66. input.Status = api.STATUS_READY
  67. return input, nil
  68. }
  69. func (skuBase *SLLMSkuBase) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.LLMSkuBaseUpdateInput) (api.LLMSkuBaseUpdateInput, error) {
  70. var err error
  71. input.SharableVirtualResourceBaseUpdateInput, err = skuBase.SSharableVirtualResourceBase.ValidateUpdateData(ctx, userCred, query, input.SharableVirtualResourceBaseUpdateInput)
  72. if err != nil {
  73. return input, errors.Wrap(err, "validate SharableVirtualResourceBaseUpdateInput")
  74. }
  75. volumes := []api.Volume{}
  76. if err := jsonutils.Marshal(skuBase.Volumes).Unmarshal(&volumes); err != nil {
  77. return input, errors.Wrapf(err, "Unmarshal Volumes")
  78. }
  79. for i, volume := range volumes {
  80. if input.DiskSizeMB != nil && *input.DiskSizeMB > 0 {
  81. volume.SizeMB = *input.DiskSizeMB
  82. }
  83. // if input.TemplateId != nil {
  84. // if len(*input.TemplateId) > 0 {
  85. // s := auth.GetSession(ctx, userCred, "")
  86. // imgObj, err := imagemodules.Images.Get(s, *input.TemplateId, nil)
  87. // if err != nil {
  88. // return input, errors.Wrapf(err, "validate template_id %s", *input.TemplateId)
  89. // }
  90. // volume.TemplateId, _ = imgObj.GetString("id")
  91. // } else {
  92. // volume.TemplateId = ""
  93. // }
  94. // }
  95. if input.StorageType != nil && len(*input.StorageType) > 0 {
  96. volume.StorageType = *input.StorageType
  97. }
  98. volumes[i] = volume
  99. }
  100. input.Volumes = (*api.Volumes)(&volumes)
  101. return input, nil
  102. }