diff --git a/build/config.go b/build/config.go
index 6dddb5d..e045404 100644
--- a/build/config.go
+++ b/build/config.go
@@ -1,7 +1,9 @@
package build
import (
+ "encoding/json"
"fmt"
+ "io"
"os"
"path/filepath"
"strings"
@@ -17,9 +19,18 @@ var DefaultVersion string
var DefaultURL string
var DefaultGenerationMethod string
var WorkloadPath string
+var MeshModelPath string
var AllVersions []string
var CRDNames []string
+var meshmodelmetadata = make(map[string]interface{})
+
+var MeshModelConfig = adapter.MeshModelConfig{ //Move to build/config.go
+ Category: "Orchestration & Management",
+ SubCategory: "Service Mesh",
+ Metadata: meshmodelmetadata,
+}
+
// NewConfig creates the configuration for creating components
func NewConfig(version string) manifests.Config {
return manifests.Config{
@@ -40,7 +51,18 @@ func NewConfig(version string) manifests.Config {
func init() {
wd, _ := os.Getwd()
+ f, _ := os.Open("./build/meshmodel_metadata.json")
+ defer func() {
+ err := f.Close()
+ if err != nil {
+ fmt.Println(err.Error())
+ }
+ }()
+ byt, _ := io.ReadAll(f)
+
+ _ = json.Unmarshal(byt, &meshmodelmetadata)
WorkloadPath = filepath.Join(wd, "templates", "oam", "workloads")
+ MeshModelPath = filepath.Join(wd, "templates", "meshmodel", "components")
AllVersions, _ = utils.GetLatestReleaseTagsSorted("traefik", "mesh")
if len(AllVersions) == 0 {
return
diff --git a/build/meshmodel_metadata.json b/build/meshmodel_metadata.json
new file mode 100644
index 0000000..9d5cb08
--- /dev/null
+++ b/build/meshmodel_metadata.json
@@ -0,0 +1,8 @@
+{
+ "Primary Color": "#9D0FB0",
+ "Secondary Color": "#e281f0",
+ "Shape": "circle",
+ "Logo URL": "",
+ "SVG_Color": "",
+ "SVG_White": ""
+}
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 113d165..0503946 100644
--- a/go.mod
+++ b/go.mod
@@ -12,7 +12,7 @@ replace (
require (
github.com/google/uuid v1.3.0
- github.com/layer5io/meshery-adapter-library v0.6.0
+ github.com/layer5io/meshery-adapter-library v0.6.3
github.com/layer5io/meshkit v0.6.16
github.com/layer5io/service-mesh-performance v0.3.4
gopkg.in/yaml.v2 v2.4.0
diff --git a/go.sum b/go.sum
index 9ffddfe..785ce6c 100644
--- a/go.sum
+++ b/go.sum
@@ -627,8 +627,8 @@ github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6Fm
github.com/layer5io/kuttl v0.4.1-0.20200723152044-916f10574334/go.mod h1:UmrVd7x+bNVKrpmKgTtfRiTKHZeNPcMjQproJ0vGwhE=
github.com/layer5io/learn-layer5/smi-conformance v0.0.0-20210317075357-06b4f88b3e34 h1:QaViadDOBCMDUwYx78kfRvHMkzRVnh/GOhm3s2gxoP4=
github.com/layer5io/learn-layer5/smi-conformance v0.0.0-20210317075357-06b4f88b3e34/go.mod h1:BQPLwdJt7v7y0fXIejI4whR9zMyX07Wjt5xrbgEmHLw=
-github.com/layer5io/meshery-adapter-library v0.6.0 h1:Tg3/e7qqVDOWtj1ZHEq8/dvQ/MG7Ebg5Q3dS6qvA0Is=
-github.com/layer5io/meshery-adapter-library v0.6.0/go.mod h1:uEAy+N9/50nnmH3kdTU+J1ZaKAn5ajL4hSHyQYHeasM=
+github.com/layer5io/meshery-adapter-library v0.6.3 h1:5tsbgrB1q84X2rM1TsRVe3pSBZ8kztjo4lPsHuPBe/Y=
+github.com/layer5io/meshery-adapter-library v0.6.3/go.mod h1:x9/295iLiWab88uOwjgyZbJTX8aqkxfUlVZhqQKabew=
github.com/layer5io/meshkit v0.6.16 h1:bU9Q4Fl31yPqPjNJkf91wT7bM5LtLh+7P0eQix9f22I=
github.com/layer5io/meshkit v0.6.16/go.mod h1:9ZXmiP0dxRCNlVYgchrOnfFcNrdHVXuayiuN8RRTQ68=
github.com/layer5io/service-mesh-performance v0.3.2-0.20210122142912-a94e0658b021/go.mod h1:W153amv8aHAeIWxO7b7d7Vibt9RhaEVh4Uh+RG+BumQ=
diff --git a/main.go b/main.go
index 8c11fc1..ff71e79 100644
--- a/main.go
+++ b/main.go
@@ -22,6 +22,7 @@ import (
"strings"
"time"
+ "github.com/google/uuid"
"github.com/layer5io/meshery-traefik-mesh/traefik"
"github.com/layer5io/meshery-traefik-mesh/traefik/oam"
"github.com/layer5io/meshkit/logger"
@@ -39,6 +40,7 @@ var (
serviceName = "traefik-mesh-adapter"
version = "edge"
gitsha = "none"
+ instanceID = uuid.NewString()
)
func init() {
@@ -160,6 +162,11 @@ func registerCapabilities(port string, log logger.Handler) {
if err := oam.RegisterTraits(mesheryServerAddress(), serviceAddress()+":"+port); err != nil {
log.Info(err.Error())
}
+
+ // Register meshmodel components
+ if err := oam.RegisterMeshModelComponents(instanceID, mesheryServerAddress(), serviceAddress(), port); err != nil {
+ log.Error(err)
+ }
}
func registerDynamicCapabilities(port string, log logger.Handler) {
registerWorkloads(port, log)
@@ -195,11 +202,13 @@ func registerWorkloads(port string, log logger.Handler) {
crdurl := url + crd
log.Info("Registering ", crdurl)
if err := adapter.CreateComponents(adapter.StaticCompConfig{
- URL: crdurl,
- Method: gm,
- Path: build.WorkloadPath,
- DirName: version,
- Config: build.NewConfig(version),
+ URL: crdurl,
+ Method: gm,
+ OAMPath: build.WorkloadPath,
+ MeshModelPath: build.MeshModelPath,
+ MeshModelConfig: build.MeshModelConfig,
+ DirName: version,
+ Config: build.NewConfig(version),
}); err != nil {
log.Info(err.Error())
return
diff --git a/templates/meshmodel/components/v1.4.5/httproutegroup.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.5/httproutegroup.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..ec7ab1b
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.5/httproutegroup.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"HTTPRouteGroup","apiVersion":"specs.smi-spec.io/v1alpha4","display-name":"HTTP Route Group","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.5","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"matches\": {\n \"description\": \"Match conditions of this route group.\",\n \"items\": {\n \"properties\": {\n \"headers\": {\n \"description\": \"Header match conditions of this route.\",\n \"items\": {\n \"additionalProperties\": {\n \"type\": \"string\"\n },\n \"description\": \"Header match condition of this route.\",\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"methods\": {\n \"description\": \"The HTTP methods of this HTTP route.\",\n \"items\": {\n \"description\": \"The HTTP method of this HTTP route.\",\n \"enum\": [\n \"*\",\n \"GET\",\n \"HEAD\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"CONNECT\",\n \"OPTIONS\",\n \"TRACE\",\n \"PATCH\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"name\": {\n \"description\": \"Name of the HTTP route.\",\n \"type\": \"string\"\n },\n \"pathRegex\": {\n \"description\": \"URI path regex of the HTTP route.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"matches\"\n ],\n \"title\": \"HTTP Route Group\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.5/tcproute.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.5/tcproute.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..529a819
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.5/tcproute.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TCPRoute","apiVersion":"specs.smi-spec.io/v1alpha4","display-name":"TCP Route","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.5","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"matches\": {\n \"description\": \"Match conditions of this route.\",\n \"properties\": {\n \"ports\": {\n \"description\": \"Port numbers to match TCP traffic.\",\n \"items\": {\n \"type\": \"integer\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"ports\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"matches\"\n ],\n \"title\": \"TCP Route\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.5/traefikmesh_meshmodel.json b/templates/meshmodel/components/v1.4.5/traefikmesh_meshmodel.json
new file mode 100644
index 0000000..eb0899d
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.5/traefikmesh_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TraefikMesh","apiVersion":"core.meshmodel.dev/v1alpha1","display-name":"Traefik Mesh","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.5","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\"$id\":\"http://meshery.layer5.io/definition/Workload/TraefikMesh\",\"$schema\":\"http://json-schema.org/draft-07/schema\",\"title\":\"TraefikMesh\",\"type\":\"object\",\"properties\":{}}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.5/trafficsplit.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.5/trafficsplit.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..20abf3c
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.5/trafficsplit.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TrafficSplit","apiVersion":"split.smi-spec.io/v1alpha4","display-name":"Traffic Split","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.5","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"backends\": {\n \"description\": \"The backend services of this split.\",\n \"items\": {\n \"properties\": {\n \"service\": {\n \"description\": \"Name of the Kubernetes service.\",\n \"type\": \"string\"\n },\n \"weight\": {\n \"description\": \"Traffic weight value of this backend.\",\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"service\",\n \"weight\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"matches\": {\n \"description\": \"The HTTP route groups that this traffic split should match.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of the matching group.\",\n \"enum\": [\n \"HTTPRouteGroup\"\n ],\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of the matching group.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"kind\",\n \"name\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"service\": {\n \"description\": \"The apex service of this split.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"service\",\n \"backends\"\n ],\n \"title\": \"Traffic Split\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.5/traffictarget.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.5/traffictarget.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..0384908
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.5/traffictarget.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TrafficTarget","apiVersion":"access.smi-spec.io/v1alpha3","display-name":"Traffic Target","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.5","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"destination\": {\n \"description\": \"The destination of this traffic target.\",\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of the destination.\",\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of the destination.\",\n \"type\": \"string\"\n },\n \"namespace\": {\n \"description\": \"Namespace of the destination.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"rules\": {\n \"description\": \"Specifications of this traffic target.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of this spec.\",\n \"enum\": [\n \"HTTPRouteGroup\",\n \"TCPRoute\",\n \"UDPRoute\"\n ],\n \"type\": \"string\"\n },\n \"matches\": {\n \"description\": \"Match conditions of this spec.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"name\": {\n \"description\": \"Name of this spec.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"sources\": {\n \"description\": \"Sources of this traffic target.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of this source.\",\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of this source.\",\n \"type\": \"string\"\n },\n \"namespace\": {\n \"description\": \"Namespace of this source.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"destination\",\n \"rules\",\n \"sources\"\n ],\n \"title\": \"Traffic Target\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.7/httproutegroup.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.7/httproutegroup.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..8074015
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.7/httproutegroup.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"HTTPRouteGroup","apiVersion":"specs.smi-spec.io/v1alpha4","display-name":"HTTP Route Group","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.7","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"matches\": {\n \"description\": \"Match conditions of this route group.\",\n \"items\": {\n \"properties\": {\n \"headers\": {\n \"description\": \"Header match conditions of this route.\",\n \"items\": {\n \"additionalProperties\": {\n \"type\": \"string\"\n },\n \"description\": \"Header match condition of this route.\",\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"methods\": {\n \"description\": \"The HTTP methods of this HTTP route.\",\n \"items\": {\n \"description\": \"The HTTP method of this HTTP route.\",\n \"enum\": [\n \"*\",\n \"GET\",\n \"HEAD\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"CONNECT\",\n \"OPTIONS\",\n \"TRACE\",\n \"PATCH\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"name\": {\n \"description\": \"Name of the HTTP route.\",\n \"type\": \"string\"\n },\n \"pathRegex\": {\n \"description\": \"URI path regex of the HTTP route.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"matches\"\n ],\n \"title\": \"HTTP Route Group\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.7/tcproute.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.7/tcproute.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..6a2ba0a
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.7/tcproute.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TCPRoute","apiVersion":"specs.smi-spec.io/v1alpha4","display-name":"TCP Route","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.7","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"matches\": {\n \"description\": \"Match conditions of this route.\",\n \"properties\": {\n \"ports\": {\n \"description\": \"Port numbers to match TCP traffic.\",\n \"items\": {\n \"type\": \"integer\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"ports\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"matches\"\n ],\n \"title\": \"TCP Route\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.7/traefikmesh_meshmodel.json b/templates/meshmodel/components/v1.4.7/traefikmesh_meshmodel.json
new file mode 100644
index 0000000..6eb2171
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.7/traefikmesh_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TraefikMesh","apiVersion":"core.meshmodel.dev/v1alpha1","display-name":"Traefik Mesh","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.7","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\"$id\":\"http://meshery.layer5.io/definition/Workload/TraefikMesh\",\"$schema\":\"http://json-schema.org/draft-07/schema\",\"title\":\"TraefikMesh\",\"type\":\"object\",\"properties\":{}}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.7/trafficsplit.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.7/trafficsplit.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..eab698d
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.7/trafficsplit.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TrafficSplit","apiVersion":"split.smi-spec.io/v1alpha4","display-name":"Traffic Split","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.7","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"backends\": {\n \"description\": \"The backend services of this split.\",\n \"items\": {\n \"properties\": {\n \"service\": {\n \"description\": \"Name of the Kubernetes service.\",\n \"type\": \"string\"\n },\n \"weight\": {\n \"description\": \"Traffic weight value of this backend.\",\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"service\",\n \"weight\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"matches\": {\n \"description\": \"The HTTP route groups that this traffic split should match.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of the matching group.\",\n \"enum\": [\n \"HTTPRouteGroup\"\n ],\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of the matching group.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"kind\",\n \"name\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"service\": {\n \"description\": \"The apex service of this split.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"service\",\n \"backends\"\n ],\n \"title\": \"Traffic Split\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.7/traffictarget.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.7/traffictarget.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..0e4b006
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.7/traffictarget.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TrafficTarget","apiVersion":"access.smi-spec.io/v1alpha3","display-name":"Traffic Target","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.7","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"destination\": {\n \"description\": \"The destination of this traffic target.\",\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of the destination.\",\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of the destination.\",\n \"type\": \"string\"\n },\n \"namespace\": {\n \"description\": \"Namespace of the destination.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"rules\": {\n \"description\": \"Specifications of this traffic target.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of this spec.\",\n \"enum\": [\n \"HTTPRouteGroup\",\n \"TCPRoute\",\n \"UDPRoute\"\n ],\n \"type\": \"string\"\n },\n \"matches\": {\n \"description\": \"Match conditions of this spec.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"name\": {\n \"description\": \"Name of this spec.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"sources\": {\n \"description\": \"Sources of this traffic target.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of this source.\",\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of this source.\",\n \"type\": \"string\"\n },\n \"namespace\": {\n \"description\": \"Namespace of this source.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"destination\",\n \"rules\",\n \"sources\"\n ],\n \"title\": \"Traffic Target\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.8/httproutegroup.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.8/httproutegroup.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..d7da4ed
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.8/httproutegroup.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"HTTPRouteGroup","apiVersion":"specs.smi-spec.io/v1alpha4","display-name":"HTTP Route Group","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.8","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"matches\": {\n \"description\": \"Match conditions of this route group.\",\n \"items\": {\n \"properties\": {\n \"headers\": {\n \"description\": \"Header match conditions of this route.\",\n \"items\": {\n \"additionalProperties\": {\n \"type\": \"string\"\n },\n \"description\": \"Header match condition of this route.\",\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"methods\": {\n \"description\": \"The HTTP methods of this HTTP route.\",\n \"items\": {\n \"description\": \"The HTTP method of this HTTP route.\",\n \"enum\": [\n \"*\",\n \"GET\",\n \"HEAD\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"CONNECT\",\n \"OPTIONS\",\n \"TRACE\",\n \"PATCH\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"name\": {\n \"description\": \"Name of the HTTP route.\",\n \"type\": \"string\"\n },\n \"pathRegex\": {\n \"description\": \"URI path regex of the HTTP route.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"matches\"\n ],\n \"title\": \"HTTP Route Group\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.8/tcproute.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.8/tcproute.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..4a3f9f0
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.8/tcproute.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TCPRoute","apiVersion":"specs.smi-spec.io/v1alpha4","display-name":"TCP Route","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.8","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"matches\": {\n \"description\": \"Match conditions of this route.\",\n \"properties\": {\n \"ports\": {\n \"description\": \"Port numbers to match TCP traffic.\",\n \"items\": {\n \"type\": \"integer\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"ports\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [\n \"matches\"\n ],\n \"title\": \"TCP Route\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.8/traefikmesh_meshmodel.json b/templates/meshmodel/components/v1.4.8/traefikmesh_meshmodel.json
new file mode 100644
index 0000000..91c1273
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.8/traefikmesh_meshmodel.json
@@ -0,0 +1,24 @@
+{
+ "kind": "TraefikMesh",
+ "apiVersion": "core.meshmodel.dev/v1alpha1",
+ "display-name": "Traefik Mesh",
+ "format": "JSON",
+ "metadata":
+ {
+ "Logo URL": "",
+ "Primary Color": "#9D0FB0",
+ "SVG_Color": "",
+ "SVG_White": "",
+ "Secondary Color": "#e281f0",
+ "Shape": "circle"
+ },
+ "model":
+ {
+ "name": "TRAEFIK_MESH",
+ "version": "v1.4.8",
+ "display-name": "TRAEFIK_MESH",
+ "category": "Orchestration & Management",
+ "sub-category": "Service Mesh"
+ },
+ "schema": "{\"$id\":\"http://meshery.layer5.io/definition/Workload/TraefikMesh\",\"$schema\":\"http://json-schema.org/draft-07/schema\",\"title\":\"TraefikMesh\",\"type\":\"object\",\"properties\":{}}"
+}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.8/trafficsplit.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.8/trafficsplit.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..b799df2
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.8/trafficsplit.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TrafficSplit","apiVersion":"split.smi-spec.io/v1alpha4","display-name":"Traffic Split","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.8","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"backends\": {\n \"description\": \"The backend services of this split.\",\n \"items\": {\n \"properties\": {\n \"service\": {\n \"description\": \"Name of the Kubernetes service.\",\n \"type\": \"string\"\n },\n \"weight\": {\n \"description\": \"Traffic weight value of this backend.\",\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"service\",\n \"weight\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"matches\": {\n \"description\": \"The HTTP route groups that this traffic split should match.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of the matching group.\",\n \"enum\": [\n \"HTTPRouteGroup\"\n ],\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of the matching group.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"kind\",\n \"name\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"service\": {\n \"description\": \"The apex service of this split.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"service\",\n \"backends\"\n ],\n \"title\": \"Traffic Split\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/templates/meshmodel/components/v1.4.8/traffictarget.meshery.layer5.io_meshmodel.json b/templates/meshmodel/components/v1.4.8/traffictarget.meshery.layer5.io_meshmodel.json
new file mode 100644
index 0000000..3b3c275
--- /dev/null
+++ b/templates/meshmodel/components/v1.4.8/traffictarget.meshery.layer5.io_meshmodel.json
@@ -0,0 +1 @@
+{"kind":"TrafficTarget","apiVersion":"access.smi-spec.io/v1alpha3","display-name":"Traffic Target","format":"JSON","metadata":{"Logo URL":"","Primary Color":"#9D0FB0","SVG_Color":"","SVG_White":"\u003csvg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\u003cg clip-path=\"url(#a)\"\u003e\u003cpath d=\"m11.54 6.143.046.025 3.928 2.226a.878.878 0 0 0 .865 0l3.896-2.202a1.315 1.315 0 0 1 1.792.482 1.336 1.336 0 0 1-.45 1.808l-.045.027-2.249 1.273a.442.442 0 0 0-.224.386.446.446 0 0 0 .224.386l6.072 3.442a.875.875 0 0 0 .865 0l3.756-2.129a1.315 1.315 0 0 1 1.796.478 1.335 1.335 0 0 1-.453 1.812l-.045.027-2.115 1.196a.442.442 0 0 0-.164.61c.04.067.096.123.164.162l2.125 1.204a1.329 1.329 0 0 1 .518 1.79 1.316 1.316 0 0 1-1.771.551l-.046-.025-3.766-2.135a.877.877 0 0 0-.865 0l-6.14 3.48a.441.441 0 0 0-.164.61.44.44 0 0 0 .164.161l2.537 1.438a1.336 1.336 0 0 1 .51 1.785 1.318 1.318 0 0 1-1.763.556l-.046-.025-4.177-2.369a.878.878 0 0 0-.865 0l-4.215 2.392a1.315 1.315 0 0 1-1.79-.48 1.335 1.335 0 0 1 .447-1.81l.045-.026 2.572-1.46a.44.44 0 0 0 .167-.604.432.432 0 0 0-.167-.168l-6.084-3.448a.878.878 0 0 0-.866 0l-3.582 2.027a1.316 1.316 0 0 1-1.794-.48 1.336 1.336 0 0 1 .453-1.81l.045-.027 1.937-1.096a.44.44 0 0 0 .225-.386.444.444 0 0 0-.225-.386L.684 14.314a1.336 1.336 0 0 1-.51-1.785 1.315 1.315 0 0 1 1.762-.556l.047.025 3.579 2.029a.876.876 0 0 0 .864 0l6.143-3.476a.442.442 0 0 0 .225-.386.444.444 0 0 0-.225-.386l-2.281-1.295a1.336 1.336 0 0 1-.51-1.785c.164-.305.44-.534.769-.638.329-.104.685-.074.993.083v-.001Zm3.973 5.793-6.144 3.476a.442.442 0 0 0-.165.61c.04.068.096.124.165.163l6.08 3.446a.876.876 0 0 0 .866 0l6.138-3.48a.442.442 0 0 0 .164-.609.443.443 0 0 0-.164-.162l-6.076-3.444a.877.877 0 0 0-.865 0Z\" fill=\"#fff\"/\u003e\u003c/g\u003e\u003cdefs\u003e\u003cclipPath id=\"a\"\u003e\u003cpath fill=\"#fff\" d=\"M0 0h32v32H0z\"/\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e","Secondary Color":"#e281f0","Shape":"circle"},"model":{"name":"TRAEFIK_MESH","version":"v1.4.8","display-name":"TRAEFIK_MESH","category":"Orchestration \u0026 Management","sub-category":"Service Mesh"},"schema":"{\n \"properties\": {\n \"destination\": {\n \"description\": \"The destination of this traffic target.\",\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of the destination.\",\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of the destination.\",\n \"type\": \"string\"\n },\n \"namespace\": {\n \"description\": \"Namespace of the destination.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"rules\": {\n \"description\": \"Specifications of this traffic target.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of this spec.\",\n \"enum\": [\n \"HTTPRouteGroup\",\n \"TCPRoute\",\n \"UDPRoute\"\n ],\n \"type\": \"string\"\n },\n \"matches\": {\n \"description\": \"Match conditions of this spec.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"name\": {\n \"description\": \"Name of this spec.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"sources\": {\n \"description\": \"Sources of this traffic target.\",\n \"items\": {\n \"properties\": {\n \"kind\": {\n \"description\": \"Kind of this source.\",\n \"type\": \"string\"\n },\n \"name\": {\n \"description\": \"Name of this source.\",\n \"type\": \"string\"\n },\n \"namespace\": {\n \"description\": \"Namespace of this source.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"kind\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"destination\",\n \"rules\",\n \"sources\"\n ],\n \"title\": \"Traffic Target\",\n \"type\": \"object\"\n}"}
\ No newline at end of file
diff --git a/traefik/oam/register.go b/traefik/oam/register.go
index 7848e6e..504d689 100644
--- a/traefik/oam/register.go
+++ b/traefik/oam/register.go
@@ -4,22 +4,27 @@ import (
"fmt"
"os"
"path/filepath"
+ "strconv"
"strings"
+ "sync"
"github.com/layer5io/meshery-adapter-library/adapter"
"github.com/layer5io/meshery-traefik-mesh/internal/config"
+ "github.com/layer5io/meshkit/models/meshmodel/core/types"
)
var (
basePath, _ = os.Getwd()
//WorkloadPath will be used by both static and component generation
- WorkloadPath = filepath.Join(basePath, "templates", "oam", "workloads")
- traitPath = filepath.Join(basePath, "templates", "oam", "traits")
- pathSets = []schemaDefinitionPathSet{}
+ WorkloadPath = filepath.Join(basePath, "templates", "oam", "workloads")
+ MeshmodelComponents = filepath.Join(basePath, "templates", "meshmodel", "components")
+ traitPath = filepath.Join(basePath, "templates", "oam", "traits")
+ pathSets = []schemaDefinitionPathSet{}
)
// AvailableVersions denote the component versions available statically
var AvailableVersions = map[string]bool{}
+var availableVersionGlobalMutex sync.Mutex
type schemaDefinitionPathSet struct {
oamDefinitionPath string
@@ -27,6 +32,31 @@ type schemaDefinitionPathSet struct {
name string
}
+type meshmodelDefinitionPathSet struct {
+ meshmodelDefinitionPath string
+}
+
+func RegisterMeshModelComponents(uuid, runtime, host, port string) error {
+ meshmodelRDP := []adapter.MeshModelRegistrantDefinitionPath{}
+ pathSets, err := loadMeshmodelComponents(MeshmodelComponents)
+ if err != nil {
+ return err
+ }
+ portint, _ := strconv.Atoi(port)
+ for _, pathSet := range pathSets {
+ meshmodelRDP = append(meshmodelRDP, adapter.MeshModelRegistrantDefinitionPath{
+ EntityDefintionPath: pathSet.meshmodelDefinitionPath,
+ Host: host,
+ Port: portint,
+ Type: types.ComponentDefinition,
+ })
+ }
+
+ return adapter.
+ NewMeshModelRegistrant(meshmodelRDP, fmt.Sprintf("%s/api/meshmodel/components/register", runtime)).
+ Register(uuid)
+}
+
// RegisterWorkloads will register all of the workload definitions
// present in the path oam/workloads
//
@@ -86,6 +116,31 @@ func RegisterTraits(runtime, host string) error {
Register()
}
+func loadMeshmodelComponents(basepath string) ([]meshmodelDefinitionPathSet, error) {
+ res := []meshmodelDefinitionPathSet{}
+ if err := filepath.Walk(basepath, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ if info.IsDir() {
+ return nil
+ }
+
+ res = append(res, meshmodelDefinitionPathSet{
+ meshmodelDefinitionPath: path,
+ })
+ availableVersionGlobalMutex.Lock()
+ AvailableVersions[filepath.Base(filepath.Dir(path))] = true // Getting available versions already existing on file system
+ availableVersionGlobalMutex.Unlock()
+ return nil
+ }); err != nil {
+ return nil, err
+ }
+
+ return res, nil
+}
+
func load(basePath string) ([]schemaDefinitionPathSet, error) {
res := []schemaDefinitionPathSet{}
@@ -108,7 +163,9 @@ func load(basePath string) ([]schemaDefinitionPathSet, error) {
jsonSchemaPath: fmt.Sprintf("%s.meshery.layer5io.schema.json", nameWithPath),
name: filepath.Base(nameWithPath),
})
+ availableVersionGlobalMutex.Lock()
AvailableVersions[filepath.Base(filepath.Dir(path))] = true
+ availableVersionGlobalMutex.Unlock()
}
return nil