列出来自非Keystone Swift的容器元数据

时间:2016-04-08 11:38:03

标签: openstack-swift jclouds ceph radosgw

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

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

如果PROVIDER openstack-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"}]

如果PROVIDER swift ,我的代码会抛出

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列表?

swift openstack-swift 之间有什么区别?

1 个答案:

答案 0 :(得分:1)

主要区别在于 swift 支持v1 auth,而 openstack-swift 支持v2 auth。不幸的是, swift 也已弃用,不再维护。

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

此外,正如您可能已经猜到的那样,SwiftClient位于不同的包中。因此,请务必加入package org.jclouds.openstack.swift;(否#34; .v1&#34;)

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