mirror of https://github.com/apache/jclouds.git
refactored create server command to have less args
This commit is contained in:
parent
ac2c2e75e8
commit
e7961c64cc
|
@ -0,0 +1,192 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds 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.glesys.domain;
|
||||||
|
|
||||||
|
import static com.google.common.base.Objects.equal;
|
||||||
|
import static com.google.common.base.Objects.toStringHelper;
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
import com.google.common.base.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class ServerSpec {
|
||||||
|
|
||||||
|
public static Builder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder toBuilder() {
|
||||||
|
return Builder.fromServerSpecification(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
protected String datacenter;
|
||||||
|
protected String platform;
|
||||||
|
protected String templateName;
|
||||||
|
protected int diskSizeGB;
|
||||||
|
protected int memorySizeMB;
|
||||||
|
protected int cpuCores;
|
||||||
|
protected int transfer;
|
||||||
|
|
||||||
|
public Builder datacenter(String datacenter) {
|
||||||
|
this.datacenter = datacenter;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder platform(String platform) {
|
||||||
|
this.platform = platform;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder templateName(String templateName) {
|
||||||
|
this.templateName = templateName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder diskSizeGB(int diskSizeGB) {
|
||||||
|
this.diskSizeGB = diskSizeGB;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder memorySizeMB(int memorySizeMB) {
|
||||||
|
this.memorySizeMB = memorySizeMB;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder cpuCores(int cpuCores) {
|
||||||
|
this.cpuCores = cpuCores;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder transfer(int transfer) {
|
||||||
|
this.transfer = transfer;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerSpec build() {
|
||||||
|
return new ServerSpec(platform, datacenter, memorySizeMB, diskSizeGB, templateName, cpuCores, transfer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Builder fromServerSpecification(ServerSpec in) {
|
||||||
|
return new Builder().platform(in.getPlatform()).datacenter(in.getDatacenter())
|
||||||
|
.memorySizeMB(in.getMemorySizeMB()).diskSizeGB(in.getDiskSizeGB()).templateName(in.getTemplateName())
|
||||||
|
.cpuCores(in.getCpuCores()).transfer(in.getTransfer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final String platform;
|
||||||
|
protected final String datacenter;
|
||||||
|
protected final int memorySizeMB;
|
||||||
|
protected final int diskSizeGB;
|
||||||
|
protected final String templateName;
|
||||||
|
protected final int cpuCores;
|
||||||
|
protected final int transfer;
|
||||||
|
|
||||||
|
protected ServerSpec(String platform, String datacenter, int memorySizeMB, int diskSizeGB, String templateName,
|
||||||
|
int cpuCores, int transfer) {
|
||||||
|
this.platform = checkNotNull(platform, "platform");
|
||||||
|
this.datacenter = checkNotNull(datacenter, "datacenter");
|
||||||
|
this.memorySizeMB = memorySizeMB;
|
||||||
|
this.diskSizeGB = diskSizeGB;
|
||||||
|
this.templateName = checkNotNull(templateName, "templateName");
|
||||||
|
this.cpuCores = cpuCores;
|
||||||
|
this.transfer = transfer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the data center to create the new server in
|
||||||
|
*/
|
||||||
|
public String getDatacenter() {
|
||||||
|
return datacenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the platform to use (i.e. "Xen" or "OpenVZ")
|
||||||
|
*/
|
||||||
|
public String getPlatform() {
|
||||||
|
return platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the os template to use to create the new server
|
||||||
|
*/
|
||||||
|
public String getTemplateName() {
|
||||||
|
return templateName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the amount of disk space, in GB, to allocate
|
||||||
|
*/
|
||||||
|
public int getDiskSizeGB() {
|
||||||
|
return diskSizeGB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the memory, in MB, to allocate
|
||||||
|
*/
|
||||||
|
public int getMemorySizeMB() {
|
||||||
|
return memorySizeMB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the number of CPU cores to allocate
|
||||||
|
*/
|
||||||
|
public int getCpuCores() {
|
||||||
|
return cpuCores;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return number of transfer
|
||||||
|
*/
|
||||||
|
public int getTransfer() {
|
||||||
|
return transfer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object object) {
|
||||||
|
if (this == object) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (object instanceof ServerSpec) {
|
||||||
|
final ServerSpec that = ServerSpec.class.cast(object);
|
||||||
|
return equal(platform, that.platform) && equal(datacenter, that.datacenter)
|
||||||
|
&& equal(memorySizeMB, that.memorySizeMB) && equal(diskSizeGB, that.diskSizeGB)
|
||||||
|
&& equal(templateName, that.templateName) && equal(cpuCores, that.cpuCores)
|
||||||
|
&& equal(transfer, that.transfer);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hashCode(platform, datacenter, memorySizeMB, diskSizeGB, templateName, cpuCores, transfer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return toStringHelper("").add("platform", platform).add("datacenter", datacenter)
|
||||||
|
.add("templateName", templateName).add("cpuCores", cpuCores).add("cpuCores", cpuCores)
|
||||||
|
.add("diskSizeGB", diskSizeGB).add("transfer", transfer).toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,11 +29,12 @@ import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
|
import org.jclouds.glesys.domain.AllowedArgumentsForCreateServer;
|
||||||
import org.jclouds.glesys.domain.Console;
|
import org.jclouds.glesys.domain.Console;
|
||||||
import org.jclouds.glesys.domain.Server;
|
import org.jclouds.glesys.domain.Server;
|
||||||
import org.jclouds.glesys.domain.AllowedArgumentsForCreateServer;
|
|
||||||
import org.jclouds.glesys.domain.ServerDetails;
|
import org.jclouds.glesys.domain.ServerDetails;
|
||||||
import org.jclouds.glesys.domain.ServerLimit;
|
import org.jclouds.glesys.domain.ServerLimit;
|
||||||
|
import org.jclouds.glesys.domain.ServerSpec;
|
||||||
import org.jclouds.glesys.domain.ServerStatus;
|
import org.jclouds.glesys.domain.ServerStatus;
|
||||||
import org.jclouds.glesys.domain.Template;
|
import org.jclouds.glesys.domain.Template;
|
||||||
import org.jclouds.glesys.functions.ParseTemplatesFromHttpResponse;
|
import org.jclouds.glesys.functions.ParseTemplatesFromHttpResponse;
|
||||||
|
@ -45,6 +46,8 @@ import org.jclouds.glesys.options.ServerStatusOptions;
|
||||||
import org.jclouds.http.filters.BasicAuthentication;
|
import org.jclouds.http.filters.BasicAuthentication;
|
||||||
import org.jclouds.rest.annotations.ExceptionParser;
|
import org.jclouds.rest.annotations.ExceptionParser;
|
||||||
import org.jclouds.rest.annotations.FormParams;
|
import org.jclouds.rest.annotations.FormParams;
|
||||||
|
import org.jclouds.rest.annotations.MapBinder;
|
||||||
|
import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.ResponseParser;
|
import org.jclouds.rest.annotations.ResponseParser;
|
||||||
import org.jclouds.rest.annotations.SelectJson;
|
import org.jclouds.rest.annotations.SelectJson;
|
||||||
|
@ -56,7 +59,7 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Server via their REST API.
|
* Provides asynchronous access to Server via their REST API.
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
* @author Adam Lowe
|
* @author Adam Lowe
|
||||||
* @see ServerClient
|
* @see ServerClient
|
||||||
|
@ -105,7 +108,6 @@ public interface ServerAsyncClient {
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
ListenableFuture<SortedMap<String, ServerLimit>> getServerLimits(@FormParam("serverid") String id);
|
ListenableFuture<SortedMap<String, ServerLimit>> getServerLimits(@FormParam("serverid") String id);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ServerClient#getConsole
|
* @see ServerClient#getConsole
|
||||||
*/
|
*/
|
||||||
|
@ -116,7 +118,6 @@ public interface ServerAsyncClient {
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
ListenableFuture<Console> getConsole(@FormParam("serverid") String id);
|
ListenableFuture<Console> getConsole(@FormParam("serverid") String id);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ServerClient#getAllowedArgumentsForCreateServerByPlatform
|
* @see ServerClient#getAllowedArgumentsForCreateServerByPlatform
|
||||||
*/
|
*/
|
||||||
|
@ -125,7 +126,7 @@ public interface ServerAsyncClient {
|
||||||
@SelectJson("argumentslist")
|
@SelectJson("argumentslist")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
ListenableFuture<Map<String, AllowedArgumentsForCreateServer>> getAllowedArgumentsForCreateServerByPlatform();
|
ListenableFuture<Map<String, AllowedArgumentsForCreateServer>> getAllowedArgumentsForCreateServerByPlatform();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ServerClient#getTemplates
|
* @see ServerClient#getTemplates
|
||||||
*/
|
*/
|
||||||
|
@ -134,14 +135,15 @@ public interface ServerAsyncClient {
|
||||||
@ResponseParser(ParseTemplatesFromHttpResponse.class)
|
@ResponseParser(ParseTemplatesFromHttpResponse.class)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
ListenableFuture<Set<Template>> getTemplates();
|
ListenableFuture<Set<Template>> getTemplates();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ServerClient#stopServer
|
* @see ServerClient#stopServer
|
||||||
*/
|
*/
|
||||||
@POST
|
@POST
|
||||||
@Path("/server/resetlimit/format/json")
|
@Path("/server/resetlimit/format/json")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
ListenableFuture<SortedMap<String, ServerLimit>> resetServerLimit(@FormParam("serverid") String id, @FormParam("type") String type);
|
ListenableFuture<SortedMap<String, ServerLimit>> resetServerLimit(@FormParam("serverid") String id,
|
||||||
|
@FormParam("type") String type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ServerClient#rebootServer
|
* @see ServerClient#rebootServer
|
||||||
|
@ -181,22 +183,16 @@ public interface ServerAsyncClient {
|
||||||
ListenableFuture<ServerDetails> hardStopServer(@FormParam("serverid") String id);
|
ListenableFuture<ServerDetails> hardStopServer(@FormParam("serverid") String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ServerClient#createServer
|
* @see ServerClient#createServerWithHostnameAndRootPassword
|
||||||
*/
|
*/
|
||||||
@POST
|
@POST
|
||||||
@SelectJson("server")
|
@SelectJson("server")
|
||||||
@Path("/server/create/format/json")
|
@Path("/server/create/format/json")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
ListenableFuture<ServerDetails> createServer(@FormParam("datacenter") String datacenter,
|
@MapBinder(CreateServerOptions.class)
|
||||||
@FormParam("platform") String platform,
|
ListenableFuture<ServerDetails> createServerWithHostnameAndRootPassword(ServerSpec serverSpec,
|
||||||
@FormParam("hostname") String hostname,
|
@PayloadParam("hostname") String hostname, @PayloadParam("rootpassword") String rootPassword,
|
||||||
@FormParam("templatename") String templateName,
|
CreateServerOptions... options);
|
||||||
@FormParam("disksize") int diskSize,
|
|
||||||
@FormParam("memorysize") int memorySize,
|
|
||||||
@FormParam("cpucores") int cpuCores,
|
|
||||||
@FormParam("rootpassword") String rootPassword,
|
|
||||||
@FormParam("transfer") int transfer,
|
|
||||||
CreateServerOptions... options);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ServerClient#cloneServer
|
* @see ServerClient#cloneServer
|
||||||
|
@ -206,8 +202,7 @@ public interface ServerAsyncClient {
|
||||||
@SelectJson("server")
|
@SelectJson("server")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
ListenableFuture<ServerDetails> cloneServer(@FormParam("serverid") String serverid,
|
ListenableFuture<ServerDetails> cloneServer(@FormParam("serverid") String serverid,
|
||||||
@FormParam("hostname") String hostname,
|
@FormParam("hostname") String hostname, CloneServerOptions... options);
|
||||||
CloneServerOptions... options);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ServerClient#editServer
|
* @see ServerClient#editServer
|
||||||
|
@ -237,6 +232,7 @@ public interface ServerAsyncClient {
|
||||||
*/
|
*/
|
||||||
@POST
|
@POST
|
||||||
@Path("/server/resourceusage/format/json")
|
@Path("/server/resourceusage/format/json")
|
||||||
void resourceUsage(@FormParam("serverid") String id, @FormParam("resource") String resource, @FormParam("resolution") String resolution);
|
void resourceUsage(@FormParam("serverid") String id, @FormParam("resource") String resource,
|
||||||
|
@FormParam("resolution") String resolution);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.jclouds.glesys.domain.Console;
|
||||||
import org.jclouds.glesys.domain.Server;
|
import org.jclouds.glesys.domain.Server;
|
||||||
import org.jclouds.glesys.domain.ServerDetails;
|
import org.jclouds.glesys.domain.ServerDetails;
|
||||||
import org.jclouds.glesys.domain.ServerLimit;
|
import org.jclouds.glesys.domain.ServerLimit;
|
||||||
|
import org.jclouds.glesys.domain.ServerSpec;
|
||||||
import org.jclouds.glesys.domain.ServerStatus;
|
import org.jclouds.glesys.domain.ServerStatus;
|
||||||
import org.jclouds.glesys.domain.Template;
|
import org.jclouds.glesys.domain.Template;
|
||||||
import org.jclouds.glesys.options.CloneServerOptions;
|
import org.jclouds.glesys.options.CloneServerOptions;
|
||||||
|
@ -41,7 +42,7 @@ import com.google.common.annotations.Beta;
|
||||||
/**
|
/**
|
||||||
* Provides synchronous access to Server.
|
* Provides synchronous access to Server.
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
* @author Adam Lowe
|
* @author Adam Lowe
|
||||||
* @see ServerAsyncClient
|
* @see ServerAsyncClient
|
||||||
|
@ -52,7 +53,7 @@ public interface ServerClient {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of all servers on this account.
|
* Get a list of all servers on this account.
|
||||||
*
|
*
|
||||||
* @return an account's associated server objects.
|
* @return an account's associated server objects.
|
||||||
*/
|
*/
|
||||||
Set<Server> listServers();
|
Set<Server> listServers();
|
||||||
|
@ -61,18 +62,21 @@ public interface ServerClient {
|
||||||
* Get detailed information about a server such as hostname, hardware
|
* Get detailed information about a server such as hostname, hardware
|
||||||
* configuration (cpu, memory and disk), ip addresses, cost, transfer, os and
|
* configuration (cpu, memory and disk), ip addresses, cost, transfer, os and
|
||||||
* more.
|
* more.
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
|
* id of the server
|
||||||
* @return server or null if not found
|
* @return server or null if not found
|
||||||
*/
|
*/
|
||||||
ServerDetails getServerDetails(String id);
|
ServerDetails getServerDetails(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get detailed information about a server status including up-time and hardware usage
|
* Get detailed information about a server status including up-time and
|
||||||
* (cpu, disk, memory and bandwidth)
|
* hardware usage (cpu, disk, memory and bandwidth)
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
* @param options optional parameters
|
* id of the server
|
||||||
|
* @param options
|
||||||
|
* optional parameters
|
||||||
* @return the status of the server or null if not found
|
* @return the status of the server or null if not found
|
||||||
*/
|
*/
|
||||||
ServerStatus getServerStatus(String id, ServerStatusOptions... options);
|
ServerStatus getServerStatus(String id, ServerStatusOptions... options);
|
||||||
|
@ -80,130 +84,141 @@ public interface ServerClient {
|
||||||
/**
|
/**
|
||||||
* Get detailed information about a server's limits (for OpenVZ only).
|
* Get detailed information about a server's limits (for OpenVZ only).
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
|
* id of the server
|
||||||
* @return the requested information about the server or null if not found
|
* @return the requested information about the server or null if not found
|
||||||
*/
|
*/
|
||||||
Map<String, ServerLimit> getServerLimits(String id);
|
Map<String, ServerLimit> getServerLimits(String id);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get information about how to connect to a server via VNC
|
* Get information about how to connect to a server via VNC
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
|
* id of the server
|
||||||
* @return the requested information about the server or null if not found
|
* @return the requested information about the server or null if not found
|
||||||
*/
|
*/
|
||||||
Console getConsole(String id);
|
Console getConsole(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get information about the OS templates available
|
* Get information about the OS templates available
|
||||||
*
|
*
|
||||||
* @return the set of information about each template
|
* @return the set of information about each template
|
||||||
*/
|
*/
|
||||||
Set<Template> getTemplates();
|
Set<Template> getTemplates();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get information about valid arguments to #createServer for each platform
|
* Get information about valid arguments to #createServer for each platform
|
||||||
*
|
*
|
||||||
* @return a map of argument lists, keyed on platform
|
* @return a map of argument lists, keyed on platform
|
||||||
*/
|
*/
|
||||||
Map<String, AllowedArgumentsForCreateServer> getAllowedArgumentsForCreateServerByPlatform();
|
Map<String, AllowedArgumentsForCreateServer> getAllowedArgumentsForCreateServerByPlatform();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset the fail count for a server limit (for OpenVZ only).
|
* Reset the fail count for a server limit (for OpenVZ only).
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
* @param type the type of limit to reset
|
* id of the server
|
||||||
|
* @param type
|
||||||
|
* the type of limit to reset
|
||||||
*/
|
*/
|
||||||
Map<String, ServerLimit> resetServerLimit(String id, String type);
|
Map<String, ServerLimit> resetServerLimit(String id, String type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reboot a server
|
* Reboot a server
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
|
* id of the server
|
||||||
*/
|
*/
|
||||||
ServerDetails rebootServer(String id);
|
ServerDetails rebootServer(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start a server
|
* Start a server
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
|
* id of the server
|
||||||
*/
|
*/
|
||||||
ServerDetails startServer(String id);
|
ServerDetails startServer(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop a server
|
* Stop a server
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
|
* id of the server
|
||||||
*/
|
*/
|
||||||
void stopServer(String id);
|
void stopServer(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hard stop a server
|
* hard stop a server
|
||||||
*
|
*
|
||||||
* @param id id of the server
|
* @param id
|
||||||
|
* id of the server
|
||||||
*/
|
*/
|
||||||
void hardStopServer(String id);
|
void hardStopServer(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new server
|
* Create a new server
|
||||||
*
|
*
|
||||||
* @param datacenter the data center to create the new server in
|
* @param hostname
|
||||||
* @param platform the platform to use (i.e. "Xen" or "OpenVZ")
|
* the host name of the new server
|
||||||
* @param hostname the host name of the new server
|
* @param rootPassword
|
||||||
* @param templateName the template to use to create the new server
|
* the root password to use
|
||||||
* @param diskSize the amount of disk space, in GB, to allocate
|
* @param options
|
||||||
* @param memorySize the memory, in MB, to allocate
|
* optional settings ex. description
|
||||||
* @param cpuCores the number of CPU cores to allocate
|
|
||||||
* @param rootPassword the root password to use
|
|
||||||
* @param transfer the transfer size
|
|
||||||
* @param options optional settings ex. description
|
|
||||||
*/
|
*/
|
||||||
//TODO: make a ServerSpecification object like LaunchSpecification in ec2 as there are too many args
|
ServerDetails createServerWithHostnameAndRootPassword(ServerSpec serverSpec, String hostname, String rootPassword,
|
||||||
@Beta
|
CreateServerOptions... options);
|
||||||
ServerDetails createServer(String datacenter,String platform,String hostname,
|
|
||||||
String templateName, int diskSize, int memorySize, int cpuCores,
|
|
||||||
String rootPassword, int transfer, CreateServerOptions... options);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edit the configuration of a server
|
* Edit the configuration of a server
|
||||||
*
|
*
|
||||||
* @param serverid the serverId of the server to edit
|
* @param serverid
|
||||||
* @param options the settings to change
|
* the serverId of the server to edit
|
||||||
|
* @param options
|
||||||
|
* the settings to change
|
||||||
*/
|
*/
|
||||||
ServerDetails editServer(String serverid, EditServerOptions... options);
|
ServerDetails editServer(String serverid, EditServerOptions... options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clone a server
|
* Clone a server
|
||||||
*
|
*
|
||||||
* @param serverid the serverId of the server to clone
|
* @param serverid
|
||||||
* @param hostname the new host name of the cloned server
|
* the serverId of the server to clone
|
||||||
* @param options the settings to change
|
* @param hostname
|
||||||
|
* the new host name of the cloned server
|
||||||
|
* @param options
|
||||||
|
* the settings to change
|
||||||
*/
|
*/
|
||||||
ServerDetails cloneServer(String serverid, String hostname, CloneServerOptions... options);
|
ServerDetails cloneServer(String serverid, String hostname, CloneServerOptions... options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy a server
|
* Destroy a server
|
||||||
*
|
*
|
||||||
* @param id the id of the server
|
* @param id
|
||||||
* @param keepIp if DestroyServerOptions.keepIp(true) the servers ip will be retained for use in your GleSYS account
|
* the id of the server
|
||||||
|
* @param keepIp
|
||||||
|
* if DestroyServerOptions.keepIp(true) the servers ip will be
|
||||||
|
* retained for use in your GleSYS account
|
||||||
*/
|
*/
|
||||||
ServerDetails destroyServer(String id, DestroyServerOptions keepIp);
|
ServerDetails destroyServer(String id, DestroyServerOptions keepIp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset the root password of a server
|
* Reset the root password of a server
|
||||||
*
|
*
|
||||||
* @param id the id of the server
|
* @param id
|
||||||
* @param password the new password to use
|
* the id of the server
|
||||||
|
* @param password
|
||||||
|
* the new password to use
|
||||||
*/
|
*/
|
||||||
void resetPassword(String id, String password);
|
void resetPassword(String id, String password);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return resource usage over time for server
|
* Return resource usage over time for server
|
||||||
*
|
*
|
||||||
* @param id the id of the server
|
* @param id
|
||||||
* @param resource the name of the resource to retrieve usage information for
|
* the id of the server
|
||||||
|
* @param resource
|
||||||
|
* the name of the resource to retrieve usage information for
|
||||||
*/
|
*/
|
||||||
@Beta
|
@Beta
|
||||||
// TODO: better name
|
// TODO: better name
|
||||||
|
|
|
@ -18,12 +18,57 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.glesys.options;
|
package org.jclouds.glesys.options;
|
||||||
|
|
||||||
import org.jclouds.http.options.BaseHttpRequestOptions;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import static com.google.common.base.Preconditions.checkState;
|
||||||
|
import static com.google.common.base.Predicates.instanceOf;
|
||||||
|
import static com.google.common.collect.Iterables.find;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.jclouds.glesys.domain.ServerSpec;
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.io.payloads.UrlEncodedFormPayload;
|
||||||
|
import org.jclouds.rest.MapBinder;
|
||||||
|
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMultimap;
|
||||||
|
import com.google.common.collect.Multimaps;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Adam Lowe
|
* @author Adam Lowe
|
||||||
*/
|
*/
|
||||||
public class CreateServerOptions extends BaseHttpRequestOptions {
|
public class CreateServerOptions implements MapBinder {
|
||||||
|
|
||||||
|
private String ip;
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
||||||
|
checkArgument(checkNotNull(request, "request") instanceof GeneratedHttpRequest<?>,
|
||||||
|
"this binder is only valid for GeneratedHttpRequests!");
|
||||||
|
GeneratedHttpRequest<?> gRequest = (GeneratedHttpRequest<?>) request;
|
||||||
|
checkState(gRequest.getArgs() != null, "args should be initialized at this point");
|
||||||
|
|
||||||
|
ImmutableMultimap.Builder<String, String> formParams = ImmutableMultimap.<String, String> builder();
|
||||||
|
formParams.putAll(Multimaps.forMap(postParams));
|
||||||
|
ServerSpec serverSpec = ServerSpec.class.cast(find(gRequest.getArgs(), instanceOf(ServerSpec.class)));
|
||||||
|
formParams.put("datacenter", serverSpec.getDatacenter());
|
||||||
|
formParams.put("platform", serverSpec.getPlatform());
|
||||||
|
formParams.put("templatename", serverSpec.getTemplateName());
|
||||||
|
formParams.put("disksize", serverSpec.getDiskSizeGB() + "");
|
||||||
|
formParams.put("memorysize", serverSpec.getMemorySizeMB() + "");
|
||||||
|
formParams.put("cpucores", serverSpec.getCpuCores() + "");
|
||||||
|
formParams.put("transfer", serverSpec.getTransfer() + "");
|
||||||
|
if (ip != null)
|
||||||
|
formParams.put("ip", ip);
|
||||||
|
if (description != null)
|
||||||
|
formParams.put("description", description);
|
||||||
|
|
||||||
|
request.setPayload(new UrlEncodedFormPayload(formParams.build()));
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
/**
|
/**
|
||||||
* @see CreateServerOptions#description
|
* @see CreateServerOptions#description
|
||||||
|
@ -43,19 +88,25 @@ public class CreateServerOptions extends BaseHttpRequestOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param description the description of the server
|
* @param description
|
||||||
|
* the description of the server
|
||||||
*/
|
*/
|
||||||
public CreateServerOptions description(String description) {
|
public CreateServerOptions description(String description) {
|
||||||
formParameters.put("description", description);
|
this.description = description;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ip the ip address to assign to the server
|
* @param ip
|
||||||
|
* the ip address to assign to the server
|
||||||
*/
|
*/
|
||||||
public CreateServerOptions ip(String ip) {
|
public CreateServerOptions ip(String ip) {
|
||||||
formParameters.put("ip", ip);
|
this.ip = ip;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <R extends HttpRequest> R bindToRequest(R request, Object input) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,22 +183,27 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
|
||||||
.put("Accept", "application/json")
|
.put("Accept", "application/json")
|
||||||
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
|
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
|
||||||
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
|
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
|
||||||
.put("cpucores", "1")
|
|
||||||
.put("memorysize", "512")
|
|
||||||
.put("datacenter", "Falkenberg")
|
|
||||||
.put("transfer", "50")
|
|
||||||
.put("rootpassword", "password")
|
|
||||||
.put("hostname", "jclouds-test")
|
.put("hostname", "jclouds-test")
|
||||||
|
.put("rootpassword", "password")
|
||||||
|
.put("datacenter", "Falkenberg")
|
||||||
.put("platform", "OpenVZ")
|
.put("platform", "OpenVZ")
|
||||||
.put("templatename", "Ubuntu 32-bit")
|
.put("templatename", "Ubuntu 32-bit")
|
||||||
.put("disksize", "5").build())).build(),
|
.put("disksize", "5")
|
||||||
|
.put("memorysize", "512")
|
||||||
|
.put("cpucores", "1")
|
||||||
|
.put("transfer", "50")
|
||||||
|
.build())).build(),
|
||||||
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_noip.json")).build()).getServerClient();
|
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_noip.json")).build()).getServerClient();
|
||||||
|
|
||||||
Cost cost = Cost.builder().amount(6.38).currency("EUR").timePeriod("month").build();
|
Cost cost = Cost.builder().amount(6.38).currency("EUR").timePeriod("month").build();
|
||||||
ServerDetails expected = ServerDetails.builder().id("vz1541880").hostname("mammamia").datacenter("Falkenberg").platform("OpenVZ")
|
ServerDetails expected = ServerDetails.builder().id("vz1541880").hostname("mammamia").datacenter("Falkenberg").platform("OpenVZ")
|
||||||
.templateName("Ubuntu 11.04 64-bit").description("description").cpuCores(1).memorySize(128).diskSize(5).transfer(50).cost(cost).build();
|
.templateName("Ubuntu 11.04 64-bit").description("description").cpuCores(1).memorySize(128).diskSize(5).transfer(50).cost(cost).build();
|
||||||
|
|
||||||
assertEquals(client.createServer("Falkenberg", "OpenVZ", "jclouds-test", "Ubuntu 32-bit", 5, 512, 1, "password", 50).toString(), expected.toString());
|
assertEquals(
|
||||||
|
client.createServerWithHostnameAndRootPassword(
|
||||||
|
ServerSpec.builder().datacenter("Falkenberg").platform("OpenVZ").templateName("Ubuntu 32-bit")
|
||||||
|
.diskSizeGB(5).memorySizeMB(512).cpuCores(1).transfer(50).build(), "jclouds-test", "password").toString(),
|
||||||
|
expected.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCreateServerWithOptsWhenResponseIs2xx() throws Exception {
|
public void testCreateServerWithOptsWhenResponseIs2xx() throws Exception {
|
||||||
|
@ -208,21 +213,26 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
|
||||||
.put("Accept", "application/json")
|
.put("Accept", "application/json")
|
||||||
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
|
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
|
||||||
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
|
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
|
||||||
.put("cpucores", "1").put("memorysize", "512")
|
|
||||||
.put("datacenter", "Falkenberg")
|
|
||||||
.put("transfer", "50")
|
|
||||||
.put("rootpassword", "password")
|
|
||||||
.put("hostname", "jclouds-test")
|
.put("hostname", "jclouds-test")
|
||||||
|
.put("rootpassword", "password")
|
||||||
|
.put("datacenter", "Falkenberg")
|
||||||
.put("platform", "OpenVZ")
|
.put("platform", "OpenVZ")
|
||||||
.put("templatename", "Ubuntu 32-bit")
|
.put("templatename", "Ubuntu 32-bit")
|
||||||
.put("disksize", "5")
|
.put("disksize", "5")
|
||||||
|
.put("memorysize", "512")
|
||||||
|
.put("cpucores", "1")
|
||||||
|
.put("transfer", "50")
|
||||||
|
.put("ip", "10.0.0.1")
|
||||||
.put("description", "Description-of-server")
|
.put("description", "Description-of-server")
|
||||||
.put("ip", "10.0.0.1").build())).build(),
|
.build())).build(),
|
||||||
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_details.json")).build()).getServerClient();
|
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_details.json")).build()).getServerClient();
|
||||||
|
|
||||||
CreateServerOptions options = CreateServerOptions.Builder.description("Description-of-server").ip("10.0.0.1");
|
CreateServerOptions options = CreateServerOptions.Builder.description("Description-of-server").ip("10.0.0.1");
|
||||||
|
|
||||||
assertEquals(client.createServer("Falkenberg", "OpenVZ", "jclouds-test", "Ubuntu 32-bit", 5, 512, 1, "password", 50, options), expectedServerDetails());
|
|
||||||
|
assertEquals(client.createServerWithHostnameAndRootPassword(ServerSpec.builder().datacenter("Falkenberg")
|
||||||
|
.platform("OpenVZ").templateName("Ubuntu 32-bit").diskSizeGB(5).memorySizeMB(512).cpuCores(1).transfer(50)
|
||||||
|
.build(), "jclouds-test", "password", options), expectedServerDetails());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.jclouds.glesys.GleSYSAsyncClient;
|
||||||
import org.jclouds.glesys.GleSYSClient;
|
import org.jclouds.glesys.GleSYSClient;
|
||||||
import org.jclouds.glesys.domain.Server;
|
import org.jclouds.glesys.domain.Server;
|
||||||
import org.jclouds.glesys.domain.ServerDetails;
|
import org.jclouds.glesys.domain.ServerDetails;
|
||||||
|
import org.jclouds.glesys.domain.ServerSpec;
|
||||||
import org.jclouds.glesys.domain.ServerStatus;
|
import org.jclouds.glesys.domain.ServerStatus;
|
||||||
import org.jclouds.glesys.features.DomainClient;
|
import org.jclouds.glesys.features.DomainClient;
|
||||||
import org.jclouds.glesys.features.ServerClient;
|
import org.jclouds.glesys.features.ServerClient;
|
||||||
|
@ -93,7 +94,10 @@ public class BaseGleSYSClientLiveTest {
|
||||||
|
|
||||||
protected ServerStatusChecker createServer(String hostName) {
|
protected ServerStatusChecker createServer(String hostName) {
|
||||||
ServerClient client = context.getApi().getServerClient();
|
ServerClient client = context.getApi().getServerClient();
|
||||||
ServerDetails testServer = client.createServer("Falkenberg", "OpenVZ", hostName, "Ubuntu 10.04 LTS 32-bit", 5, 512, 1, "password", 50);
|
|
||||||
|
ServerDetails testServer = client.createServerWithHostnameAndRootPassword(
|
||||||
|
ServerSpec.builder().datacenter("Falkenberg").platform("OpenVZ").templateName("Ubuntu 10.04 LTS 32-bit")
|
||||||
|
.diskSizeGB(5).memorySizeMB(512).cpuCores(1).transfer(50).build(), hostName, "password");
|
||||||
|
|
||||||
assertNotNull(testServer.getId());
|
assertNotNull(testServer.getId());
|
||||||
assertEquals(testServer.getHostname(), hostName);
|
assertEquals(testServer.getHostname(), hostName);
|
||||||
|
|
Loading…
Reference in New Issue