无法使用最新的OpenStack对Swift ContextBuilder进行身份验证

时间:2018-04-26 14:58:58

标签: java openstack-swift jclouds

我安装了最新的OpenStack,我使用Java和jclouds SDK与OpenStack Swift进行交互,在我使用的OpenStack环境中,身份API版本是/identity/v3/和Swift API版本为v1/,我的代码为:

blobContext = ContextBuilder.newBuilder(PROVIDER)
        .credentials(username, apiKey)
        .endpoint(EndPoint)
        .overrides(multipartProperties)
        //.buildApi(RegionScopedBlobStoreContext.class);
        .buildView(RegionScopedBlobStoreContext.class);
String blobRegion = blobContext.getConfiguredRegions().iterator().next();

所以在这一行 String blobRegion = blobContext.getConfiguredRegions().iterator().next();我得到了例外:

request: POST http://devstack.####.com:#####/v1/tokens HTTP/1.1  [Sensitive data in payload, use jclouds.wire.log.sensitive override to enable logging this data.] failed with response: HTTP/1.1 401 Unauthorized

此代码过去曾用过,但过去我没有使用最新的OpenStack,重要的是我的身份服务是项目范围而不是 Domain-Scoped (参考this link) 而swift API是:http://devstack.####.com:#####/v1/ 我正在使用最新的jclouds API

我相信这个问题会出现在所有的ContextBuilders中,所以无论如何我能解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:1)

要在新的OpenStack环境(运行Keystone v3)上使用jcloud,您必须使用jclouds> = 2.1.0并使用适当的Keystone属性配置ContextBuilder,如下所示: https://jclouds.apache.org/blog/2018/01/16/keystone-v3/