Список метаданных контейнера от не 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>
,