@@ -22,6 +22,8 @@ import (
22
22
23
23
"github.com/layer5io/meshery-istio/istio"
24
24
"github.com/layer5io/meshkit/logger"
25
+ "github.com/layer5io/meshkit/utils/manifests"
26
+ smp "github.com/layer5io/service-mesh-performance/spec"
25
27
26
28
// "github.com/layer5io/meshkit/tracing"
27
29
"github.com/layer5io/meshery-adapter-library/adapter"
@@ -105,8 +107,8 @@ func main() {
105
107
service .StartedAt = time .Now ()
106
108
service .Version = version
107
109
service .GitSHA = gitsha
108
-
109
- go registerCapabilities (service .Port , log )
110
+ go registerCapabilities ( service . Port , log ) //Registering static capabilities
111
+ go registerDynamicCapabilities (service .Port , log ) //Registering latest capabilities periodically
110
112
111
113
// Server Initialization
112
114
log .Info ("Adaptor Listening at port: " , service .Port )
@@ -156,3 +158,50 @@ func registerCapabilities(port string, log logger.Handler) {
156
158
log .Info (err .Error ())
157
159
}
158
160
}
161
+
162
+ func registerDynamicCapabilities (port string , log logger.Handler ) {
163
+ registerWorkloads (port , log )
164
+ //Start the ticker
165
+ const reRegisterAfter = 24
166
+ ticker := time .NewTicker (reRegisterAfter * time .Hour )
167
+ for {
168
+ <- ticker .C
169
+ registerWorkloads (port , log )
170
+ }
171
+
172
+ }
173
+ func registerWorkloads (port string , log logger.Handler ) {
174
+ release , err := config .GetLatestReleases (1 )
175
+ if err != nil {
176
+ log .Info ("Could not get latest stable release" )
177
+ return
178
+ }
179
+ version := release [0 ].TagName
180
+ log .Info ("Registering latest workload components for version " , version )
181
+ // Register workloads
182
+ if err := adapter .RegisterWorkLoadsDynamically (mesheryServerAddress (), serviceAddress ()+ ":" + port , & adapter.DynamicComponentsConfig {
183
+ TimeoutInMinutes : 30 ,
184
+ URL : "https://raw.githubusercontent.com/istio/istio/" + version + "/manifests/charts/base/crds/crd-all.gen.yaml" ,
185
+ GenerationMethod : adapter .Manifests ,
186
+ Config : manifests.Config {
187
+ Name : smp .ServiceMesh_Type_name [int32 (smp .ServiceMesh_ISTIO )],
188
+ MeshVersion : version ,
189
+ Filter : manifests.CrdFilter {
190
+ RootFilter : []string {"$[?(@.kind==\" CustomResourceDefinition\" )]" },
191
+ NameFilter : []string {"$..[\" spec\" ][\" names\" ][\" kind\" ]" },
192
+ VersionFilter : []string {"$[0]..spec.versions[0]" },
193
+ GroupFilter : []string {"$[0]..spec" },
194
+ SpecFilter : []string {"$[0]..openAPIV3Schema.properties.spec" },
195
+ ItrFilter : []string {"$[?(@.spec.names.kind" },
196
+ ItrSpecFilter : []string {"$[?(@.spec.names.kind" },
197
+ VField : "name" ,
198
+ GField : "group" ,
199
+ },
200
+ },
201
+ Operation : config .IstioOperation ,
202
+ }); err != nil {
203
+ log .Info (err .Error ())
204
+ return
205
+ }
206
+ log .Info ("Latest workload components successfully registered." )
207
+ }
0 commit comments