0

此代码向 RadosGW 发出GET请求(我不使用 Keystone)

String srcEndpoint = "http://myhost/auth/v1.0";
SwiftApi api = ContextBuilder.newBuilder(PROVIDER).endpoint(srcEndpoint)
                .credentials(srcIdentity, srcCredential).buildApi(SwiftApi.class);

如果PROVIDERopenstack-swift我的代码会抛出

org.jclouds.http.HttpResponseException: command: POST http://myhost/auth/v1.0/tokens HTTP/1.1 failed with response: HTTP/1.1 405 Method Not Allowed; content: [{"Code":"MethodNotAllowed"}]

如果PROVIDERswift我的代码抛出

Exception in thread "main" com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for org.jclouds.openstack.swift.v1.SwiftApi was bound.
  while locating org.jclouds.openstack.swift.v1.SwiftApi

我的依赖是

<dependency>
    <groupId>org.apache.jclouds.api</groupId>
    <artifactId>swift</artifactId>
    <version>1.9.2</version>
</dependency>
<dependency>
    <groupId>org.apache.jclouds.api</groupId>
    <artifactId>openstack-swift</artifactId>
    <version>1.9.2</version>
</dependency>

如何在不下载包含的 blob 列表的情况下列出所有容器及其所有元数据?

swiftopenstack-swift有什么区别?

4

1 回答 1

1

主要区别在于swift支持 v1 身份验证,而openstack-swift支持 v2 身份验证。不幸的是,swift也被弃用并且不再维护。

您收到该错误的原因SwiftApi是特定于openstack-swift API 实现。尽管 jclouds 做出了巨大的努力来抽象出所有的实现细节,但它并不完美。swift API 实现返回SwiftClient,它扩展(定义了所有有趣的CommonSwiftClient方法)。

此外,正如您可能已经猜到的那样,SwiftClient它位于不同的包装中。所以一定要包括package org.jclouds.openstack.swift;(没有“.v1”)

listContainers(ListContainerOptions... options)您可以通过调用您的SwiftClient实例列出所有容器及其元数据。这将返回Set<ContainerMetadata>

于 2016-04-09T03:17:34.753 回答