mirror of https://github.com/apache/jclouds.git
Issue 396: added peer1-storage provider
This commit is contained in:
parent
63e4441a17
commit
0c690f686f
18
README.txt
18
README.txt
|
@ -19,22 +19,26 @@
|
||||||
|
|
||||||
Overview:
|
Overview:
|
||||||
|
|
||||||
jclouds is an open source framework that helps you get started in the cloud
|
jclouds is an open source library that helps you get started in the cloud
|
||||||
and reuse your java and clojure development skills. Our api allows you to
|
and reuse your java and clojure development skills. Our api allows you to
|
||||||
freedom to use portable abstractions or cloud-specific features.
|
freedom to use portable abstractions or cloud-specific features. We have
|
||||||
|
two abstractions at the moment: compute and blobstore. compute helps you
|
||||||
|
bootstrap machines in the cloud. blobstore helps you manage key-value
|
||||||
|
data.
|
||||||
|
|
||||||
our current version is 1.0-beta-7
|
our current version is 1.0-beta-7
|
||||||
our dev version is 1.0-SNAPSHOT
|
our dev version is 1.0-SNAPSHOT
|
||||||
|
|
||||||
our compute api supports: ec2, gogrid, rackspace, rimuhosting, vcloud, trmk-ecloud,
|
our compute api supports: ec2, gogrid, cloudservers (rackspace), rimuhosting, vcloud,
|
||||||
trmk-vcloudexpress, eucalyptus, bluelock-vclouddirector,
|
trmk-ecloud, trmk-vcloudexpress, eucalyptus,
|
||||||
bluelock-vcloudexpress, slicehost, stub (in-memory)
|
bluelock-vclouddirector, slicehost, stub (in-memory)
|
||||||
|
|
||||||
* note * the pom dependency org.jclouds/jclouds-allcompute gives you access to
|
* note * the pom dependency org.jclouds/jclouds-allcompute gives you access to
|
||||||
to all of these providers
|
to all of these providers
|
||||||
|
|
||||||
our blobstore api supports: s3, rackspace, azure, atmos online, att synaptic,
|
our blobstore api supports: s3, cloudfiles (rackspace), azurestorage, atmosonline,
|
||||||
walrus, googlestorage, transient (in-memory), filesystem (on-disk)
|
synaptic, peer1-storage, walrus, googlestorage,
|
||||||
|
transient (in-memory), filesystem (on-disk)
|
||||||
|
|
||||||
* note * the pom dependency org.jclouds/jclouds-allblobstore gives you access to
|
* note * the pom dependency org.jclouds/jclouds-allblobstore gives you access to
|
||||||
to all of these providers
|
to all of these providers
|
||||||
|
|
|
@ -36,6 +36,10 @@
|
||||||
<test.atmosonline.apiversion>1.3.0</test.atmosonline.apiversion>
|
<test.atmosonline.apiversion>1.3.0</test.atmosonline.apiversion>
|
||||||
<test.atmosonline.identity>FIXME</test.atmosonline.identity>
|
<test.atmosonline.identity>FIXME</test.atmosonline.identity>
|
||||||
<test.atmosonline.credential>FIXME</test.atmosonline.credential>
|
<test.atmosonline.credential>FIXME</test.atmosonline.credential>
|
||||||
|
<test.peer1-storage.endpoint>https://cloudonestorage.peer1.com</test.peer1-storage.endpoint>
|
||||||
|
<test.peer1-storage.apiversion>1.3.0</test.peer1-storage.apiversion>
|
||||||
|
<test.peer1-storage.identity>FIXME</test.peer1-storage.identity>
|
||||||
|
<test.peer1-storage.credential>FIXME</test.peer1-storage.credential>
|
||||||
<test.synaptic.endpoint>https://storage.synaptic.att.com</test.synaptic.endpoint>
|
<test.synaptic.endpoint>https://storage.synaptic.att.com</test.synaptic.endpoint>
|
||||||
<test.synaptic.apiversion>1.3.0</test.synaptic.apiversion>
|
<test.synaptic.apiversion>1.3.0</test.synaptic.apiversion>
|
||||||
<test.synaptic.identity>FIXME</test.synaptic.identity>
|
<test.synaptic.identity>FIXME</test.synaptic.identity>
|
||||||
|
@ -107,6 +111,22 @@
|
||||||
<name>test.atmosonline.credential</name>
|
<name>test.atmosonline.credential</name>
|
||||||
<value>${test.atmosonline.credential}</value>
|
<value>${test.atmosonline.credential}</value>
|
||||||
</property>
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>test.peer1-storage.endpoint</name>
|
||||||
|
<value>${test.peer1-storage.endpoint}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>test.peer1-storage.apiversion</name>
|
||||||
|
<value>${test.peer1-storage.apiversion}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>test.peer1-storage.identity</name>
|
||||||
|
<value>${test.peer1-storage.identity}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>test.peer1-storage.credential</name>
|
||||||
|
<value>${test.peer1-storage.credential}</value>
|
||||||
|
</property>
|
||||||
<property>
|
<property>
|
||||||
<name>test.synaptic.endpoint</name>
|
<name>test.synaptic.endpoint</name>
|
||||||
<value>${test.synaptic.endpoint}</value>
|
<value>${test.synaptic.endpoint}</value>
|
||||||
|
|
|
@ -29,6 +29,7 @@ import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.PUT;
|
import javax.ws.rs.PUT;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
import org.jclouds.atmosonline.saas.binders.BindMetadataToHeaders;
|
import org.jclouds.atmosonline.saas.binders.BindMetadataToHeaders;
|
||||||
|
@ -103,6 +104,7 @@ public interface AtmosStorageAsyncClient {
|
||||||
@POST
|
@POST
|
||||||
@Path("/{directoryName}/")
|
@Path("/{directoryName}/")
|
||||||
@ExceptionParser(ReturnEndpointIfAlreadyExists.class)
|
@ExceptionParser(ReturnEndpointIfAlreadyExists.class)
|
||||||
|
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||||
@Consumes(MediaType.WILDCARD)
|
@Consumes(MediaType.WILDCARD)
|
||||||
ListenableFuture<URI> createDirectory(@PathParam("directoryName") String directoryName);
|
ListenableFuture<URI> createDirectory(@PathParam("directoryName") String directoryName);
|
||||||
|
|
||||||
|
|
|
@ -148,7 +148,7 @@ public class SignRequest implements HttpRequestFilter {
|
||||||
// TreeSet == Sort the headers alphabetically.
|
// TreeSet == Sort the headers alphabetically.
|
||||||
Set<String> headers = new TreeSet<String>(request.getHeaders().keySet());
|
Set<String> headers = new TreeSet<String>(request.getHeaders().keySet());
|
||||||
for (String header : headers) {
|
for (String header : headers) {
|
||||||
if (header.startsWith("x-emc-")) {
|
if (header.startsWith("x-emc-") && !header.equals(AtmosStorageHeaders.SIGNATURE)) {
|
||||||
// Convert all header names to lowercase.
|
// Convert all header names to lowercase.
|
||||||
toSign.append(header.toLowerCase()).append(":");
|
toSign.append(header.toLowerCase()).append(":");
|
||||||
// For headers with values that span multiple lines, convert them into one line by
|
// For headers with values that span multiple lines, convert them into one line by
|
||||||
|
|
|
@ -140,7 +140,7 @@ public class AtmosStorageAsyncClientTest extends RestClientTest<AtmosStorageAsyn
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST https://accesspoint.atmosonline.com/rest/namespace/dir/ HTTP/1.1");
|
assertRequestLineEquals(request, "POST https://accesspoint.atmosonline.com/rest/namespace/dir/ HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, HttpHeaders.ACCEPT + ": */*\n");
|
assertNonPayloadHeadersEqual(request, HttpHeaders.ACCEPT + ": */*\n");
|
||||||
assertPayloadEquals(request, null, null, false);
|
assertPayloadEquals(request, "", "application/octet-stream", false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, ParseURIFromListOrLocationHeaderIf20x.class);
|
assertResponseParserClassEquals(method, request, ParseURIFromListOrLocationHeaderIf20x.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
"A clojure binding for the jclouds BlobStore.
|
"A clojure binding for the jclouds BlobStore.
|
||||||
|
|
||||||
Current supported services are:
|
Current supported services are:
|
||||||
[transient, filesystem, s3, azureblob, atmos, cloudfiles, walrus, googlestorage]
|
[transient, filesystem, s3, azureblob, atmos, cloudfiles, walrus,
|
||||||
|
googlestorage, synaptic, peer1-storage]
|
||||||
|
|
||||||
Here's a quick example of how to viewresources in rackspace
|
Here's a quick example of how to viewresources in rackspace
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ import static com.google.common.collect.Sets.difference;
|
||||||
import static com.google.common.collect.Sets.newHashSet;
|
import static com.google.common.collect.Sets.newHashSet;
|
||||||
import static com.google.common.collect.Sets.newTreeSet;
|
import static com.google.common.collect.Sets.newTreeSet;
|
||||||
import static java.util.Arrays.asList;
|
import static java.util.Arrays.asList;
|
||||||
import static javax.ws.rs.core.HttpHeaders.ACCEPT;
|
import static javax.ws.rs.core.HttpHeaders.*;
|
||||||
import static javax.ws.rs.core.HttpHeaders.CONTENT_TYPE;
|
import static javax.ws.rs.core.HttpHeaders.CONTENT_TYPE;
|
||||||
import static javax.ws.rs.core.HttpHeaders.HOST;
|
import static javax.ws.rs.core.HttpHeaders.HOST;
|
||||||
import static org.jclouds.http.HttpUtils.makeQueryLine;
|
import static org.jclouds.http.HttpUtils.makeQueryLine;
|
||||||
|
@ -128,6 +128,7 @@ import org.jclouds.rest.functions.MapHttp4xxCodesToExceptions;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.LinkedHashMultimap;
|
import com.google.common.collect.LinkedHashMultimap;
|
||||||
import com.google.common.collect.LinkedListMultimap;
|
import com.google.common.collect.LinkedListMultimap;
|
||||||
import com.google.common.collect.MapMaker;
|
import com.google.common.collect.MapMaker;
|
||||||
|
@ -470,6 +471,9 @@ public class RestAnnotationProcessor<T> {
|
||||||
payload = new MultipartForm(BOUNDARY, parts);
|
payload = new MultipartForm(BOUNDARY, parts);
|
||||||
} else if (formParams.size() > 0) {
|
} else if (formParams.size() > 0) {
|
||||||
payload = Payloads.newUrlEncodedFormPayload(formParams, skips);
|
payload = Payloads.newUrlEncodedFormPayload(formParams, skips);
|
||||||
|
} else if (headers.containsKey(CONTENT_TYPE)) {
|
||||||
|
payload = Payloads.newByteArrayPayload(new byte[]{});
|
||||||
|
payload.getContentMetadata().setContentType(Iterables.get(headers.get(CONTENT_TYPE),0));
|
||||||
}
|
}
|
||||||
if (payload != null) {
|
if (payload != null) {
|
||||||
request.setPayload(payload);
|
request.setPayload(payload);
|
||||||
|
|
|
@ -104,7 +104,11 @@ synaptic.contextbuilder=org.jclouds.atmosonline.saas.AtmosStorageContextBuilder
|
||||||
synaptic.endpoint=https://storage.synaptic.att.com
|
synaptic.endpoint=https://storage.synaptic.att.com
|
||||||
synaptic.apiversion=1.3.0
|
synaptic.apiversion=1.3.0
|
||||||
|
|
||||||
# TODO peer1 and hostedsolutions use atmos
|
peer1-storage.contextbuilder=org.jclouds.atmosonline.saas.AtmosStorageContextBuilder
|
||||||
|
peer1-storage.endpoint=https://storage.synaptic.att.com
|
||||||
|
peer1-storage.apiversion=1.3.0
|
||||||
|
|
||||||
|
# TODO hostedsolutions use atmos
|
||||||
|
|
||||||
cloudfiles.contextbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesContextBuilder
|
cloudfiles.contextbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesContextBuilder
|
||||||
cloudfiles.propertiesbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesPropertiesBuilder
|
cloudfiles.propertiesbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesPropertiesBuilder
|
||||||
|
|
|
@ -373,10 +373,22 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
||||||
@POST
|
@POST
|
||||||
@Path("")
|
@Path("")
|
||||||
public void post(HttpRequestOptions options);
|
public void post(HttpRequestOptions options);
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("")
|
||||||
|
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||||
|
public void post();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testHttpRequestOptionsPayloadParam() throws SecurityException, NoSuchMethodException, IOException {
|
public void testHttpRequestOptionsPayloadParam() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = TestPayloadParamVarargs.class.getMethod("post");
|
||||||
|
HttpRequest request = factory(TestQuery.class).createRequest(method);
|
||||||
|
assertRequestLineEquals(request, "POST http://localhost:9999?x-ms-version=2009-07-17 HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(request, "");
|
||||||
|
assertPayloadEquals(request, "", "application/octet-stream", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testHttpRequestWithOnlyContentType() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Method method = TestPayloadParamVarargs.class.getMethod("post", HttpRequestOptions.class);
|
Method method = TestPayloadParamVarargs.class.getMethod("post", HttpRequestOptions.class);
|
||||||
verifyTestPostOptions(method);
|
verifyTestPostOptions(method);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue