diff --git a/adapter/oam.go b/adapter/oam.go index 6bd7a80..88c727b 100644 --- a/adapter/oam.go +++ b/adapter/oam.go @@ -167,16 +167,23 @@ func (or *OAMRegistrant) Register() error { return nil } +type MeshModelConfig struct { + Category string + SubCategory string + Metadata map[string]interface{} +} + // StaticCompConfig is used to configure CreateComponents type StaticCompConfig struct { - MeshModelName string //Used in Adding ModelName onto Core Meshmodel components. Pass it the same as meshName in OAM components - URL string //URL - Method string //Use the constants exported by package. Manifests or Helm - OAMPath string //Where to store the directory.(Each directory will have an array of definitions and schemas) - MeshModelPath string - DirName string //The directory's name. By convention, it should be the version name - Config manifests.Config //Filters required to create definition and schema - Force bool //When set to true, if the file with same name already exists, they will be overridden + MeshModelName string //Used in Adding ModelName onto Core Meshmodel components. Pass it the same as meshName in OAM components + URL string //URL + Method string //Use the constants exported by package. Manifests or Helm + OAMPath string //Where to store the directory.(Each directory will have an array of definitions and schemas) + MeshModelPath string + MeshModelConfig MeshModelConfig + DirName string //The directory's name. By convention, it should be the version name + Config manifests.Config //Filters required to create definition and schema + Force bool //When set to true, if the file with same name already exists, they will be overridden } // CreateComponents generates components for a given configuration and stores them. @@ -235,7 +242,7 @@ func CreateComponents(scfg StaticCompConfig) error { defFileName := name + "_definition.json" schemaFileName := name + ".meshery.layer5io.schema.json" meshmodelFileName := name + "_meshmodel.json" - err = createMeshModelComponentsFromLegacyOAMComponents([]byte(def), schema, filepath.Join(meshmodelDir, meshmodelFileName), scfg.MeshModelName) + err = createMeshModelComponentsFromLegacyOAMComponents([]byte(def), schema, filepath.Join(meshmodelDir, meshmodelFileName), scfg.MeshModelName, scfg.MeshModelConfig) if err != nil { return ErrCreatingComponents(err) } @@ -261,7 +268,7 @@ func CreateComponents(scfg StaticCompConfig) error { } return nil } -func convertOAMtoMeshmodel(def []byte, schema string, isCore bool, meshmodelname string) ([]byte, error) { +func convertOAMtoMeshmodel(def []byte, schema string, isCore bool, meshmodelname string, mcfg MeshModelConfig) ([]byte, error) { var oamdef v1alpha1.WorkloadDefinition err := json.Unmarshal(def, &oamdef) if err != nil { @@ -269,19 +276,27 @@ func convertOAMtoMeshmodel(def []byte, schema string, isCore bool, meshmodelname } var c meshmodel.ComponentDefinition c.Metadata = make(map[string]interface{}) + metaname := strings.Split(manifests.FormatToReadableString(oamdef.ObjectMeta.Name), ".") + var displayname string + if len(metaname) > 0 { + displayname = metaname[0] + } + c.DisplayName = displayname + c.Model.Category = mcfg.Category + c.Model.SubCategory = mcfg.SubCategory + c.Metadata = mcfg.Metadata if isCore { c.APIVersion = oamdef.APIVersion c.Kind = oamdef.ObjectMeta.Name c.Model.Version = oamdef.Spec.Metadata["version"] c.Model.Name = meshmodelname - c.DisplayName = manifests.FormatToReadableString(oamdef.ObjectMeta.Name) } else { c.APIVersion = oamdef.Spec.Metadata["k8sAPIVersion"] c.Kind = oamdef.Spec.Metadata["k8sKind"] c.Model.Version = oamdef.Spec.Metadata["meshVersion"] c.Model.Name = oamdef.Spec.Metadata["meshName"] - c.DisplayName = manifests.FormatToReadableString(oamdef.ObjectMeta.Name) } + c.Model.DisplayName = manifests.FormatToReadableString(c.Model.Name) c.Format = meshmodel.JSON c.Schema = schema byt, err := json.Marshal(c) @@ -292,8 +307,8 @@ func convertOAMtoMeshmodel(def []byte, schema string, isCore bool, meshmodelname } // TODO: After OAM is completely removed from meshkit, replace this with fetching native meshmodel components. For now, reuse OAM functions -func createMeshModelComponentsFromLegacyOAMComponents(def []byte, schema string, path string, meshmodel string) (err error) { - byt, err := convertOAMtoMeshmodel(def, schema, false, meshmodel) +func createMeshModelComponentsFromLegacyOAMComponents(def []byte, schema string, path string, meshmodel string, mcfg MeshModelConfig) (err error) { + byt, err := convertOAMtoMeshmodel(def, schema, false, meshmodel, mcfg) if err != nil { return err }