From 5405e9116754e1ec69fa96fbefe4dd695c57236b Mon Sep 17 00:00:00 2001 From: mr Date: Tue, 30 Jul 2024 12:08:13 +0200 Subject: [PATCH] copy resource in workflow --- models/resource_model/resource_model.go | 71 +++++++++++++++++++ .../resource_model_mongo_accessor.go | 71 +++++++++++++++++++ models/resources/data/data.go | 3 +- models/resources/data/data_mongo_accessor.go | 2 + models/resources/data/data_test.go | 5 +- models/resources/datacenter/datacenter.go | 3 +- .../datacenter/datacenter_mongo_accessor.go | 2 + .../resources/datacenter/datacenter_test.go | 5 +- models/resources/processing/processing.go | 3 +- .../processing/processing_mongo_accessor.go | 2 + models/resources/resource.go | 10 ++- models/resources/storage/storage.go | 3 +- .../storage/storage_mongo_accessor.go | 2 + models/resources/storage/storage_test.go | 5 +- models/resources/workflow/graph/graph.go | 12 ++-- models/resources/workflow/workflow.go | 3 +- .../workflow/workflow_mongo_accessor.go | 2 + models/resources/workflow/workflow_test.go | 5 +- models/utils/abstracts.go | 16 +---- models/utils/enums.go | 2 + 20 files changed, 194 insertions(+), 33 deletions(-) create mode 100644 models/resource_model/resource_model.go create mode 100644 models/resource_model/resource_model_mongo_accessor.go diff --git a/models/resource_model/resource_model.go b/models/resource_model/resource_model.go new file mode 100644 index 0000000..115cced --- /dev/null +++ b/models/resource_model/resource_model.go @@ -0,0 +1,71 @@ +package resource_model + +import ( + "encoding/json" + + "cloud.o-forge.io/core/oc-lib/models/utils" + "github.com/google/uuid" +) + +type AbstractResource struct { + utils.AbstractObject + ShortDescription string `json:"short_description,omitempty" bson:"short_description,omitempty" validate:"required"` + Description string `json:"description,omitempty" bson:"description,omitempty"` + Logo string `json:"logo,omitempty" bson:"logo,omitempty" validate:"required"` + Owner string `json:"owner,omitempty" bson:"owner,omitempty" validate:"required"` + OwnerLogo string `json:"owner_logo,omitempty" bson:"owner_logo,omitempty"` + SourceUrl string `json:"source_url,omitempty" bson:"source_url,omitempty" validate:"required"` + Price string `json:"price,omitempty" bson:"price,omitempty"` + License string `json:"license,omitempty" bson:"license,omitempty"` + ResourceModel *ResourceModel `json:"resource_model,omitempty" bson:"resource_model,omitempty"` + //Proxy *ResourceProxy `json:"proxy,omitempty" bson:"proxy,omitempty"` +} + +type Model struct { + Type string `json:"type,omitempty" bson:"type,omitempty"` + Value interface{} `json:"value,omitempty" bson:"value,omitempty"` + ReadOnly bool `json:"readonly,omitempty" bson:"readonly,omitempty"` +} + +type ResourceModel struct { + UUID string `json:"id,omitempty" bson:"id,omitempty" validate:"required"` + ResourceType string `json:"resource_type,omitempty" bson:"resource_type,omitempty" validate:"required"` + Model map[string]Model `json:"model,omitempty" bson:"model,omitempty"` +} + +func (ao *ResourceModel) GetID() string { + return ao.UUID +} + +func (r *ResourceModel) GenerateID() { + r.UUID = uuid.New().String() +} + +func (d *ResourceModel) GetName() string { + return d.UUID +} + +func (d *ResourceModel) GetAccessor() utils.Accessor { + data := &ResourceModelMongoAccessor{} + data.SetLogger(utils.RESOURCE_MODEL) + return data +} + +func (dma *ResourceModel) Deserialize(j map[string]interface{}) utils.DBObject { + b, err := json.Marshal(j) + if err != nil { + return nil + } + json.Unmarshal(b, dma) + return dma +} + +func (dma *ResourceModel) Serialize() map[string]interface{} { + var m map[string]interface{} + b, err := json.Marshal(dma) + if err != nil { + return nil + } + json.Unmarshal(b, &m) + return m +} diff --git a/models/resource_model/resource_model_mongo_accessor.go b/models/resource_model/resource_model_mongo_accessor.go new file mode 100644 index 0000000..6edf988 --- /dev/null +++ b/models/resource_model/resource_model_mongo_accessor.go @@ -0,0 +1,71 @@ +package resource_model + +import ( + "cloud.o-forge.io/core/oc-lib/dbs/mongo" + "cloud.o-forge.io/core/oc-lib/models/utils" +) + +type ResourceModelMongoAccessor struct { + utils.AbstractAccessor +} + +func (wfa *ResourceModelMongoAccessor) DeleteOne(id string) (utils.DBObject, int, error) { + return wfa.GenericDeleteOne(id, wfa) +} + +func (wfa *ResourceModelMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) { + return wfa.GenericUpdateOne(set, id, wfa, &ResourceModel{}) +} + +func (wfa *ResourceModelMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { + return wfa.GenericStoreOne(data, wfa) +} + +func (wfa *ResourceModelMongoAccessor) CopyOne(data utils.DBObject) (utils.DBObject, int, error) { + return wfa.GenericStoreOne(data, wfa) +} + +func (wfa *ResourceModelMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { + var workflow ResourceModel + res_mongo, code, err := mongo.MONGOService.LoadOne(id, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not retrieve " + id + " from db. Error: " + err.Error()) + return nil, code, err + } + res_mongo.Decode(&workflow) + return &workflow, 200, nil +} + +func (wfa ResourceModelMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.LoadAll(wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not retrieve any from db. Error: " + err.Error()) + return nil, code, err + } + var results []ResourceModel + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r) + } + return objs, 200, nil +} + +func (wfa *ResourceModelMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{"resource_type"}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []ResourceModel + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r) + } + return objs, 200, nil +} diff --git a/models/resources/data/data.go b/models/resources/data/data.go index 8ca73c7..b458e64 100644 --- a/models/resources/data/data.go +++ b/models/resources/data/data.go @@ -3,11 +3,12 @@ package data import ( "encoding/json" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/utils" ) type DataResource struct { - utils.AbstractResource + resource_model.AbstractResource Protocols []string `json:"protocol,omitempty" bson:"protocol,omitempty"` //TODO Enum type DataType string `json:"datatype,omitempty" bson:"datatype,omitempty"` Example string `json:"example,omitempty" bson:"example,omitempty" description:"base64 encoded data"` diff --git a/models/resources/data/data_mongo_accessor.go b/models/resources/data/data_mongo_accessor.go index 771a07b..1faf4a2 100644 --- a/models/resources/data/data_mongo_accessor.go +++ b/models/resources/data/data_mongo_accessor.go @@ -14,10 +14,12 @@ func (dma *DataMongoAccessor) DeleteOne(id string) (utils.DBObject, int, error) } func (dma *DataMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) { + set.(*DataResource).ResourceModel = nil return dma.GenericUpdateOne(set, id, dma, &DataResource{}) } func (dma *DataMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { + data.(*DataResource).ResourceModel = nil return dma.GenericStoreOne(data, dma) } diff --git a/models/resources/data/data_test.go b/models/resources/data/data_test.go index 2283443..937a994 100644 --- a/models/resources/data/data_test.go +++ b/models/resources/data/data_test.go @@ -3,6 +3,7 @@ package data import ( "testing" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/utils" "github.com/stretchr/testify/assert" @@ -10,7 +11,7 @@ import ( func TestStoreOneData(t *testing.T) { d := DataResource{DataType: "jpeg", Example: "123456", - AbstractResource: utils.AbstractResource{ + AbstractResource: resource_model.AbstractResource{ AbstractObject: utils.AbstractObject{Name: "testData"}, Description: "Lorem Ipsum", Logo: "azerty.com", @@ -28,7 +29,7 @@ func TestStoreOneData(t *testing.T) { func TestLoadOneDate(t *testing.T) { d := DataResource{DataType: "jpeg", Example: "123456", - AbstractResource: utils.AbstractResource{ + AbstractResource: resource_model.AbstractResource{ AbstractObject: utils.AbstractObject{Name: "testData"}, Description: "Lorem Ipsum", Logo: "azerty.com", diff --git a/models/resources/datacenter/datacenter.go b/models/resources/datacenter/datacenter.go index 5975280..4e27e2a 100644 --- a/models/resources/datacenter/datacenter.go +++ b/models/resources/datacenter/datacenter.go @@ -3,11 +3,12 @@ package datacenter import ( "encoding/json" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/utils" ) type DatacenterResource struct { - utils.AbstractResource + resource_model.AbstractResource CPUs []*CPU `bson:"cpus,omitempty" json:"cpus,omitempty"` RAM *RAM `bson:"ram,omitempty" json:"ram,omitempty"` GPUs []*GPU `bson:"gpus,omitempty" json:"gpus,omitempty"` diff --git a/models/resources/datacenter/datacenter_mongo_accessor.go b/models/resources/datacenter/datacenter_mongo_accessor.go index 0950acb..0d8ba17 100644 --- a/models/resources/datacenter/datacenter_mongo_accessor.go +++ b/models/resources/datacenter/datacenter_mongo_accessor.go @@ -14,10 +14,12 @@ func (dca *DatacenterMongoAccessor) DeleteOne(id string) (utils.DBObject, int, e } func (dca *DatacenterMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) { + set.(*DatacenterResource).ResourceModel = nil return dca.GenericUpdateOne(set, id, dca, &DatacenterResource{}) } func (dca *DatacenterMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { + data.(*DatacenterResource).ResourceModel = nil return dca.GenericStoreOne(data, dca) } diff --git a/models/resources/datacenter/datacenter_test.go b/models/resources/datacenter/datacenter_test.go index d39e009..5bfee9d 100644 --- a/models/resources/datacenter/datacenter_test.go +++ b/models/resources/datacenter/datacenter_test.go @@ -3,6 +3,7 @@ package datacenter import ( "testing" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/utils" "github.com/stretchr/testify/assert" @@ -10,7 +11,7 @@ import ( func TestStoreOneDatacenter(t *testing.T) { dc := DatacenterResource{ - AbstractResource: utils.AbstractResource{ + AbstractResource: resource_model.AbstractResource{ AbstractObject: utils.AbstractObject{Name: "testDatacenter"}, Description: "Lorem Ipsum", Logo: "azerty.com", @@ -28,7 +29,7 @@ func TestStoreOneDatacenter(t *testing.T) { func TestLoadOneDatacenter(t *testing.T) { dc := DatacenterResource{ - AbstractResource: utils.AbstractResource{ + AbstractResource: resource_model.AbstractResource{ AbstractObject: utils.AbstractObject{Name: "testDatacenter"}, Description: "Lorem Ipsum", Logo: "azerty.com", diff --git a/models/resources/processing/processing.go b/models/resources/processing/processing.go index 6bf215f..f4be8cb 100644 --- a/models/resources/processing/processing.go +++ b/models/resources/processing/processing.go @@ -3,12 +3,13 @@ package processing import ( "encoding/json" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/resources/datacenter" "cloud.o-forge.io/core/oc-lib/models/utils" ) type ProcessingResource struct { - utils.AbstractResource + resource_model.AbstractResource CPUs []*datacenter.CPU `bson:"cpus,omitempty" json:"cp_us,omitempty"` GPUs []*datacenter.GPU `bson:"gpus,omitempty" json:"gp_us,omitempty"` RAM datacenter.RAM `bson:"ram,omitempty" json:"ram,omitempty"` diff --git a/models/resources/processing/processing_mongo_accessor.go b/models/resources/processing/processing_mongo_accessor.go index 3d41b29..e2d7b28 100644 --- a/models/resources/processing/processing_mongo_accessor.go +++ b/models/resources/processing/processing_mongo_accessor.go @@ -14,10 +14,12 @@ func (pma *ProcessingMongoAccessor) DeleteOne(id string) (utils.DBObject, int, e } func (pma *ProcessingMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) { + set.(*ProcessingResource).ResourceModel = nil return pma.GenericUpdateOne(set, id, pma, &ProcessingResource{}) } func (pma *ProcessingMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { + data.(*ProcessingResource).ResourceModel = nil return pma.GenericStoreOne(data, pma) } diff --git a/models/resources/resource.go b/models/resources/resource.go index 4d907e2..958e7d5 100644 --- a/models/resources/resource.go +++ b/models/resources/resource.go @@ -16,7 +16,7 @@ import ( type ResourceSet struct { Datas []string `bson:"datas,omitempty" json:"datas,omitempty"` Storages []string `bson:"storages,omitempty" json:"storages,omitempty"` - Processings []string `bson:"processing,omitempty" json:"processing,omitempty"` + Processings []string `bson:"processings,omitempty" json:"processings,omitempty"` Datacenters []string `bson:"datacenters,omitempty" json:"datacenters,omitempty"` Workflows []string `bson:"workflows,omitempty" json:"workflows,omitempty"` @@ -26,3 +26,11 @@ type ResourceSet struct { DatacenterResources []*datacenter.DatacenterResource `bson:"-" json:"datacenter_resources,omitempty"` WorkflowResources []*w.WorkflowResource `bson:"-" json:"workflow_resources,omitempty"` } + +type ItemResource struct { + Data data.DataResource `bson:"data,omitempty" json:"data,omitempty"` + Processing processing.ProcessingResource `bson:"processing,omitempty" json:"processing,omitempty"` + Storage storage.StorageResource `bson:"storage,omitempty" json:"storage,omitempty"` + Datacenter datacenter.DatacenterResource `bson:"datacenter,omitempty" json:"datacenter,omitempty"` + Workflow w.WorkflowResource `bson:"workflow,omitempty" json:"workflow,omitempty"` +} diff --git a/models/resources/storage/storage.go b/models/resources/storage/storage.go index a16635b..ce7748e 100644 --- a/models/resources/storage/storage.go +++ b/models/resources/storage/storage.go @@ -3,6 +3,7 @@ package storage import ( "encoding/json" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/utils" ) @@ -12,7 +13,7 @@ type URL struct { } type StorageResource struct { - utils.AbstractResource + resource_model.AbstractResource Acronym string `bson:"acronym,omitempty" json:"acronym,omitempty"` Type string `bson:"type,omitempty" json:"type,omitempty"` Size uint `bson:"size,omitempty" json:"size,omitempty"` diff --git a/models/resources/storage/storage_mongo_accessor.go b/models/resources/storage/storage_mongo_accessor.go index 604e653..f53b724 100644 --- a/models/resources/storage/storage_mongo_accessor.go +++ b/models/resources/storage/storage_mongo_accessor.go @@ -14,10 +14,12 @@ func (sma *StorageMongoAccessor) DeleteOne(id string) (utils.DBObject, int, erro } func (sma *StorageMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) { + set.(*StorageResource).ResourceModel = nil return sma.GenericUpdateOne(set, id, sma, &StorageResource{}) } func (sma *StorageMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { + data.(*StorageResource).ResourceModel = nil return sma.GenericStoreOne(data, sma) } diff --git a/models/resources/storage/storage_test.go b/models/resources/storage/storage_test.go index 9f55c42..29a5fa4 100644 --- a/models/resources/storage/storage_test.go +++ b/models/resources/storage/storage_test.go @@ -3,6 +3,7 @@ package storage import ( "testing" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/utils" "github.com/stretchr/testify/assert" @@ -10,7 +11,7 @@ import ( func TestStoreOneStorage(t *testing.T) { s := StorageResource{Size: 123, Url: &URL{Protocol: "http", Path: "azerty.fr"}, - AbstractResource: utils.AbstractResource{ + AbstractResource: resource_model.AbstractResource{ AbstractObject: utils.AbstractObject{Name: "testData"}, Description: "Lorem Ipsum", Logo: "azerty.com", @@ -28,7 +29,7 @@ func TestStoreOneStorage(t *testing.T) { func TestLoadOneStorage(t *testing.T) { s := StorageResource{Size: 123, Url: &URL{Protocol: "http", Path: "azerty.fr"}, - AbstractResource: utils.AbstractResource{ + AbstractResource: resource_model.AbstractResource{ AbstractObject: utils.AbstractObject{Name: "testData"}, Description: "Lorem Ipsum", Logo: "azerty.com", diff --git a/models/resources/workflow/graph/graph.go b/models/resources/workflow/graph/graph.go index 74b426d..4b25478 100644 --- a/models/resources/workflow/graph/graph.go +++ b/models/resources/workflow/graph/graph.go @@ -1,16 +1,18 @@ package graph +import "cloud.o-forge.io/core/oc-lib/models/resources" + type Graph struct { Items map[string]GraphItem `bson:"items" json:"items" default:"{}" validate:"required"` Links []GraphLink `bson:"links" json:"links" default:"{}" validate:"required"` } type GraphItem struct { - ID string `bson:"id" json:"id" validate:"required"` - Width float64 `bson:"width" json:"width" validate:"required"` - Height float64 `bson:"height" json:"height" validate:"required"` - Position Position `bson:"position" json:"position" validate:"required"` - ResourceID string `bson:"resource_id" json:"resource_id" validate:"required"` + ID string `bson:"id" json:"id" validate:"required"` + Width float64 `bson:"width" json:"width" validate:"required"` + Height float64 `bson:"height" json:"height" validate:"required"` + Position Position `bson:"position" json:"position" validate:"required"` + resources.ItemResource } type GraphLink struct { diff --git a/models/resources/workflow/workflow.go b/models/resources/workflow/workflow.go index 4adc0be..1a948d4 100644 --- a/models/resources/workflow/workflow.go +++ b/models/resources/workflow/workflow.go @@ -3,11 +3,12 @@ package oclib import ( "encoding/json" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/utils" ) type WorkflowResource struct { - utils.AbstractResource + resource_model.AbstractResource WorkflowID string `bson:"workflow_id,omitempty" json:"workflow_id,omitempty"` } diff --git a/models/resources/workflow/workflow_mongo_accessor.go b/models/resources/workflow/workflow_mongo_accessor.go index 271b10f..f4733c7 100644 --- a/models/resources/workflow/workflow_mongo_accessor.go +++ b/models/resources/workflow/workflow_mongo_accessor.go @@ -14,10 +14,12 @@ func (wfa *WorkflowResourceMongoAccessor) DeleteOne(id string) (utils.DBObject, } func (wfa *WorkflowResourceMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.DBObject, int, error) { + set.(*WorkflowResource).ResourceModel = nil return wfa.GenericUpdateOne(set, id, wfa, &WorkflowResource{}) } func (wfa *WorkflowResourceMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { + data.(*WorkflowResource).ResourceModel = nil return wfa.GenericStoreOne(data, wfa) } diff --git a/models/resources/workflow/workflow_test.go b/models/resources/workflow/workflow_test.go index fc98556..2a6c5dc 100644 --- a/models/resources/workflow/workflow_test.go +++ b/models/resources/workflow/workflow_test.go @@ -3,13 +3,14 @@ package oclib import ( "testing" + "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/utils" "github.com/stretchr/testify/assert" ) func TestStoreOneWorkflow(t *testing.T) { - w := WorkflowResource{AbstractResource: utils.AbstractResource{ + w := WorkflowResource{AbstractResource: resource_model.AbstractResource{ AbstractObject: utils.AbstractObject{Name: "testWorkflow"}, Description: "Lorem Ipsum", Logo: "azerty.com", @@ -26,7 +27,7 @@ func TestStoreOneWorkflow(t *testing.T) { } func TestLoadOneWorkflow(t *testing.T) { - w := WorkflowResource{AbstractResource: utils.AbstractResource{ + w := WorkflowResource{AbstractResource: resource_model.AbstractResource{ AbstractObject: utils.AbstractObject{Name: "testWorkflow"}, Description: "Lorem Ipsum", Logo: "azerty.com", diff --git a/models/utils/abstracts.go b/models/utils/abstracts.go index 83f9687..8bf633a 100644 --- a/models/utils/abstracts.go +++ b/models/utils/abstracts.go @@ -91,20 +91,7 @@ func (dma *AbstractAccessor) GenericUpdateOne(set DBObject, id string, accessor return accessor.LoadOne(id) } -type AbstractResource struct { - AbstractObject - ShortDescription string `json:"short_description,omitempty" bson:"short_description,omitempty" validate:"required"` - Description string `json:"description,omitempty" bson:"description,omitempty"` - Logo string `json:"logo,omitempty" bson:"logo,omitempty" validate:"required"` - Owner string `json:"owner,omitempty" bson:"owner,omitempty" validate:"required"` - OwnerLogo string `json:"owner_logo,omitempty" bson:"owner_logo,omitempty"` - SourceUrl string `json:"source_url,omitempty" bson:"source_url,omitempty" validate:"required"` - Price string `json:"price,omitempty" bson:"price,omitempty"` - License string `json:"license,omitempty" bson:"license,omitempty"` - Inputs []interface{} `json:"inputs,omitempty" bson:"inputs,omitempty"` - Outputs []interface{} `json:"outputs,omitempty" bson:"outputs,omitempty"` - Proxy *ResourceProxy `json:"proxy,omitempty" bson:"proxy,omitempty"` -} +/* type ResourceProxy struct { Host string `json:"host,omitempty" bson:"host,omitempty"` Port int `json:"port,omitempty" bson:"port,omitempty"` @@ -112,3 +99,4 @@ type ResourceProxy struct { Args []string `json:"args,omitempty" bson:"args,omitempty"` EnvArgs map[string]interface{} `json:"env_args,omitempty" bson:"env_args,omitempty"` } +*/ diff --git a/models/utils/enums.go b/models/utils/enums.go index 3853805..870716e 100644 --- a/models/utils/enums.go +++ b/models/utils/enums.go @@ -12,6 +12,7 @@ const ( WORKFLOW WORKFLOW_EXECUTION WORKSPACE + RESOURCE_MODEL ) var Str = [...]string{ @@ -24,6 +25,7 @@ var Str = [...]string{ "workflow", "workflow_execution", "workspace", + "resource_model", } func FromInt(i int) string {