Awesome. Here is the PR [3] [3] https://github.com/apache/jclouds/pull/142
Thanks Dimuthu On Mon, May 2, 2022 at 5:05 AM Ignasi Barrera <n...@apache.org> wrote: > That looks good. Thanks! PR would be very welcome! > > On Mon, May 2, 2022 at 9:46 AM DImuthu Upeksha <dimuthu...@apache.org> > wrote: > > > Seems like V3AuthenticationApi does not have an implementation for access > > key authentication so the invocation routes to the base interface which > > does not have any HTTP annotation. I implemented the missing feature and > it > > works for my openstack setup. Here is the commit history for my fork [2]. > > Please let me know if this is the correct approach and if so, I can send > a > > PR > > > > [2] > > > > > https://github.com/DImuthuUpe/jclouds/commit/c0bdf264dea02d6bdcea549405d05e3aac42f0b4 > > > > Thanks > > Dimuthu > > > > On Sat, Apr 30, 2022 at 11:37 AM DImuthu Upeksha <dimuthu...@apache.org> > > wrote: > > > > > Hi, > > > > > > I am trying to use Jclouds to access an openstack swift container using > > > the application credentials. Is that supported in 2.5.0 version? Below > is > > > the code sample I used and the error message I got. I can a similar > > > question in StackOverflow[1] as well > > > > > > [1] > > > > > > https://stackoverflow.com/questions/62950726/apache-jclouds-can-we-use-authentication-keystone-v3-with-application-credenti > > > > > > Thanks > > > Dimuthu > > > > > > String provider = "openstack-swift"; > > > String key = "key"; > > > String secret = "secret"; > > > > > > Properties overrides = new Properties(); > > > overrides.put(KeystoneProperties.KEYSTONE_VERSION, "3"); > > > overrides.put(KeystoneProperties.CREDENTIAL_TYPE, > > > CredentialTypes.API_ACCESS_KEY_CREDENTIALS); > > > > > > SwiftApi swiftApi = ContextBuilder.newBuilder(provider) > > > .endpoint("https://xxxxx:5000/v3/") > > > .credentials(key, secret) > > > .overrides(overrides) > > > .buildApi(SwiftApi.class); > > > > > > ContainerApi containerApi = > swiftApi.getContainerApi("General"); > > > FluentIterable<Container> containers = containerApi.list(); > > > for (Container c : containers) { > > > > > > System.out.println(c.getName()); > > > } > > > > > > > > > > > > Exception in thread "main" java.lang.IllegalStateException: > > Optional.get() > > > cannot be called on an absent value > > > at com.google.common.base.Absent.get(Absent.java:43) > > > at > > > > > > org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:227) > > > at > > > > > > org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137) > > > at > > > > > > org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:189) > > > at > > > > > > org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:85) > > > at > > > > > > org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74) > > > at > > > > > > org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45) > > > at > > > > > > org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156) > > > at > > > > > > org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123) > > > at com.sun.proxy.$Proxy61.authenticateAccessKey(Unknown Source) > > > at > > > > > > org.jclouds.openstack.keystone.auth.functions.AuthenticateApiAccessKeyCredentials.authenticate(AuthenticateApiAccessKeyCredentials.java:48) > > > at > > > > > > org.jclouds.openstack.keystone.auth.functions.BaseAuthenticator.apply(BaseAuthenticator.java:99) > > > at > > > > > > org.jclouds.openstack.keystone.auth.functions.BaseAuthenticator.apply(BaseAuthenticator.java:40) > > > at > > > > > > com.google.common.cache.CacheLoader$FunctionToCacheLoader.load(CacheLoader.java:165) > > > at > > > > > > com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529) > > > at > > > > com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278) > > > at > > > > > > com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155) > > > at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045) > > > at com.google.common.cache.LocalCache.get(LocalCache.java:3953) > > > at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3976) > > > at > > > > > > com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4960) > > > at > > > > > > com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4966) > > > at > > > > > > org.jclouds.openstack.keystone.auth.config.AuthenticationModule$2.get(AuthenticationModule.java:138) > > > at > > > > > > org.jclouds.openstack.keystone.auth.config.AuthenticationModule$2.get(AuthenticationModule.java:135) > > > at > > > > > > org.jclouds.openstack.keystone.v3.catalog.V3ServiceCatalog.get(V3ServiceCatalog.java:50) > > > at > > > > > > org.jclouds.openstack.keystone.v3.catalog.V3ServiceCatalog.get(V3ServiceCatalog.java:35) > > > at > > > > > > org.jclouds.openstack.keystone.catalog.suppliers.LocationIdToURIFromServiceEndpointsForTypeAndVersion.get(LocationIdToURIFromServiceEndpointsForTypeAndVersion.java:76) > > > at > > > > > > org.jclouds.openstack.keystone.catalog.suppliers.LocationIdToURIFromServiceEndpointsForTypeAndVersion.get(LocationIdToURIFromServiceEndpointsForTypeAndVersion.java:46) > > > at > > > > > > org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier$SetAndThrowAuthorizationExceptionSupplierBackedLoader.load(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:75) > > > at > > > > > > org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier$SetAndThrowAuthorizationExceptionSupplierBackedLoader.load(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:57) > > > at > > > > > > com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529) > > > at > > > > com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278) > > > at > > > > > > com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155) > > > at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045) > > > at com.google.common.cache.LocalCache.get(LocalCache.java:3953) > > > at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3976) > > > at > > > > > > com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4960) > > > at > > > > > > org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:150) > > > at > > > > > > org.jclouds.location.functions.RegionToEndpoint.apply(RegionToEndpoint.java:43) > > > at > > > > > > org.jclouds.location.functions.RegionToEndpoint.apply(RegionToEndpoint.java:32) > > > at > > > > > > org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointInParametersOrNull(RestAnnotationProcessor.java:528) > > > at > > > > > > org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointFor(RestAnnotationProcessor.java:551) > > > at > > > > > > org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:207) > > > at > > > > > > org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137) > > > at > > > > > > org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:189) > > > at > > > > > > org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:85) > > > at > > > > > > org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74) > > > at > > > > > > org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45) > > > at > > > > > > org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117) > > > at > > > > > > com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:86) > > > at com.sun.proxy.$Proxy67.list(Unknown Source) > > > at jclouds.JCloudsDownload.main(JCloudsDownload.java:35) > > > > > > > > > > > > > > >