You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jclouds.apache.org by DImuthu Upeksha <di...@apache.org> on 2022/04/30 15:37:24 UTC

Openstack application credentials support

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)

Re: Openstack application credentials support

Posted by DImuthu Upeksha <di...@apache.org>.
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 <na...@apache.org> wrote:

> That looks good. Thanks! PR would be very welcome!
>
> On Mon, May 2, 2022 at 9:46 AM DImuthu Upeksha <di...@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 <di...@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)
> > >
> > >
> > >
> > >
> >
>

Re: Openstack application credentials support

Posted by Ignasi Barrera <na...@apache.org>.
That looks good. Thanks! PR would be very welcome!

On Mon, May 2, 2022 at 9:46 AM DImuthu Upeksha <di...@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 <di...@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)
> >
> >
> >
> >
>

Re: Openstack application credentials support

Posted by DImuthu Upeksha <di...@apache.org>.
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 <di...@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)
>
>
>
>