add draft compute units

This commit is contained in:
mr 2025-06-17 14:51:41 +02:00
parent 2264d22c69
commit 1c751f7253
3 changed files with 36 additions and 4 deletions

View File

@ -17,6 +17,7 @@ import (
"cloud.o-forge.io/core/oc-lib/models"
"cloud.o-forge.io/core/oc-lib/models/collaborative_area"
"cloud.o-forge.io/core/oc-lib/models/collaborative_area/rules/rule"
"cloud.o-forge.io/core/oc-lib/models/compute_units"
"cloud.o-forge.io/core/oc-lib/models/order"
"cloud.o-forge.io/core/oc-lib/models/peer"
"cloud.o-forge.io/core/oc-lib/models/resources"
@ -577,3 +578,10 @@ func (l *LibData) ToOrder() *order.Order {
}
return nil
}
func (l *LibData) ToComputeUnits() *compute_units.ComputeUnits {
if l.Data.GetAccessor(nil).GetType() == tools.COMPUTE_UNITS {
return l.Data.(*compute_units.ComputeUnits)
}
return nil
}

View File

@ -34,6 +34,7 @@ func (a *computeUnitsMongoAccessor) DeleteOne(id string) (utils.DBObject, int, e
}
func (a *computeUnitsMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) {
// should verify if a source is existing...
return utils.GenericUpdateOne(set, id, a, &ComputeUnits{})
}
@ -47,6 +48,14 @@ func (a *computeUnitsMongoAccessor) CopyOne(data utils.DBObject) (utils.DBObject
return nil, 422, errors.New("can't publish a drafted compute units")
}
computeUnits := data.(*ComputeUnits)
if computeUnits.MonitorPath == "" || computeUnits.GetID() != "" {
return nil, 422, errors.New("publishing is only allowed is it can be monitored and be accessible")
}
if res, code, err := a.LoadOne(computeUnits.GetID()); err != nil {
return nil, code, err
} else {
computeUnits = res.(*ComputeUnits)
}
resAccess := resources.NewAccessor[*resources.ComputeResource](tools.COMPUTE_RESOURCE, a.Request, func() utils.DBObject { return &resources.ComputeResource{} })
var instance *resources.ComputeResourceInstance
b, _ := json.Marshal(computeUnits)
@ -65,11 +74,16 @@ func (a *computeUnitsMongoAccessor) CopyOne(data utils.DBObject) (utils.DBObject
existingComputeResource.Instances = append(existingComputeResource.Instances, instance)
return resAccess.UpdateOne(existingComputeResource, existingComputeResource.UUID)
} else {
var resource *resources.ComputeResource
var r resources.ComputeResource
b, _ := json.Marshal(computeUnits)
json.Unmarshal(b, resource)
resource.Instances = append(resource.Instances, instance)
return resAccess.StoreOne(resource)
json.Unmarshal(b, &r)
r.Instances = append(r.Instances, instance)
res, code, err := resAccess.StoreOne(&r)
if err != nil {
return nil, code, err
}
computeUnits.ResourceID = res.GetID()
return a.UpdateOne(computeUnits, computeUnits.GetID())
}
}

View File

@ -1,6 +1,7 @@
package resources
import (
"errors"
"slices"
"cloud.o-forge.io/core/oc-lib/dbs"
@ -37,16 +38,25 @@ func (dca *ResourceMongoAccessor[T]) DeleteOne(id string) (utils.DBObject, int,
}
func (dca *ResourceMongoAccessor[T]) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) {
if dca.GetType() == tools.COMPUTE_RESOURCE {
return nil, 404, errors.New("can't update a non existing computing units resource not reported onto compute units catalog")
}
set.(T).Trim()
return utils.GenericUpdateOne(set, id, dca, dca.generateData())
}
func (dca *ResourceMongoAccessor[T]) StoreOne(data utils.DBObject) (utils.DBObject, int, error) {
if dca.GetType() == tools.COMPUTE_RESOURCE {
return nil, 404, errors.New("can't create a non existing computing units resource not reported onto compute units catalog")
}
data.(T).Trim()
return utils.GenericStoreOne(data, dca)
}
func (dca *ResourceMongoAccessor[T]) CopyOne(data utils.DBObject) (utils.DBObject, int, error) {
if dca.GetType() == tools.COMPUTE_RESOURCE {
return nil, 404, errors.New("can't copy/publish a non existing computing units resource not reported onto compute units catalog")
}
return dca.StoreOne(data)
}