mirror of https://github.com/apache/jclouds.git
Add StopVirtualMachineOptions for forcing VM stop to CloudStack API
This commit is contained in:
parent
b0cebe85d2
commit
b756af1543
|
@ -34,6 +34,7 @@ import org.jclouds.cloudstack.filters.AuthenticationFilter;
|
||||||
import org.jclouds.cloudstack.options.AssignVirtualMachineOptions;
|
import org.jclouds.cloudstack.options.AssignVirtualMachineOptions;
|
||||||
import org.jclouds.cloudstack.options.DeployVirtualMachineOptions;
|
import org.jclouds.cloudstack.options.DeployVirtualMachineOptions;
|
||||||
import org.jclouds.cloudstack.options.ListVirtualMachinesOptions;
|
import org.jclouds.cloudstack.options.ListVirtualMachinesOptions;
|
||||||
|
import org.jclouds.cloudstack.options.StopVirtualMachineOptions;
|
||||||
import org.jclouds.rest.annotations.Fallback;
|
import org.jclouds.rest.annotations.Fallback;
|
||||||
import org.jclouds.rest.annotations.OnlyElement;
|
import org.jclouds.rest.annotations.OnlyElement;
|
||||||
import org.jclouds.rest.annotations.QueryParams;
|
import org.jclouds.rest.annotations.QueryParams;
|
||||||
|
@ -119,6 +120,16 @@ public interface VirtualMachineAsyncClient {
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
ListenableFuture<String> stopVirtualMachine(@QueryParam("id") String id);
|
ListenableFuture<String> stopVirtualMachine(@QueryParam("id") String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see VirtualMachineClient#stopVirtualMachine
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@QueryParams(keys = "command", values = "stopVirtualMachine")
|
||||||
|
@SelectJson("jobid")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
ListenableFuture<String> stopVirtualMachine(@QueryParam("id") String id,
|
||||||
|
StopVirtualMachineOptions options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see VirtualMachineClient#resetPasswordForVirtualMachine
|
* @see VirtualMachineClient#resetPasswordForVirtualMachine
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -24,6 +24,7 @@ import org.jclouds.cloudstack.domain.VirtualMachine;
|
||||||
import org.jclouds.cloudstack.options.AssignVirtualMachineOptions;
|
import org.jclouds.cloudstack.options.AssignVirtualMachineOptions;
|
||||||
import org.jclouds.cloudstack.options.DeployVirtualMachineOptions;
|
import org.jclouds.cloudstack.options.DeployVirtualMachineOptions;
|
||||||
import org.jclouds.cloudstack.options.ListVirtualMachinesOptions;
|
import org.jclouds.cloudstack.options.ListVirtualMachinesOptions;
|
||||||
|
import org.jclouds.cloudstack.options.StopVirtualMachineOptions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides synchronous access to CloudStack VirtualMachine features.
|
* Provides synchronous access to CloudStack VirtualMachine features.
|
||||||
|
@ -96,6 +97,17 @@ public interface VirtualMachineClient {
|
||||||
*/
|
*/
|
||||||
String stopVirtualMachine(String id);
|
String stopVirtualMachine(String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops a virtual machine.
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* The ID of the virtual machine
|
||||||
|
* @param options
|
||||||
|
* If present, whether to force stop.
|
||||||
|
* @return job id related to destroying the VM
|
||||||
|
*/
|
||||||
|
String stopVirtualMachine(String id, StopVirtualMachineOptions options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resets the password for virtual machine. The virtual machine must be in a
|
* Resets the password for virtual machine. The virtual machine must be in a
|
||||||
* "Stopped" state and the template must already support this feature for
|
* "Stopped" state and the template must already support this feature for
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/**
|
||||||
|
* 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.cloudstack.options;
|
||||||
|
|
||||||
|
import org.jclouds.http.options.BaseHttpRequestOptions;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for stopping virtual machines.
|
||||||
|
*
|
||||||
|
* @see <a
|
||||||
|
* href="http://download.cloud.com/releases/3.0.3/api_3.0.3/root_admin/stopVirtualMachine.html"
|
||||||
|
* />
|
||||||
|
* @author Adrian Cole
|
||||||
|
* @author Andrew Bayer
|
||||||
|
*/
|
||||||
|
public class StopVirtualMachineOptions extends BaseHttpRequestOptions {
|
||||||
|
|
||||||
|
public static final StopVirtualMachineOptions NONE = new StopVirtualMachineOptions();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param forced
|
||||||
|
* Whether to force stop the virtual machine. Defaults to false.
|
||||||
|
*/
|
||||||
|
public StopVirtualMachineOptions forced(boolean forced) {
|
||||||
|
this.queryParameters.replaceValues("forced", ImmutableSet.of(forced + ""));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see StopVirtualMachineOptions#forced
|
||||||
|
*/
|
||||||
|
public static StopVirtualMachineOptions forced(boolean forced) {
|
||||||
|
StopVirtualMachineOptions options = new StopVirtualMachineOptions();
|
||||||
|
return options.forced(forced);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,10 +24,11 @@ import java.io.IOException;
|
||||||
|
|
||||||
import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
|
import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
|
||||||
import org.jclouds.Fallbacks.NullOnNotFoundOr404;
|
import org.jclouds.Fallbacks.NullOnNotFoundOr404;
|
||||||
|
import org.jclouds.fallbacks.MapHttp4xxCodesToExceptions;
|
||||||
import org.jclouds.cloudstack.internal.BaseCloudStackAsyncClientTest;
|
import org.jclouds.cloudstack.internal.BaseCloudStackAsyncClientTest;
|
||||||
import org.jclouds.cloudstack.options.AssignVirtualMachineOptions;
|
import org.jclouds.cloudstack.options.AssignVirtualMachineOptions;
|
||||||
import org.jclouds.cloudstack.options.ListVirtualMachinesOptions;
|
import org.jclouds.cloudstack.options.ListVirtualMachinesOptions;
|
||||||
import org.jclouds.fallbacks.MapHttp4xxCodesToExceptions;
|
import org.jclouds.cloudstack.options.StopVirtualMachineOptions;
|
||||||
import org.jclouds.functions.IdentityFunction;
|
import org.jclouds.functions.IdentityFunction;
|
||||||
import org.jclouds.http.functions.ParseFirstJsonValueNamed;
|
import org.jclouds.http.functions.ParseFirstJsonValueNamed;
|
||||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||||
|
@ -137,7 +138,7 @@ public class VirtualMachineAsyncClientTest extends BaseCloudStackAsyncClientTest
|
||||||
|
|
||||||
public void testStopVirtualMachine() throws SecurityException, NoSuchMethodException, IOException {
|
public void testStopVirtualMachine() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Invokable<?, ?> method = method(VirtualMachineAsyncClient.class, "stopVirtualMachine", String.class);
|
Invokable<?, ?> method = method(VirtualMachineAsyncClient.class, "stopVirtualMachine", String.class);
|
||||||
GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(5));
|
GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of("5"));
|
||||||
|
|
||||||
assertRequestLineEquals(httpRequest,
|
assertRequestLineEquals(httpRequest,
|
||||||
"GET http://localhost:8080/client/api?response=json&command=stopVirtualMachine&id=5 HTTP/1.1");
|
"GET http://localhost:8080/client/api?response=json&command=stopVirtualMachine&id=5 HTTP/1.1");
|
||||||
|
@ -152,6 +153,26 @@ public class VirtualMachineAsyncClientTest extends BaseCloudStackAsyncClientTest
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testStopVirtualMachineForced() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Invokable<?, ?> method = method(VirtualMachineAsyncClient.class, "stopVirtualMachine", String.class,
|
||||||
|
StopVirtualMachineOptions.class);
|
||||||
|
|
||||||
|
GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of("5",
|
||||||
|
StopVirtualMachineOptions.Builder.forced(true)));
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET http://localhost:8080/client/api?response=json&command=stopVirtualMachine&id=5&forced=true HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void testResetPasswordForVirtualMachine() throws SecurityException, NoSuchMethodException, IOException {
|
public void testResetPasswordForVirtualMachine() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Invokable<?, ?> method = method(VirtualMachineAsyncClient.class, "resetPasswordForVirtualMachine", String.class);
|
Invokable<?, ?> method = method(VirtualMachineAsyncClient.class, "resetPasswordForVirtualMachine", String.class);
|
||||||
GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(5));
|
GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(5));
|
||||||
|
|
Loading…
Reference in New Issue