Hi Wido, I just tested your branch, it looks ok ( https://github.com/wido/cloudstack/commits/ceph-object-store).
I got an error which is because I input invalid host/keys 2023-12-15 19:07:22,313 DEBUG [o.a.c.s.d.l.CephObjectStoreLifeCycleImpl] (qtp775386112-17:ctx-9be6ad79 ctx-b4cdcdd0) (logid:3a8340e9) Error while initializing Ceph RGW Object Store: IOException 2023-12-15 19:07:22,313 DEBUG [c.c.s.StorageManagerImpl] (qtp775386112-17:ctx-9be6ad79 ctx-b4cdcdd0) (logid:3a8340e9) Failed to add object store: Error while initializing Ceph RGW Object Store. Invalid credentials or URL java.lang.RuntimeException: Error while initializing Ceph RGW Object Store. Invalid credentials or URL at org.apache.cloudstack.storage.datastore.lifecycle.CephObjectStoreLifeCycleImpl.initialize(CephObjectStoreLifeCycleImpl.java:87) at com.cloud.storage.StorageManagerImpl.discoverObjectStore(StorageManagerImpl.java:3777) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) -Wei On Fri, 15 Dec 2023 at 17:18, Wido den Hollander <w...@widodh.nl> wrote: > > > Op 15/12/2023 om 13:54 schreef Wei ZHOU: > > Hi Wido, > > > > It looks you need a file like > > > https://github.com/apache/cloudstack/blob/main/plugins/storage/object/simulator/src/main/resources/META-INF/cloudstack/storage-object-simulator/spring-storage-object-simulator-context.xml > > > > Tnx. But that didn't solve it. The module seems to load according to the > mgmt server log, but I can't add the storage. Exception is the same. > > Wido > > > -Wei > > > > On Fri, 15 Dec 2023 at 13:40, Wido den Hollander <w...@widodh.nl.invalid > > > > wrote: > > > >> > >> > >> On 12/15/23 09:41, Ronald Feicht wrote: > >>> Hi Kishan, > >>> > >>> > >>> when I add my module to client/pom.xml I get the following error and > >> http://192.168.17.252:8080/client/ returns "HTTP ERROR 503 Service > >> Unavailable" because of the following exception: > >>> > >>> [WARNING] Failed startup of context > o.e.j.m.p.JettyWebAppContext@1df8ea34 > >> > {/client,file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/,UNAVAILABLE}{file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/} > >>> java.lang.NullPointerException > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet$1.with > >> (DefaultModuleDefinitionSet.java:104) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:263) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:251) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.startContexts > >> (DefaultModuleDefinitionSet.java:96) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.load > >> (DefaultModuleDefinitionSet.java:79) > >>> at > >> > org.apache.cloudstack.spring.module.factory.ModuleBasedContextFactory.loadModules > >> (ModuleBasedContextFactory.java:37) > >>> at > >> org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.init > >> (CloudStackSpringContext.java:70) > >>> at > >> > org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.<init> > >> (CloudStackSpringContext.java:57) > >>> at > >> > org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.<init> > >> (CloudStackSpringContext.java:61) > >>> at > >> > org.apache.cloudstack.spring.module.web.CloudStackContextLoaderListener.contextInitialized > >> (CloudStackContextLoaderListener.java:52) > >>> at > >> org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized > >> (ContextHandler.java:933) > >>> at > >> org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized > >> (ServletContextHandler.java:553) > >>> at org.eclipse.jetty.server.handler.ContextHandler.startContext > >> (ContextHandler.java:892) > >>> at org.eclipse.jetty.servlet.ServletContextHandler.startContext > >> (ServletContextHandler.java:356) > >>> at org.eclipse.jetty.webapp.WebAppContext.startWebapp > >> (WebAppContext.java:1445) > >>> at org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp > >> (JettyWebAppContext.java:328) > >>> at org.eclipse.jetty.webapp.WebAppContext.startContext > >> (WebAppContext.java:1409) > >>> at org.eclipse.jetty.server.handler.ContextHandler.doStart > >> (ContextHandler.java:825) > >>> at org.eclipse.jetty.servlet.ServletContextHandler.doStart > >> (ServletContextHandler.java:275) > >>> at org.eclipse.jetty.webapp.WebAppContext.doStart > >> (WebAppContext.java:524) > >>> at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart > >> (JettyWebAppContext.java:397) > >>> at org.eclipse.jetty.util.component.AbstractLifeCycle.start > >> (AbstractLifeCycle.java:72) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.start > >> (ContainerLifeCycle.java:169) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart > >> (ContainerLifeCycle.java:117) > >>> at org.eclipse.jetty.server.handler.AbstractHandler.doStart > >> (AbstractHandler.java:97) > >>> at org.eclipse.jetty.util.component.AbstractLifeCycle.start > >> (AbstractLifeCycle.java:72) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.start > >> (ContainerLifeCycle.java:169) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart > >> (ContainerLifeCycle.java:117) > >>> at org.eclipse.jetty.server.handler.AbstractHandler.doStart > >> (AbstractHandler.java:97) > >>> at org.eclipse.jetty.util.component.AbstractLifeCycle.start > >> (AbstractLifeCycle.java:72) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.start > >> (ContainerLifeCycle.java:169) > >>> at org.eclipse.jetty.server.Server.start (Server.java:407) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart > >> (ContainerLifeCycle.java:110) > >>> at org.eclipse.jetty.server.handler.AbstractHandler.doStart > >> (AbstractHandler.java:97) > >>> at org.eclipse.jetty.server.Server.doStart (Server.java:371) > >>> at org.eclipse.jetty.util.component.AbstractLifeCycle.start > >> (AbstractLifeCycle.java:72) > >>> at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty > >> (AbstractJettyMojo.java:450) > >>> at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute > >> (AbstractJettyMojo.java:311) > >>> at org.eclipse.jetty.maven.plugin.JettyRunMojo.execute > >> (JettyRunMojo.java:152) > >>> at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo > >> (DefaultBuildPluginManager.java:137) > >>> at org.apache.maven.lifecycle.internal.MojoExecutor.execute > >> (MojoExecutor.java:210) > >>> at org.apache.maven.lifecycle.internal.MojoExecutor.execute > >> (MojoExecutor.java:156) > >>> at org.apache.maven.lifecycle.internal.MojoExecutor.execute > >> (MojoExecutor.java:148) > >>> at > >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject > >> (LifecycleModuleBuilder.java:117) > >>> at > >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject > >> (LifecycleModuleBuilder.java:81) > >>> at > >> > org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build > >> (SingleThreadedBuilder.java:56) > >>> at org.apache.maven.lifecycle.internal.LifecycleStarter.execute > >> (LifecycleStarter.java:128) > >>> at org.apache.maven.DefaultMaven.doExecute > (DefaultMaven.java:305) > >>> at org.apache.maven.DefaultMaven.doExecute > (DefaultMaven.java:192) > >>> at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) > >>> at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) > >>> at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) > >>> at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) > >>> at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native > >> Method) > >>> at jdk.internal.reflect.NativeMethodAccessorImpl.invoke > >> (NativeMethodAccessorImpl.java:62) > >>> at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke > >> (DelegatingMethodAccessorImpl.java:43) > >>> at java.lang.reflect.Method.invoke (Method.java:566) > >>> at > org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced > >> (Launcher.java:282) > >>> at org.codehaus.plexus.classworlds.launcher.Launcher.launch > >> (Launcher.java:225) > >>> at > >> org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode > >> (Launcher.java:406) > >>> at org.codehaus.plexus.classworlds.launcher.Launcher.main > >> (Launcher.java:347) > >>> > >>> But the directory exists and is not empty: > >>> > >>> [root@cloudstack-centos cloudstack-huawei-obs]# ll > >> /opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/ > >>> total 4 > >>> drwxr-xr-x. 2 root root 21 Dec 15 08:59 WEB-INF > >>> -rw-r--r--. 1 root root 1135 Dec 15 08:59 index.html > >>> drwxr-xr-x. 3 root root 39 Dec 15 08:59 . > >>> drwxr-xr-x. 4 root root 87 Dec 15 08:59 .. > >>> [root@cloudstack-centos cloudstack-huawei-obs]# ll > >> > /opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/WEB-INF/ > >>> total 4 > >>> -rw-r--r--. 1 root root 2694 Dec 15 08:59 web.xml > >>> drwxr-xr-x. 2 root root 21 Dec 15 08:59 . > >>> drwxr-xr-x. 3 root root 39 Dec 15 08:59 .. > >>> > >>> I have compared my plugin code to that of Minio and > >> https://github.com/wido/cloudstack/commits/ceph-object-store but fail > to > >> see what I have done wrong. The only significant thing I can make out > is my > >> choice for the directory name > >> "/opt/cloudstack-huawei-obs/plugins/storage/object/huawei-obs". > >>> In plugins/pom.xml all object storage plugins have only a simple name > >> without the character "-" in it. > >>> <module>storage/object/minio</module> > >>> <module>storage/object/simulator</module> > >>> <module>storage/object/huawei-obs</module> > >>> But surely that cannot be the source of the error? > >>> > >> > >> My code doesn't work either, just running it now: > >> > >> "com.cloud.exception.InvalidParameterValueException: can't find object > >> store provider: Ceph RGW" > >> > >> But the module was loaded: > >> > >> 2023-12-15 12:24:39,440 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] > >> (main:null) (logid:) Loading module context [storage-object-ceph] from > >> URL > >> > >> > [jar:file:/usr/share/cloudstack-management/lib/cloudstack-4.19.0.0-SNAPSHOT.jar!/META-INF/cloudstack/bootstrap/spring-bootstrap-context-inheritable.xml] > >> 2023-12-15 12:24:39,496 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] > >> (main:null) (logid:) Loaded module context [storage-object-ceph] in 56 > ms > >> > >> Trying to figure out what is happening. > >> > >> Wido > >> > >>> My fork is located here > >> https://github.com/scsynergy/cloudstack-huawei-obs and I created a Pull > >> Request for you. > >>> > >>> > >>> 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 > >>> > >>> > >>> ________________________________ > >>> From: Kishan Kavala <kishan.kav...@shapeblue.com> > >>> Sent: Friday, December 15, 2023 06:35 > >>> To: dev@cloudstack.apache.org > >>> Subject: RE: New Object Storage - Huawei OBS > >>> > >>> Hi Ronald, > >>> You need to add module to client/pom.xml and add the plugin folder > to > >> plugins/pom.xml. > >>> Looks like your implementation of ObjectStoreProvider is not getting > >> registered as a ObjectStoreProvider. > >>> > >>> If you can share a draft PR, I can review and suggest what is missing. > >>> > >>> Regards, > >>> Kishan > >>> > >>> > >>> > >>> > >>> -----Original Message----- > >>> From: Ronald Feicht <ronald.fei...@scsynergy.com> > >>> Sent: Thursday, December 14, 2023 5:01 PM > >>> To: dev@cloudstack.apache.org > >>> Subject: Re: New Object Storage - Huawei OBS > >>> > >>> Hi, > >>> > >>> > >>> I had added the module to client/pom.xml, but then > >> http://192.168.17.252:8080/client/ retuns "HTTP ERROR 503 Service > >> Unavailable" because of the following exception: > >>> > >>> [WARNING] Failed startup of context > o.e.j.m.p.JettyWebAppContext@1df8ea34 > >> > {/client,file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/,UNAVAILABLE}{file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/} > >>> java.lang.NullPointerException > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet$1.with > >> (DefaultModuleDefinitionSet.java:104) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:263) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:268) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule > >> (DefaultModuleDefinitionSet.java:251) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.startContexts > >> (DefaultModuleDefinitionSet.java:96) > >>> at > >> > org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.load > >> (DefaultModuleDefinitionSet.java:79) > >>> at > >> > org.apache.cloudstack.spring.module.factory.ModuleBasedContextFactory.loadModules > >> (ModuleBasedContextFactory.java:37) > >>> at > >> org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.init > >> (CloudStackSpringContext.java:70) > >>> at > >> > org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.<init> > >> (CloudStackSpringContext.java:57) > >>> at > >> > org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.<init> > >> (CloudStackSpringContext.java:61) > >>> at > >> > org.apache.cloudstack.spring.module.web.CloudStackContextLoaderListener.contextInitialized > >> (CloudStackContextLoaderListener.java:52) > >>> at > >> org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized > >> (ContextHandler.java:933) > >>> at > >> org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized > >> (ServletContextHandler.java:553) > >>> at org.eclipse.jetty.server.handler.ContextHandler.startContext > >> (ContextHandler.java:892) > >>> at org.eclipse.jetty.servlet.ServletContextHandler.startContext > >> (ServletContextHandler.java:356) > >>> at org.eclipse.jetty.webapp.WebAppContext.startWebapp > >> (WebAppContext.java:1445) > >>> at org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp > >> (JettyWebAppContext.java:328) > >>> at org.eclipse.jetty.webapp.WebAppContext.startContext > >> (WebAppContext.java:1409) > >>> at org.eclipse.jetty.server.handler.ContextHandler.doStart > >> (ContextHandler.java:825) > >>> at org.eclipse.jetty.servlet.ServletContextHandler.doStart > >> (ServletContextHandler.java:275) > >>> at org.eclipse.jetty.webapp.WebAppContext.doStart > >> (WebAppContext.java:524) > >>> at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart > >> (JettyWebAppContext.java:397) > >>> at org.eclipse.jetty.util.component.AbstractLifeCycle.start > >> (AbstractLifeCycle.java:72) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.start > >> (ContainerLifeCycle.java:169) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart > >> (ContainerLifeCycle.java:117) > >>> at org.eclipse.jetty.server.handler.AbstractHandler.doStart > >> (AbstractHandler.java:97) > >>> at org.eclipse.jetty.util.component.AbstractLifeCycle.start > >> (AbstractLifeCycle.java:72) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.start > >> (ContainerLifeCycle.java:169) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart > >> (ContainerLifeCycle.java:117) > >>> at org.eclipse.jetty.server.handler.AbstractHandler.doStart > >> (AbstractHandler.java:97) > >>> at org.eclipse.jetty.util.component.AbstractLifeCycle.start > >> (AbstractLifeCycle.java:72) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.start > >> (ContainerLifeCycle.java:169) > >>> at org.eclipse.jetty.server.Server.start (Server.java:407) > >>> at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart > >> (ContainerLifeCycle.java:110) > >>> at org.eclipse.jetty.server.handler.AbstractHandler.doStart > >> (AbstractHandler.java:97) > >>> at org.eclipse.jetty.server.Server.doStart (Server.java:371) > >>> at org.eclipse.jetty.util.component.AbstractLifeCycle.start > >> (AbstractLifeCycle.java:72) > >>> at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty > >> (AbstractJettyMojo.java:450) > >>> at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute > >> (AbstractJettyMojo.java:311) > >>> at org.eclipse.jetty.maven.plugin.JettyRunMojo.execute > >> (JettyRunMojo.java:152) > >>> at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo > >> (DefaultBuildPluginManager.java:137) > >>> at org.apache.maven.lifecycle.internal.MojoExecutor.execute > >> (MojoExecutor.java:210) > >>> at org.apache.maven.lifecycle.internal.MojoExecutor.execute > >> (MojoExecutor.java:156) > >>> at org.apache.maven.lifecycle.internal.MojoExecutor.execute > >> (MojoExecutor.java:148) > >>> at > >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject > >> (LifecycleModuleBuilder.java:117) > >>> at > >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject > >> (LifecycleModuleBuilder.java:81) > >>> at > >> > org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build > >> (SingleThreadedBuilder.java:56) > >>> at org.apache.maven.lifecycle.internal.LifecycleStarter.execute > >> (LifecycleStarter.java:128) > >>> at org.apache.maven.DefaultMaven.doExecute > (DefaultMaven.java:305) > >>> at org.apache.maven.DefaultMaven.doExecute > (DefaultMaven.java:192) > >>> at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) > >>> at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) > >>> at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) > >>> at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) > >>> at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native > >> Method) > >>> at jdk.internal.reflect.NativeMethodAccessorImpl.invoke > >> (NativeMethodAccessorImpl.java:62) > >>> at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke > >> (DelegatingMethodAccessorImpl.java:43) > >>> at java.lang.reflect.Method.invoke (Method.java:566) > >>> at > org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced > >> (Launcher.java:282) > >>> at org.codehaus.plexus.classworlds.launcher.Launcher.launch > >> (Launcher.java:225) > >>> at > >> org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode > >> (Launcher.java:406) > >>> at org.codehaus.plexus.classworlds.launcher.Launcher.main > >> (Launcher.java:347) > >>> > >>> But the directory exists and is not empty: > >>> > >>> [root@cloudstack-centos cloudstack-huawei-obs]# ll > >> /opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/ > >>> total 4 > >>> drwxr-xr-x. 2 root root 21 Dec 14 12:17 WEB-INF > >>> -rw-r--r--. 1 root root 1135 Dec 14 12:17 index.html > >>> drwxr-xr-x. 3 root root 39 Dec 14 12:17 . > >>> drwxr-xr-x. 4 root root 87 Dec 14 12:17 .. > >>> [root@cloudstack-centos cloudstack-huawei-obs]# ll > >> > /opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/WEB-INF/ > >>> total 4 > >>> -rw-r--r--. 1 root root 2694 Dec 14 12:17 web.xml > >>> drwxr-xr-x. 2 root root 21 Dec 14 12:17 . > >>> drwxr-xr-x. 3 root root 39 Dec 14 12:17 .. > >>> > >>> Because of that error I had removed my plugin from client/pom.xml again > >> and then afterwards http://192.168.17.252:8080/client/ worked. > >>> So, I now understand that my plugin must by part of client/pom.xml but > >> then I receive the same exception mentioned above - how do I fix that? > >>> > >>> > >>> 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 > >>> > >>> > >>> ________________________________ > >>> From: Slavka Peleva <slav...@storpool.com.INVALID> > >>> Sent: Thursday, December 14, 2023 11:37 > >>> To: dev@cloudstack.apache.org > >>> Subject: Re: New Object Storage - Huawei OBS > >>> > >>> 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(StorageManage > >>>> rImpl.java:3743) > >>>>> at > >>>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nati > >>>>> ve > >>>>> Method) > >>>>> at > >>>>> > >>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeM > >>>> ethodAccessorImpl.java:62) > >>>>> at > >>>>> > >>>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Del > >>>> egatingMethodAccessorImpl.java:43) > >>>>> at > java.base/java.lang.reflect.Method.invoke(Method.java:566) > >>>>> at > >>>>> > >>>> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflectio > >>>> n(AopUtils.java:344) > >>>>> at > >>>>> > >>>> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoi > >>>> npoint(ReflectiveMethodInvocation.java:198) > >>>>> at > >>>>> > >>>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R > >>>> eflectiveMethodInvocation.java:163) > >>>>> at > >>>>> > >>>> org.apache.cloudstack.network.contrail.management.EventUtils$EventInte > >>>> rceptor.invoke(EventUtils.java:107) > >>>>> at > >>>>> > >>>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R > >>>> eflectiveMethodInvocation.java:175) > >>>>> at > >>>>> > >>>> com.cloud.event.ActionEventInterceptor.invoke(ActionEventInterceptor.j > >>>> ava:52) > >>>>> at > >>>>> > >>>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R > >>>> eflectiveMethodInvocation.java:175) > >>>>> at > >>>>> > >>>> org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke > >>>> (ExposeInvocationInterceptor.java:97) > >>>>> at > >>>>> > >>>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R > >>>> eflectiveMethodInvocation.java:186) > >>>>> at > >>>>> > >>>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamic > >>>> AopProxy.java:215) > >>>>> at com.sun.proxy.$Proxy119.discoverObjectStore(Unknown > Source) > >>>>> at > >>>>> > >>>> org.apache.cloudstack.api.command.admin.storage.AddObjectStoragePoolCm > >>>> d.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.cal > >>>> l(DefaultManagedContext.java:55) > >>>>> at > >>>>> > >>>> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callW > >>>> ithContext(DefaultManagedContext.java:102) > >>>>> at > >>>>> > >>>> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWi > >>>> thContext(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(Servle > >>>> tHolder.java:1386) > >>>>> at > >>>>> > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:755) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletH > >>>> andler.java:1617) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(Web > >>>> SocketUpgradeFilter.java:226) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletH > >>>> andler.java:1604) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java: > >>>> 545) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.ja > >>>> va: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(ScopedHandle > >>>> r.java:235) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandle > >>>> r.java:1610) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandle > >>>> r.java:233) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandle > >>>> r.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.ja > >>>> va:141) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(Conte > >>>> xtHandlerCollection.java:221) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerColle > >>>> ction.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(EatWhatY > >>>> ouKill.java:336) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWha > >>>> tYouKill.java:313) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWh > >>>> atYouKill.java:171) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKi > >>>> ll.java:129) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.ru > >>>> n(ReservedThreadExecutor.java:375) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool > >>>> .java:806) > >>>>> at > >>>>> > >>>> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThread > >>>> Pool.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 > >>>>> > >>>> > >>> > >> > > >