我安装了最新的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中,所以无论如何我能解决这个问题吗?
由于
答案 0 :(得分:1)
要在新的OpenStack环境(运行Keystone v3)上使用jcloud,您必须使用jclouds> = 2.1.0并使用适当的Keystone属性配置ContextBuilder,如下所示: https://jclouds.apache.org/blog/2018/01/16/keystone-v3/