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:
|
||||
|
||||
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
|
||||
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 dev version is 1.0-SNAPSHOT
|
||||
|
||||
our compute api supports: ec2, gogrid, rackspace, rimuhosting, vcloud, trmk-ecloud,
|
||||
trmk-vcloudexpress, eucalyptus, bluelock-vclouddirector,
|
||||
bluelock-vcloudexpress, slicehost, stub (in-memory)
|
||||
our compute api supports: ec2, gogrid, cloudservers (rackspace), rimuhosting, vcloud,
|
||||
trmk-ecloud, trmk-vcloudexpress, eucalyptus,
|
||||
bluelock-vclouddirector, slicehost, stub (in-memory)
|
||||
|
||||
* note * the pom dependency org.jclouds/jclouds-allcompute gives you access to
|
||||
to all of these providers
|
||||
|
||||
our blobstore api supports: s3, rackspace, azure, atmos online, att synaptic,
|
||||
walrus, googlestorage, transient (in-memory), filesystem (on-disk)
|
||||
our blobstore api supports: s3, cloudfiles (rackspace), azurestorage, atmosonline,
|
||||
synaptic, peer1-storage, walrus, googlestorage,
|
||||
transient (in-memory), filesystem (on-disk)
|
||||
|
||||
* note * the pom dependency org.jclouds/jclouds-allblobstore gives you access to
|
||||
to all of these providers
|
||||
|
|
|
@ -36,6 +36,10 @@
|
|||
<test.atmosonline.apiversion>1.3.0</test.atmosonline.apiversion>
|
||||
<test.atmosonline.identity>FIXME</test.atmosonline.identity>
|
||||
<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.apiversion>1.3.0</test.synaptic.apiversion>
|
||||
<test.synaptic.identity>FIXME</test.synaptic.identity>
|
||||
|
@ -107,6 +111,22 @@
|
|||
<name>test.atmosonline.credential</name>
|
||||
<value>${test.atmosonline.credential}</value>
|
||||
</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>
|
||||
<name>test.synaptic.endpoint</name>
|
||||
<value>${test.synaptic.endpoint}</value>
|
||||
|
|
|
@ -29,6 +29,7 @@ import javax.ws.rs.POST;
|
|||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
|
||||
import org.jclouds.atmosonline.saas.binders.BindMetadataToHeaders;
|
||||
|
@ -103,6 +104,7 @@ public interface AtmosStorageAsyncClient {
|
|||
@POST
|
||||
@Path("/{directoryName}/")
|
||||
@ExceptionParser(ReturnEndpointIfAlreadyExists.class)
|
||||
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
@Consumes(MediaType.WILDCARD)
|
||||
ListenableFuture<URI> createDirectory(@PathParam("directoryName") String directoryName);
|
||||
|
||||
|
|
|
@ -148,7 +148,7 @@ public class SignRequest implements HttpRequestFilter {
|
|||
// TreeSet == Sort the headers alphabetically.
|
||||
Set<String> headers = new TreeSet<String>(request.getHeaders().keySet());
|
||||
for (String header : headers) {
|
||||
if (header.startsWith("x-emc-")) {
|
||||
if (header.startsWith("x-emc-") && !header.equals(AtmosStorageHeaders.SIGNATURE)) {
|
||||
// Convert all header names to lowercase.
|
||||
toSign.append(header.toLowerCase()).append(":");
|
||||
// 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");
|
||||
assertNonPayloadHeadersEqual(request, HttpHeaders.ACCEPT + ": */*\n");
|
||||
assertPayloadEquals(request, null, null, false);
|
||||
assertPayloadEquals(request, "", "application/octet-stream", false);
|
||||
|
||||
assertResponseParserClassEquals(method, request, ParseURIFromListOrLocationHeaderIf20x.class);
|
||||
assertSaxResponseParserClassEquals(method, null);
|
||||
|
|
|
@ -21,7 +21,8 @@
|
|||
"A clojure binding for the jclouds BlobStore.
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -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.newTreeSet;
|
||||
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.HOST;
|
||||
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.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.LinkedHashMultimap;
|
||||
import com.google.common.collect.LinkedListMultimap;
|
||||
import com.google.common.collect.MapMaker;
|
||||
|
@ -470,6 +471,9 @@ public class RestAnnotationProcessor<T> {
|
|||
payload = new MultipartForm(BOUNDARY, parts);
|
||||
} else if (formParams.size() > 0) {
|
||||
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) {
|
||||
request.setPayload(payload);
|
||||
|
|
|
@ -104,7 +104,11 @@ synaptic.contextbuilder=org.jclouds.atmosonline.saas.AtmosStorageContextBuilder
|
|||
synaptic.endpoint=https://storage.synaptic.att.com
|
||||
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.propertiesbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesPropertiesBuilder
|
||||
|
|
|
@ -374,9 +374,21 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
|||
@Path("")
|
||||
public void post(HttpRequestOptions options);
|
||||
|
||||
@POST
|
||||
@Path("")
|
||||
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
public void post();
|
||||
}
|
||||
|
||||
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);
|
||||
verifyTestPostOptions(method);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue