Используйте JClouds для общения с облаком не AWS с S3 API - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь использовать JClouds для связи с установкой облака хранения OpenStack / swift, которая предоставляет только API S3 (он не поддерживает API swift / rackspace).

Я пытался:

Properties overrides = new Properties();
overrides.setProperty(Constants.PROPERTY_ENDPOINT, CLOUD_SERVIE_ENDPOINT);

// get a context with nova that offers the portable ComputeService api
BlobStoreContext context = new BlobStoreContextFactory().createContext("aws-s3", ident,
    password, ImmutableSet.<Module> of(), overrides);

Сервер отвечает с ошибкой аутентификации 403. Использование стандартного AWS SDK или Python Boto работает нормально, так что это не проблема сервера, но, скорее всего, неправильное использование jclouds.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2012

Следующее должно работать для вас. Известно, что он работает на vBlob, например.

import static org.jclouds.s3.reference.S3Constants.PROPERTY_S3_VIRTUAL_HOST_BUCKETS;
...

     Properties overrides = new Properties();
     overrides.setProperty(PROPERTY_S3_VIRTUAL_HOST_BUCKETS, "false");

     BlobStore blobstore = ContextBuilder.newBuilder(new S3ApiMetadata()) // or "s3"
                                         .endpoint("http://host:port")
                                         .credentials(accessKey, secretKey)
                                         .overrides(overrides)
                                         .buildView(BlobStoreContext.class).getBlobStore();

Если ваш клон не принимает s3-запросы в корневом URL-адресе, вам необходимо установить другой параметр соответствующим образом.

import static org.jclouds.s3.reference.S3Constants.PROPERTY_S3_SERVICE_PATH;
...

     overrides.setProperty(PROPERTY_S3_SERVICE_PATH, "/services/Walrus");
...
                                         .endpoint("http://host:port/services/Walrus")
0 голосов
/ 23 февраля 2012

jclouds фактически поддерживает swift , поэтому вам не нужно делать ничего особенного.Я бы порекомендовал использовать jclouds 1.3.1 и настроить зависимость org.jclouds.api/swift

Затем вам просто нужно ввести конечную точку, личность, учетные данные

Properties overrides = new Properties();
overrides.setProperty("swift.endpoint", "http://1.1.1.1:8080/auth");

BlobStoreContext context = new BlobStoreContextFactory().createContext("swift", "XXXXXX:YYYYY", "password", ImmutableSet.<Module> of(), overrides);
...