JCLOUDS-296 unasync legacy cloudservers provider.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/e3ada5b7 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/e3ada5b7 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/e3ada5b7 Branch: refs/heads/use-agentproxy-008 Commit: e3ada5b7268c87deddc7b4dfb619f05ebf1a872e Parents: 0ab1988 Author: Adrian Cole <[email protected]> Authored: Fri Oct 3 19:13:22 2014 -0700 Committer: Adrian Cole <[email protected]> Committed: Fri Oct 3 23:14:21 2014 -0700 ---------------------------------------------------------------------- .../cloudservers/CloudServersApiMetadata.java | 28 +- .../cloudservers/CloudServersAsyncClient.java | 387 -------- .../cloudservers/CloudServersClient.java | 240 ++++- ...CloudServersComputeServiceContextModule.java | 4 - .../config/CloudServersHttpApiModule.java | 87 ++ .../config/CloudServersRestClientModule.java | 88 -- .../CloudServersAsyncClientTest.java | 902 ------------------- .../cloudservers/CloudServersClientTest.java | 898 ++++++++++++++++++ ...aseCloudServersComputeServiceExpectTest.java | 10 +- .../BaseCloudServersRestClientExpectTest.java | 10 +- 10 files changed, 1209 insertions(+), 1445 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/e3ada5b7/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersApiMetadata.java ---------------------------------------------------------------------- diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersApiMetadata.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersApiMetadata.java index 8c6fbd8..04ed2e7 100644 --- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersApiMetadata.java +++ b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersApiMetadata.java @@ -22,27 +22,14 @@ import java.net.URI; import java.util.Properties; import org.jclouds.cloudservers.compute.config.CloudServersComputeServiceContextModule; -import org.jclouds.cloudservers.config.CloudServersRestClientModule; +import org.jclouds.cloudservers.config.CloudServersHttpApiModule; import org.jclouds.compute.ComputeServiceContext; -import org.jclouds.rest.internal.BaseRestApiMetadata; +import org.jclouds.rest.internal.BaseHttpApiMetadata; import com.google.common.collect.ImmutableSet; -import com.google.common.reflect.TypeToken; import com.google.inject.Module; -/** - * Implementation of {@link ApiMetadata} for CloudServers 1.0 API - */ -public class CloudServersApiMetadata extends BaseRestApiMetadata { - - /** - * @deprecated please use {@code org.jclouds.ContextBuilder#buildApi(CloudServersClient.class)} as - * {@link CloudServersAsyncClient} interface will be removed in jclouds 1.7. - */ - @Deprecated - public static final TypeToken<org.jclouds.rest.RestContext<CloudServersClient, CloudServersAsyncClient>> CONTEXT_TOKEN = new TypeToken<org.jclouds.rest.RestContext<CloudServersClient, CloudServersAsyncClient>>() { - private static final long serialVersionUID = 1L; - }; +public class CloudServersApiMetadata extends BaseHttpApiMetadata { @Override public Builder toBuilder() { @@ -58,15 +45,14 @@ public class CloudServersApiMetadata extends BaseRestApiMetadata { } public static Properties defaultProperties() { - Properties properties = BaseRestApiMetadata.defaultProperties(); + Properties properties = BaseHttpApiMetadata.defaultProperties(); return properties; } - public static class Builder extends BaseRestApiMetadata.Builder<Builder> { + public static class Builder extends BaseHttpApiMetadata.Builder<CloudServersClient, Builder> { - @SuppressWarnings("deprecation") protected Builder() { - super(CloudServersClient.class, CloudServersAsyncClient.class); + super(CloudServersClient.class); id("cloudservers") .name("Rackspace Cloud Servers API") .identityName("Username") @@ -76,7 +62,7 @@ public class CloudServersApiMetadata extends BaseRestApiMetadata { .defaultEndpoint("https://auth.api.rackspacecloud.com") .defaultProperties(CloudServersApiMetadata.defaultProperties()) .view(typeToken(ComputeServiceContext.class)) - .defaultModules(ImmutableSet.<Class<? extends Module>>of(CloudServersRestClientModule.class, CloudServersComputeServiceContextModule.class)); + .defaultModules(ImmutableSet.<Class<? extends Module>>of(CloudServersHttpApiModule.class, CloudServersComputeServiceContextModule.class)); } @Override http://git-wip-us.apache.org/repos/asf/jclouds/blob/e3ada5b7/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersAsyncClient.java ---------------------------------------------------------------------- diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersAsyncClient.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersAsyncClient.java deleted file mode 100644 index 75aebdb..0000000 --- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersAsyncClient.java +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.cloudservers; - -import java.io.Closeable; -import java.util.Set; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -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.Fallbacks.EmptySetOnNotFoundOr404; -import org.jclouds.Fallbacks.FalseOnNotFoundOr404; -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.Fallbacks.VoidOnNotFoundOr404; -import org.jclouds.cloudservers.binders.BindBackupScheduleToJsonPayload; -import org.jclouds.cloudservers.domain.Addresses; -import org.jclouds.cloudservers.domain.BackupSchedule; -import org.jclouds.cloudservers.domain.Flavor; -import org.jclouds.cloudservers.domain.Image; -import org.jclouds.cloudservers.domain.Limits; -import org.jclouds.cloudservers.domain.RebootType; -import org.jclouds.cloudservers.domain.Server; -import org.jclouds.cloudservers.domain.SharedIpGroup; -import org.jclouds.cloudservers.options.CreateServerOptions; -import org.jclouds.cloudservers.options.CreateSharedIpGroupOptions; -import org.jclouds.cloudservers.options.ListOptions; -import org.jclouds.cloudservers.options.RebuildServerOptions; -import org.jclouds.openstack.filters.AddTimestampQuery; -import org.jclouds.openstack.filters.AuthenticateRequest; -import org.jclouds.openstack.services.Compute; -import org.jclouds.rest.annotations.BinderParam; -import org.jclouds.rest.annotations.Endpoint; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.MapBinder; -import org.jclouds.rest.annotations.Payload; -import org.jclouds.rest.annotations.PayloadParam; -import org.jclouds.rest.annotations.QueryParams; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.rest.annotations.Unwrap; - -import com.google.common.util.concurrent.ListenableFuture; - -/** - * Provides asynchronous access to Cloud Servers via their REST API. - * <p/> - * All commands return a ListenableFuture of the result from Cloud Servers. Any exceptions incurred - * during processing will be backend in an {@link ExecutionException} as documented in - * {@link ListenableFuture#get()}. - * - * @see CloudServersClient - * - * @deprecated The Rackspace First-Gen Cloud Servers product has been deprecated. Please refer to the - * <a href="http://jclouds.apache.org/guides/rackspace">Rackspace Getting Started Guide</a> - * for accessing the Rackspace Cloud. This API will be removed in 2.0. - */ -@Deprecated -@RequestFilters({ AuthenticateRequest.class, AddTimestampQuery.class }) -@Endpoint(Compute.class) -public interface CloudServersAsyncClient extends Closeable { - - /** - * @see CloudServersClient#getLimits - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/limits") - @Fallback(EmptySetOnNotFoundOr404.class) - ListenableFuture<Limits> getLimits(); - - /** - * @see CloudServersClient#listServers - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/servers") - @Fallback(EmptySetOnNotFoundOr404.class) - ListenableFuture<? extends Set<Server>> listServers(ListOptions... options); - - /** - * @see CloudServersClient#getServer - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Fallback(NullOnNotFoundOr404.class) - @Path("/servers/{id}") - ListenableFuture<Server> getServer(@PathParam("id") int id); - - /** - * @see CloudServersClient#deleteServer - */ - @DELETE - @Fallback(FalseOnNotFoundOr404.class) - @Path("/servers/{id}") - ListenableFuture<Boolean> deleteServer(@PathParam("id") int id); - - /** - * @see CloudServersClient#rebootServer - */ - @POST - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/action") - @Produces(MediaType.APPLICATION_JSON) - @Payload("%7B\"reboot\":%7B\"type\":\"{type}\"%7D%7D") - ListenableFuture<Void> rebootServer(@PathParam("id") int id, @PayloadParam("type") RebootType rebootType); - - /** - * @see CloudServersClient#resizeServer - */ - @POST - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/action") - @Produces(MediaType.APPLICATION_JSON) - @Payload("%7B\"resize\":%7B\"flavorId\":{flavorId}%7D%7D") - ListenableFuture<Void> resizeServer(@PathParam("id") int id, @PayloadParam("flavorId") int flavorId); - - /** - * @see CloudServersClient#confirmResizeServer - */ - @POST - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/action") - @Produces(MediaType.APPLICATION_JSON) - @Payload("{\"confirmResize\":null}") - ListenableFuture<Void> confirmResizeServer(@PathParam("id") int id); - - /** - * @see CloudServersClient#revertResizeServer - */ - @POST - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/action") - @Produces(MediaType.APPLICATION_JSON) - @Payload("{\"revertResize\":null}") - ListenableFuture<Void> revertResizeServer(@PathParam("id") int id); - - /** - * @see CloudServersClient#createServer - */ - @POST - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/servers") - @MapBinder(CreateServerOptions.class) - ListenableFuture<Server> createServer(@PayloadParam("name") String name, @PayloadParam("imageId") int imageId, - @PayloadParam("flavorId") int flavorId, CreateServerOptions... options); - - /** - * @see CloudServersClient#rebuildServer - */ - @POST - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/action") - @MapBinder(RebuildServerOptions.class) - ListenableFuture<Void> rebuildServer(@PathParam("id") int id, RebuildServerOptions... options); - - /** - * @see CloudServersClient#shareIp - */ - @PUT - @Path("/servers/{id}/ips/public/{address}") - @Produces(MediaType.APPLICATION_JSON) - @Payload("%7B\"shareIp\":%7B\"sharedIpGroupId\":{sharedIpGroupId},\"configureServer\":{configureServer}%7D%7D") - ListenableFuture<Void> shareIp(@PathParam("address") String addressToShare, - @PathParam("id") int serverToTosignBindressTo, @PayloadParam("sharedIpGroupId") int sharedIpGroup, - @PayloadParam("configureServer") boolean configureServer); - - /** - * @see CloudServersClient#unshareIp - */ - @DELETE - @Path("/servers/{id}/ips/public/{address}") - @Fallback(VoidOnNotFoundOr404.class) - ListenableFuture<Void> unshareIp(@PathParam("address") String addressToShare, - @PathParam("id") int serverToTosignBindressTo); - - /** - * @see CloudServersClient#changeAdminPass - */ - @PUT - @Path("/servers/{id}") - @Produces(MediaType.APPLICATION_JSON) - @Payload("%7B\"server\":%7B\"adminPass\":\"{adminPass}\"%7D%7D") - ListenableFuture<Void> changeAdminPass(@PathParam("id") int id, @PayloadParam("adminPass") String adminPass); - - /** - * @see CloudServersClient#renameServer - */ - @PUT - @Path("/servers/{id}") - @Produces(MediaType.APPLICATION_JSON) - @Payload("%7B\"server\":%7B\"name\":\"{name}\"%7D%7D") - ListenableFuture<Void> renameServer(@PathParam("id") int id, @PayloadParam("name") String newName); - - /** - * @see CloudServersClient#listFlavors - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/flavors") - @Fallback(EmptySetOnNotFoundOr404.class) - ListenableFuture<? extends Set<Flavor>> listFlavors(ListOptions... options); - - /** - * @see CloudServersClient#getFlavor - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/flavors/{id}") - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<Flavor> getFlavor(@PathParam("id") int id); - - /** - * @see CloudServersClient#listImages - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/images") - @Fallback(EmptySetOnNotFoundOr404.class) - ListenableFuture<? extends Set<Image>> listImages(ListOptions... options); - - /** - * @see CloudServersClient#getImage - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(NullOnNotFoundOr404.class) - @QueryParams(keys = "format", values = "json") - @Path("/images/{id}") - ListenableFuture<Image> getImage(@PathParam("id") int id); - - /** - * @see CloudServersClient#deleteImage - */ - @DELETE - @Fallback(FalseOnNotFoundOr404.class) - @Path("/images/{id}") - ListenableFuture<Boolean> deleteImage(@PathParam("id") int id); - - /** - * @see CloudServersClient#createImageFromServer - */ - @POST - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/images") - @Produces(MediaType.APPLICATION_JSON) - @Payload("%7B\"image\":%7B\"serverId\":{serverId},\"name\":\"{name}\"%7D%7D") - ListenableFuture<Image> createImageFromServer(@PayloadParam("name") String imageName, - @PayloadParam("serverId") int serverId); - - /** - * @see CloudServersClient#listSharedIpGroups - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/shared_ip_groups") - @Fallback(EmptySetOnNotFoundOr404.class) - ListenableFuture<? extends Set<SharedIpGroup>> listSharedIpGroups(ListOptions... options); - - /** - * @see CloudServersClient#getSharedIpGroup - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/shared_ip_groups/{id}") - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<SharedIpGroup> getSharedIpGroup(@PathParam("id") int id); - - /** - * @see CloudServersClient#createSharedIpGroup - */ - @POST - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/shared_ip_groups") - @MapBinder(CreateSharedIpGroupOptions.class) - ListenableFuture<SharedIpGroup> createSharedIpGroup(@PayloadParam("name") String name, - CreateSharedIpGroupOptions... options); - - /** - * @see CloudServersClient#deleteSharedIpGroup - */ - @DELETE - @Fallback(FalseOnNotFoundOr404.class) - @Path("/shared_ip_groups/{id}") - ListenableFuture<Boolean> deleteSharedIpGroup(@PathParam("id") int id); - - /** - * @see CloudServersClient#listBackupSchedule - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/backup_schedule") - ListenableFuture<BackupSchedule> getBackupSchedule(@PathParam("id") int serverId); - - /** - * @see CloudServersClient#deleteBackupSchedule - */ - @DELETE - @Fallback(FalseOnNotFoundOr404.class) - @Path("/servers/{id}/backup_schedule") - ListenableFuture<Boolean> deleteBackupSchedule(@PathParam("id") int serverId); - - /** - * @see CloudServersClient#replaceBackupSchedule - */ - @POST - @Path("/servers/{id}/backup_schedule") - ListenableFuture<Void> replaceBackupSchedule(@PathParam("id") int id, - @BinderParam(BindBackupScheduleToJsonPayload.class) BackupSchedule backupSchedule); - - /** - * @see CloudServersClient#listAddresses - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/ips") - ListenableFuture<Addresses> getAddresses(@PathParam("id") int serverId); - - /** - * @see CloudServersClient#listPublicAddresses - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/ips/public") - @Fallback(EmptySetOnNotFoundOr404.class) - ListenableFuture<? extends Set<String>> listPublicAddresses(@PathParam("id") int serverId); - - /** - * @see CloudServersClient#listPrivateAddresses - */ - @GET - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = "format", values = "json") - @Path("/servers/{id}/ips/private") - @Fallback(EmptySetOnNotFoundOr404.class) - ListenableFuture<? extends Set<String>> listPrivateAddresses(@PathParam("id") int serverId); - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/e3ada5b7/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersClient.java ---------------------------------------------------------------------- diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersClient.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersClient.java index 4fe9761..ff9b21e 100644 --- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersClient.java +++ b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/CloudServersClient.java @@ -16,10 +16,24 @@ */ package org.jclouds.cloudservers; +import static javax.ws.rs.core.MediaType.APPLICATION_JSON; +import static org.jclouds.Fallbacks.*; + import java.io.Closeable; import java.util.Set; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +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.Fallbacks; +import org.jclouds.cloudservers.binders.BindBackupScheduleToJsonPayload; import org.jclouds.cloudservers.domain.Addresses; import org.jclouds.cloudservers.domain.BackupSchedule; import org.jclouds.cloudservers.domain.Flavor; @@ -32,20 +46,31 @@ import org.jclouds.cloudservers.options.CreateServerOptions; import org.jclouds.cloudservers.options.CreateSharedIpGroupOptions; import org.jclouds.cloudservers.options.ListOptions; import org.jclouds.cloudservers.options.RebuildServerOptions; +import org.jclouds.openstack.filters.AddTimestampQuery; +import org.jclouds.openstack.filters.AuthenticateRequest; +import org.jclouds.openstack.services.Compute; +import org.jclouds.rest.annotations.BinderParam; +import org.jclouds.rest.annotations.Endpoint; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.Payload; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.QueryParams; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.Unwrap; + +import com.google.common.util.concurrent.ListenableFuture; /** * Provides access to Cloud Servers via their REST API. - * <p/> - * All commands return a Future of the result from Cloud Servers. Any exceptions incurred during - * processing will be backend in an {@link ExecutionException} as documented in {@link Future#get()}. - * - * @see CloudServersAsyncClient * * @deprecated The Rackspace First-Gen Cloud Servers product has been deprecated. Please refer to the * <a href="http://jclouds.apache.org/guides/rackspace">Rackspace Getting Started Guide</a> * for accessing the Rackspace Cloud. This API will be removed in 2.0. */ @Deprecated +@RequestFilters({ AuthenticateRequest.class, AddTimestampQuery.class }) +@Endpoint(Compute.class) public interface CloudServersClient extends Closeable { /** * All accounts, by default, have a preconfigured set of thresholds (or limits) to manage @@ -55,6 +80,12 @@ public interface CloudServersClient extends Closeable { * * @return limits on the account */ + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/limits") + @Fallback(NullOnNotFoundOr404.class) Limits getLimits(); /** @@ -67,6 +98,12 @@ public interface CloudServersClient extends Closeable { * in order to retrieve all details, pass the option {@link ListOptions#withDetails() * withDetails()} */ + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/servers") + @Fallback(EmptySetOnNotFoundOr404.class) Set<Server> listServers(ListOptions... options); /** @@ -76,6 +113,12 @@ public interface CloudServersClient extends Closeable { * @return null, if the server is not found * @see Server */ + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Fallback(NullOnNotFoundOr404.class) + @Path("/servers/{id}") Server getServer(@PathParam("id") int id); /** @@ -87,6 +130,9 @@ public interface CloudServersClient extends Closeable { * @return false if the server is not found * @see Server */ + @DELETE + @Fallback(FalseOnNotFoundOr404.class) + @Path("/servers/{id}") boolean deleteServer(@PathParam("id") int id); /** @@ -103,7 +149,12 @@ public interface CloudServersClient extends Closeable { * graceful shutdown of all processes. A hard reboot is the equivalent of power cycling * the server. */ - void rebootServer(int id, RebootType rebootType); + @POST + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/action") + @Produces(APPLICATION_JSON) + @Payload("%7B\"reboot\":%7B\"type\":\"{type}\"%7D%7D") + void rebootServer(@PathParam("id") int id, @PayloadParam("type") RebootType rebootType); /** * The resize function converts an existing server to a different flavor, in essence, scaling the @@ -118,7 +169,12 @@ public interface CloudServersClient extends Closeable { * <p/> * ACTIVE - QUEUE_RESIZE - ACTIVE (on error) */ - void resizeServer(int id, int flavorId); + @POST + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/action") + @Produces(APPLICATION_JSON) + @Payload("%7B\"resize\":%7B\"flavorId\":{flavorId}%7D%7D") + void resizeServer(@PathParam("id") int id, @PayloadParam("flavorId") int flavorId); /** * The resize function converts an existing server to a different flavor, in essence, scaling the @@ -131,7 +187,12 @@ public interface CloudServersClient extends Closeable { * <p/> * VERIFY_RESIZE - ACTIVE */ - void confirmResizeServer(int id); + @POST + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/action") + @Produces(APPLICATION_JSON) + @Payload("{\"confirmResize\":null}") + void confirmResizeServer(@PathParam("id") int id); /** * The resize function converts an existing server to a different flavor, in essence, scaling the @@ -144,7 +205,12 @@ public interface CloudServersClient extends Closeable { * <p/> * VERIFY_RESIZE - ACTIVE */ - void revertResizeServer(int id); + @POST + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/action") + @Produces(APPLICATION_JSON) + @Payload("{\"revertResize\":null}") + void revertResizeServer(@PathParam("id") int id); /** * This operation asynchronously provisions a new server. The progress of this operation depends @@ -157,7 +223,14 @@ public interface CloudServersClient extends Closeable { * @param options * - used to specify extra files, metadata, or ip parameters during server creation. */ - Server createServer(String name, int imageId, int flavorId, CreateServerOptions... options); + @POST + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/servers") + @MapBinder(CreateServerOptions.class) + Server createServer(@PayloadParam("name") String name, @PayloadParam("imageId") int imageId, + @PayloadParam("flavorId") int flavorId, CreateServerOptions... options); /** * The rebuild function removes all data on the server and replaces it with the specified image. @@ -174,7 +247,11 @@ public interface CloudServersClient extends Closeable { * - imageId is an optional argument. If it is not specified, the server is rebuilt * with the original imageId. */ - void rebuildServer(int id, RebuildServerOptions... options); + @POST + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/action") + @MapBinder(RebuildServerOptions.class) + void rebuildServer(@PathParam("id") int id, RebuildServerOptions... options); /** * /** This operation allows you share an IP address to the specified server @@ -196,7 +273,12 @@ public interface CloudServersClient extends Closeable { * (e.g. keepalived) can then be used within the servers to perform health checks and * manage IP failover. */ - void shareIp(String addressToShare, int serverToTosignBindressTo, int sharedIpGroup, boolean configureServer); + @PUT + @Path("/servers/{id}/ips/public/{address}") + @Produces(APPLICATION_JSON) + @Payload("%7B\"shareIp\":%7B\"sharedIpGroupId\":{sharedIpGroupId},\"configureServer\":{configureServer}%7D%7D") + void shareIp(@PathParam("address") String addressToShare, @PathParam("id") int serverToTosignBindressTo, + @PayloadParam("sharedIpGroupId") int sharedIpGroup, @PayloadParam("configureServer") boolean configureServer); /** * This operation removes a shared IP address from the specified server. @@ -207,7 +289,10 @@ public interface CloudServersClient extends Closeable { * @param serverToTosignBindressTo * @return */ - void unshareIp(String addressToShare, int serverToTosignBindressTo); + @DELETE + @Path("/servers/{id}/ips/public/{address}") + @Fallback(VoidOnNotFoundOr404.class) + void unshareIp(@PathParam("address") String addressToShare, @PathParam("id") int serverToTosignBindressTo); /** * This operation allows you to change the administrative password. @@ -215,7 +300,11 @@ public interface CloudServersClient extends Closeable { * Status Transition: ACTIVE - PASSWORD - ACTIVE * */ - void changeAdminPass(int id, String adminPass); + @PUT + @Path("/servers/{id}") + @Produces(APPLICATION_JSON) + @Payload("%7B\"server\":%7B\"adminPass\":\"{adminPass}\"%7D%7D") + void changeAdminPass(@PathParam("id") int id, @PayloadParam("adminPass") String adminPass); /** * This operation allows you to update the name of the server. This operation changes the name of @@ -224,7 +313,11 @@ public interface CloudServersClient extends Closeable { * Status Transition: ACTIVE - PASSWORD - ACTIVE * */ - void renameServer(int id, String newName); + @PUT + @Path("/servers/{id}") + @Produces(APPLICATION_JSON) + @Payload("%7B\"server\":%7B\"name\":\"{name}\"%7D%7D") + void renameServer(@PathParam("id") int id, @PayloadParam("name") String newName); /** * @@ -233,6 +326,12 @@ public interface CloudServersClient extends Closeable { * in order to retrieve all details, pass the option {@link ListOptions#withDetails() * withDetails()} */ + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/flavors") + @Fallback(EmptySetOnNotFoundOr404.class) Set<Flavor> listFlavors(ListOptions... options); /** @@ -242,7 +341,13 @@ public interface CloudServersClient extends Closeable { * @return null, if the flavor is not found * @see Flavor */ - Flavor getFlavor(int id); + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/flavors/{id}") + @Fallback(NullOnNotFoundOr404.class) + Flavor getFlavor(@PathParam("id") int id); /** * @@ -251,6 +356,12 @@ public interface CloudServersClient extends Closeable { * in order to retrieve all details, pass the option {@link ListOptions#withDetails() * withDetails()} */ + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/images") + @Fallback(EmptySetOnNotFoundOr404.class) Set<Image> listImages(ListOptions... options); /** @@ -261,7 +372,13 @@ public interface CloudServersClient extends Closeable { * * @see Image */ - Image getImage(int id); + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @Fallback(NullOnNotFoundOr404.class) + @QueryParams(keys = "format", values = "json") + @Path("/images/{id}") + Image getImage(@PathParam("id") int id); /** * @@ -273,7 +390,10 @@ public interface CloudServersClient extends Closeable { * @return false if the image is not found * @see Image */ - boolean deleteImage(int id); + @DELETE + @Fallback(FalseOnNotFoundOr404.class) + @Path("/images/{id}") + boolean deleteImage(@PathParam("id") int id); /** * @@ -291,11 +411,17 @@ public interface CloudServersClient extends Closeable { * Note: At present, image creation is an asynchronous operation, so coordinating the creation * with data quiescence, etc. is currently not possible. * - * @throws ResourceNotFoundException - * if the server is not found + * @throws ResourceNotFoundException if the server is not found * @see Image */ - Image createImageFromServer(String imageName, int serverId); + @POST + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/images") + @Produces(APPLICATION_JSON) + @Payload("%7B\"image\":%7B\"serverId\":{serverId},\"name\":\"{name}\"%7D%7D") + Image createImageFromServer(@PayloadParam("name") String imageName, @PayloadParam("serverId") int serverId); /** * @@ -304,6 +430,12 @@ public interface CloudServersClient extends Closeable { * in order to retrieve all details, pass the option {@link ListOptions#withDetails() * withDetails()} */ + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/shared_ip_groups") + @Fallback(EmptySetOnNotFoundOr404.class) Set<SharedIpGroup> listSharedIpGroups(ListOptions... options); /** @@ -314,7 +446,13 @@ public interface CloudServersClient extends Closeable { * * @see SharedIpGroup */ - SharedIpGroup getSharedIpGroup(int id); + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/shared_ip_groups/{id}") + @Fallback(NullOnNotFoundOr404.class) + SharedIpGroup getSharedIpGroup(@PathParam("id") int id); /** * This operation creates a new shared IP group. Please note, all responses to requests for @@ -322,7 +460,14 @@ public interface CloudServersClient extends Closeable { * can be created empty or can be initially populated with a single server. Use * {@link CreateSharedIpGroupOptions} to specify an server. */ - SharedIpGroup createSharedIpGroup(String name, CreateSharedIpGroupOptions... options); + @POST + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/shared_ip_groups") + @MapBinder(CreateSharedIpGroupOptions.class) + SharedIpGroup createSharedIpGroup(@PayloadParam("name") String name, + CreateSharedIpGroupOptions... options); /** * This operation deletes the specified shared IP group. This operation will ONLY succeed if 1) @@ -332,15 +477,22 @@ public interface CloudServersClient extends Closeable { * @return false if the shared ip group is not found * @see SharedIpGroup */ - boolean deleteSharedIpGroup(int id); + @DELETE + @Fallback(FalseOnNotFoundOr404.class) + @Path("/shared_ip_groups/{id}") + boolean deleteSharedIpGroup(@PathParam("id") int id); /** * List the backup schedule for the specified server * - * @throws ResourceNotFoundException - * , if the server doesn't exist + * @throws ResourceNotFoundException, if the server doesn't exist */ - BackupSchedule getBackupSchedule(int serverId); + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/backup_schedule") + BackupSchedule getBackupSchedule(@PathParam("id") int serverId); /** * Delete backup schedule for the specified server. @@ -349,33 +501,55 @@ public interface CloudServersClient extends Closeable { * * @return false if the schedule is not found */ - boolean deleteBackupSchedule(int serverId); + @DELETE + @Fallback(FalseOnNotFoundOr404.class) + @Path("/servers/{id}/backup_schedule") + boolean deleteBackupSchedule(@PathParam("id") int serverId); /** * Enable/update the backup schedule for the specified server * */ - void replaceBackupSchedule(int id, BackupSchedule backupSchedule); + @POST + @Path("/servers/{id}/backup_schedule") + void replaceBackupSchedule(@PathParam("id") int id, + @BinderParam(BindBackupScheduleToJsonPayload.class) BackupSchedule backupSchedule); /** * List all server addresses * * returns empty set if the server doesn't exist */ - Addresses getAddresses(int serverId); + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/ips") + Addresses getAddresses(@PathParam("id") int serverId); /** * List all public server addresses * * returns empty set if the server doesn't exist */ - Set<String> listPublicAddresses(int serverId); + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/ips/public") + @Fallback(EmptySetOnNotFoundOr404.class) + Set<String> listPublicAddresses(@PathParam("id") int serverId); /** * List all private server addresses * * returns empty set if the server doesn't exist */ - Set<String> listPrivateAddresses(int serverId); - + @GET + @Unwrap + @Consumes(APPLICATION_JSON) + @QueryParams(keys = "format", values = "json") + @Path("/servers/{id}/ips/private") + @Fallback(EmptySetOnNotFoundOr404.class) + Set<String> listPrivateAddresses(@PathParam("id") int serverId); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/e3ada5b7/apis/cloudservers/src/main/java/org/jclouds/cloudservers/compute/config/CloudServersComputeServiceContextModule.java ---------------------------------------------------------------------- diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/compute/config/CloudServersComputeServiceContextModule.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/compute/config/CloudServersComputeServiceContextModule.java index 44d9ec4..44cbb95 100644 --- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/compute/config/CloudServersComputeServiceContextModule.java +++ b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/compute/config/CloudServersComputeServiceContextModule.java @@ -48,10 +48,6 @@ import com.google.inject.Injector; import com.google.inject.Provides; import com.google.inject.TypeLiteral; -/** - * Configures the {@link CloudServersComputeServiceContext}; requires {@link BaseComputeService} - * bound. - */ public class CloudServersComputeServiceContextModule extends ComputeServiceAdapterContextModule<Server, Flavor, org.jclouds.cloudservers.domain.Image, Location> { http://git-wip-us.apache.org/repos/asf/jclouds/blob/e3ada5b7/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersHttpApiModule.java ---------------------------------------------------------------------- diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersHttpApiModule.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersHttpApiModule.java new file mode 100644 index 0000000..71aa0a6 --- /dev/null +++ b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersHttpApiModule.java @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.cloudservers.config; + +import static com.google.common.base.Suppliers.memoizeWithExpiration; +import static org.jclouds.util.Suppliers2.getLastValueInMap; + +import java.net.URI; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +import javax.inject.Singleton; + +import org.jclouds.cloudservers.CloudServersClient; +import org.jclouds.cloudservers.handlers.ParseCloudServersErrorFromHttpResponse; +import org.jclouds.date.TimeStamp; +import org.jclouds.http.HttpErrorHandler; +import org.jclouds.http.annotation.ClientError; +import org.jclouds.http.annotation.Redirection; +import org.jclouds.http.annotation.ServerError; +import org.jclouds.json.config.GsonModule.DateAdapter; +import org.jclouds.json.config.GsonModule.Iso8601DateAdapter; +import org.jclouds.location.suppliers.RegionIdToURISupplier; +import org.jclouds.openstack.keystone.v1_1.config.AuthenticationServiceModule; +import org.jclouds.openstack.services.Compute; +import org.jclouds.rest.ConfiguresHttpApi; +import org.jclouds.rest.annotations.ApiVersion; +import org.jclouds.rest.config.HttpApiModule; + +import com.google.common.base.Supplier; +import com.google.inject.Provides; + +@ConfiguresHttpApi +public class CloudServersHttpApiModule extends HttpApiModule<CloudServersClient> { + + @Override + protected void configure() { + bind(DateAdapter.class).to(Iso8601DateAdapter.class); + super.configure(); + } + + @Override + protected void bindErrorHandlers() { + bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseCloudServersErrorFromHttpResponse.class); + bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseCloudServersErrorFromHttpResponse.class); + bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseCloudServersErrorFromHttpResponse.class); + } + + @Override + protected void installLocations() { + super.installLocations(); + install(new AuthenticationServiceModule()); + } + + @Provides + @Singleton + @Compute + protected Supplier<URI> provideCloudServers(RegionIdToURISupplier.Factory factory, @ApiVersion String apiVersion) { + return getLastValueInMap(factory.createForApiTypeAndVersion("cloudServers", apiVersion)); + } + + // TODO: see if we still need this. + @Provides + @Singleton + @TimeStamp + protected Supplier<Date> provideCacheBusterDate() { + return memoizeWithExpiration(new Supplier<Date>() { + public Date get() { + return new Date(); + } + }, 1, TimeUnit.SECONDS); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/e3ada5b7/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java ---------------------------------------------------------------------- diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java deleted file mode 100644 index 82609b7..0000000 --- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.cloudservers.config; - -import static com.google.common.base.Suppliers.memoizeWithExpiration; -import static org.jclouds.util.Suppliers2.getLastValueInMap; - -import java.net.URI; -import java.util.Date; -import java.util.concurrent.TimeUnit; - -import javax.inject.Singleton; - -import org.jclouds.cloudservers.CloudServersAsyncClient; -import org.jclouds.cloudservers.CloudServersClient; -import org.jclouds.cloudservers.handlers.ParseCloudServersErrorFromHttpResponse; -import org.jclouds.date.TimeStamp; -import org.jclouds.http.HttpErrorHandler; -import org.jclouds.http.annotation.ClientError; -import org.jclouds.http.annotation.Redirection; -import org.jclouds.http.annotation.ServerError; -import org.jclouds.json.config.GsonModule.DateAdapter; -import org.jclouds.json.config.GsonModule.Iso8601DateAdapter; -import org.jclouds.location.suppliers.RegionIdToURISupplier; -import org.jclouds.openstack.keystone.v1_1.config.AuthenticationServiceModule; -import org.jclouds.openstack.services.Compute; -import org.jclouds.rest.ConfiguresRestClient; -import org.jclouds.rest.annotations.ApiVersion; -import org.jclouds.rest.config.RestClientModule; - -import com.google.common.base.Supplier; -import com.google.inject.Provides; - -@ConfiguresRestClient -public class CloudServersRestClientModule extends RestClientModule<CloudServersClient, CloudServersAsyncClient> { - - @Override - protected void configure() { - bind(DateAdapter.class).to(Iso8601DateAdapter.class); - super.configure(); - } - - @Override - protected void bindErrorHandlers() { - bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseCloudServersErrorFromHttpResponse.class); - bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseCloudServersErrorFromHttpResponse.class); - bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseCloudServersErrorFromHttpResponse.class); - } - - @Override - protected void installLocations() { - super.installLocations(); - install(new AuthenticationServiceModule()); - } - - @Provides - @Singleton - @Compute - protected Supplier<URI> provideCloudServers(RegionIdToURISupplier.Factory factory, @ApiVersion String apiVersion) { - return getLastValueInMap(factory.createForApiTypeAndVersion("cloudServers", apiVersion)); - } - - // TODO: see if we still need this. - @Provides - @Singleton - @TimeStamp - protected Supplier<Date> provideCacheBusterDate() { - return memoizeWithExpiration(new Supplier<Date>() { - public Date get() { - return new Date(); - } - }, 1, TimeUnit.SECONDS); - } -}
