我试图使用JClouds与仅暴露S3 API的OpenStack / swift存储云安装进行通信(它不支持swift / rackspace API)。
我试过了:
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。
答案 0 :(得分:0)
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);
答案 1 :(得分:0)
以下内容适合您。例如,已知它可以在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();
如果你的克隆不接受root url的s3请求,你需要相应地设置另一个参数。
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")