Список метаданных контейнера от не Keystone Swift

Этот код делает запрос GET к RadosGW (я не использую 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 это быстро мой код бросает

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>

Как я могу перечислить все контейнеры со всеми их метаданными, не загружая список больших двоичных объектов, которые он содержит?

В чем разница между swift и openstack-swift?

1 ответ

Решение

Основное отличие заключается в том, что swift поддерживает аутентификацию v1, а openstack-swift поддерживает аутентификацию v2. К сожалению, swift также устарел и больше не поддерживается.

Причина, по которой вы получаете эту ошибку, заключается в том, что SwiftApi специфичен для реализации API openstack-swift. Несмотря на героические усилия, которые jclouds делает для абстрагирования от всех деталей реализации, он не идеален. Реализация быстрой API возвращает SwiftClient, который расширяет CommonSwiftClient (где определены все интересные методы).

Кроме того, как вы уже догадались, SwiftClient находится в другой упаковке. Так что обязательно включите package org.jclouds.openstack.swift; (нет ".v1")

Вы можете перечислить все контейнеры с их метаданными, вызвав listContainers(ListContainerOptions... options) на ваше SwiftClient пример. Это вернется Set<ContainerMetadata>,

Другие вопросы по тегам