Hi Ronald, In the logs, you can find all the modules that are loaded like:
``` 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: baremetal-storage 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: server-alert-adapter-storage 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: server-storage 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: server-template-adapter 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-allocator 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-image-default 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-image-s3 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-image-swift 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-object-minio 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-object-simulator 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-cloudbyte 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-datera 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-default 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-flasharray 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-linstor 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-primera 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-scaleio 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-solidfire 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-storpool ``` Like Wei mentioned you need to add the module in the client/pom.xml or you can copy the jar of your plugin (just for the tests) in `/usr/share/cloudstack-management/lib/` and restart the service Best regards, Slavka On Thu, Dec 14, 2023 at 11:57 AM Wei ZHOU <ustcweiz...@gmail.com> wrote: > Is the module added to client/pom.xml ? > > -Wei > > On Thu, 14 Dec 2023 at 10:51, Ronald Feicht <ronald.fei...@scsynergy.com> > wrote: > > > Hi, > > > > I am trying to write an Object Storage plugin for Huawei OBS using Minio > > as example. I added my plugin code to the plugins/storage/object/ > > directory, added my plugin into plugins/pom.xml and added the string > > 'Huawei OBS' to AddObjectStorage.vue for the dropdown in the UI. But > when I > > select that dropdown entry and click "Save" in the UI the following > > exception is thrown: > > com.cloud.exception.InvalidParameterValueException: can't find object > > store provider: Huawei OBS > > at > > > com.cloud.storage.StorageManagerImpl.discoverObjectStore(StorageManagerImpl.java:3743) > > at > > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > > Method) > > at > > > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > at > > > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > at java.base/java.lang.reflect.Method.invoke(Method.java:566) > > at > > > org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) > > at > > > org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) > > at > > > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) > > at > > > org.apache.cloudstack.network.contrail.management.EventUtils$EventInterceptor.invoke(EventUtils.java:107) > > at > > > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) > > at > > > com.cloud.event.ActionEventInterceptor.invoke(ActionEventInterceptor.java:52) > > at > > > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) > > at > > > org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) > > at > > > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) > > at > > > org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) > > at com.sun.proxy.$Proxy119.discoverObjectStore(Unknown Source) > > at > > > org.apache.cloudstack.api.command.admin.storage.AddObjectStoragePoolCmd.execute(AddObjectStoragePoolCmd.java:117) > > at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:172) > > at com.cloud.api.ApiServer.queueCommand(ApiServer.java:782) > > at com.cloud.api.ApiServer.handleRequest(ApiServer.java:603) > > at > > com.cloud.api.ApiServlet.processRequestInContext(ApiServlet.java:347) > > at com.cloud.api.ApiServlet$1.run(ApiServlet.java:154) > > at > > > org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:55) > > at > > > org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:102) > > at > > > org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:52) > > at com.cloud.api.ApiServlet.processRequest(ApiServlet.java:151) > > at com.cloud.api.ApiServlet.doGet(ApiServlet.java:105) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) > > at > > > org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1386) > > at > > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:755) > > at > > > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617) > > at > > > org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:226) > > at > > > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) > > at > > > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545) > > at > > > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) > > at > > > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:590) > > at > > > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) > > at > > > org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) > > at > > > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610) > > at > > > org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) > > at > > > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1300) > > at > > > org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) > > at > > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) > > at > > > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580) > > at > > > org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) > > at > > > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1215) > > at > > > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) > > at > > > org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221) > > at > > > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) > > at > > > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) > > at org.eclipse.jetty.server.Server.handle(Server.java:500) > > at > > > org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383) > > at > > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547) > > at > > org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) > > at > > > org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273) > > at org.eclipse.jetty.io > > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) > > at org.eclipse.jetty.io > > .FillInterest.fillable(FillInterest.java:103) > > at org.eclipse.jetty.io > > .ChannelEndPoint$2.run(ChannelEndPoint.java:117) > > at > > > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) > > at > > > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) > > at > > > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) > > at > > > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) > > at > > > org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375) > > at > > > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) > > at > > > org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) > > at java.base/java.lang.Thread.run(Thread.java:829) > > > > > > What do I need to do to register my plugin with StorageManagerImpl.java? > > > > The fork I made with my code can be seen here > > https://github.com/scsynergy/cloudstack-huawei-obs . > > > > > > Mit freundlichen Grüßen > > R. Feicht > > > > sc synergy GmbH > > Hilgestrasse 14 | 55294 Bodenheim | Deutschland > > Fon: +49 6135 71691 - 000 | Fax: +49 6135 71691 - 299 > > http://www.scsynergy.com | ronald.fei...@scsynergy.com > > Sitz der Gesellschaft Bodenheim, HRB 8830, Amtsgericht Mainz, > > Geschäftsführer: Christian Reichert > > >