mirror of https://github.com/apache/jclouds.git
Issue 112: progress in clone/configure; fixed bug in computeClient.stop()
git-svn-id: http://jclouds.googlecode.com/svn/trunk@2500 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
cf438c9252
commit
1e6848f7c8
|
@ -24,6 +24,7 @@
|
||||||
package org.jclouds.vcloud.terremark;
|
package org.jclouds.vcloud.terremark;
|
||||||
|
|
||||||
import static javax.ws.rs.core.MediaType.APPLICATION_XML;
|
import static javax.ws.rs.core.MediaType.APPLICATION_XML;
|
||||||
|
import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
|
||||||
import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
|
import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
|
||||||
import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
|
import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
|
||||||
|
|
||||||
|
@ -50,12 +51,16 @@ import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.XMLResponseParser;
|
import org.jclouds.rest.annotations.XMLResponseParser;
|
||||||
import org.jclouds.rest.functions.InetAddressToHostAddress;
|
import org.jclouds.rest.functions.InetAddressToHostAddress;
|
||||||
import org.jclouds.vcloud.VCloudAsyncClient;
|
import org.jclouds.vcloud.VCloudAsyncClient;
|
||||||
|
import org.jclouds.vcloud.domain.Task;
|
||||||
import org.jclouds.vcloud.domain.VDC;
|
import org.jclouds.vcloud.domain.VDC;
|
||||||
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
|
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
|
||||||
import org.jclouds.vcloud.functions.CatalogIdToUri;
|
import org.jclouds.vcloud.functions.CatalogIdToUri;
|
||||||
|
import org.jclouds.vcloud.functions.VAppIdToUri;
|
||||||
|
import org.jclouds.vcloud.options.CloneVAppOptions;
|
||||||
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
|
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
|
||||||
import org.jclouds.vcloud.terremark.binders.BindInternetServiceConfigurationToXmlPayload;
|
import org.jclouds.vcloud.terremark.binders.BindInternetServiceConfigurationToXmlPayload;
|
||||||
import org.jclouds.vcloud.terremark.binders.BindNodeConfigurationToXmlPayload;
|
import org.jclouds.vcloud.terremark.binders.BindNodeConfigurationToXmlPayload;
|
||||||
|
import org.jclouds.vcloud.terremark.binders.TerremarkBindCloneVAppParamsToXmlPayload;
|
||||||
import org.jclouds.vcloud.terremark.binders.TerremarkBindInstantiateVAppTemplateParamsToXmlPayload;
|
import org.jclouds.vcloud.terremark.binders.TerremarkBindInstantiateVAppTemplateParamsToXmlPayload;
|
||||||
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
||||||
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
||||||
|
@ -80,6 +85,7 @@ import org.jclouds.vcloud.terremark.xml.NodesHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler;
|
import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.TerremarkVAppHandler;
|
import org.jclouds.vcloud.terremark.xml.TerremarkVAppHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.TerremarkVDCHandler;
|
import org.jclouds.vcloud.terremark.xml.TerremarkVDCHandler;
|
||||||
|
import org.jclouds.vcloud.xml.TaskHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides access to VCloud resources via their REST API.
|
* Provides access to VCloud resources via their REST API.
|
||||||
|
@ -364,4 +370,15 @@ public interface TerremarkVCloudAsyncClient extends VCloudAsyncClient {
|
||||||
Future<? extends SortedSet<IpAddress>> getIpAddressesForNetwork(
|
Future<? extends SortedSet<IpAddress>> getIpAddressesForNetwork(
|
||||||
@PathParam("networkId") String networkId);
|
@PathParam("networkId") String networkId);
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
||||||
|
@Path("/vdc/{vDCId}/action/cloneVApp")
|
||||||
|
@Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
|
||||||
|
@Consumes(TASK_XML)
|
||||||
|
@XMLResponseParser(TaskHandler.class)
|
||||||
|
@MapBinder(TerremarkBindCloneVAppParamsToXmlPayload.class)
|
||||||
|
@Override
|
||||||
|
Future<? extends Task> cloneVAppInVDC(@PathParam("vDCId") String vDCId,
|
||||||
|
@MapPayloadParam("vApp") @ParamParser(VAppIdToUri.class) String vAppIdToClone,
|
||||||
|
@MapPayloadParam("newName") String newName, CloneVAppOptions... options);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.vcloud.terremark.binders;
|
||||||
|
|
||||||
|
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_NAMESPACE;
|
||||||
|
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_SCHEMA;
|
||||||
|
|
||||||
|
import javax.inject.Named;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import javax.xml.parsers.FactoryConfigurationError;
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
|
||||||
|
import org.jclouds.rest.binders.BindToStringPayload;
|
||||||
|
import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.jamesmurty.utils.XMLBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public class TerremarkBindCloneVAppParamsToXmlPayload extends BindCloneVAppParamsToXmlPayload {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public TerremarkBindCloneVAppParamsToXmlPayload(BindToStringPayload stringBinder,
|
||||||
|
@Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns,
|
||||||
|
@Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema) {
|
||||||
|
super(stringBinder, ns,schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected XMLBuilder buildRoot(String name, boolean deploy, boolean powerOn)
|
||||||
|
throws ParserConfigurationException, FactoryConfigurationError {
|
||||||
|
XMLBuilder rootBuilder = XMLBuilder.create("CloneVAppParamsType").a("name", name).a("deploy",
|
||||||
|
deploy+"").a("powerOn", powerOn+"").a("xmlns", ns).a("xmlns:xsi",
|
||||||
|
"http://www.w3.org/2001/XMLSchema-instance").a("xsi:schemaLocation",
|
||||||
|
ns + " " + schema);
|
||||||
|
return rootBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -212,7 +212,7 @@ public class TerremarkVCloudComputeClient {
|
||||||
if (services.size() == 0) {
|
if (services.size() == 0) {
|
||||||
logger.debug(">> deleting PublicIpAddress(%s) %s", address.getId(), address
|
logger.debug(">> deleting PublicIpAddress(%s) %s", address.getId(), address
|
||||||
.getAddress().getHostAddress());
|
.getAddress().getHostAddress());
|
||||||
tmClient.deleteInternetService(address.getId());
|
tmClient.deletePublicIp(address.getId());
|
||||||
logger.debug("<< deleted PublicIpAddress(%s)", address.getId());
|
logger.debug("<< deleted PublicIpAddress(%s)", address.getId());
|
||||||
continue IPADDRESS;
|
continue IPADDRESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,7 @@ import org.jclouds.vcloud.predicates.TaskSuccess;
|
||||||
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
||||||
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
||||||
import org.jclouds.vcloud.terremark.domain.InternetService;
|
import org.jclouds.vcloud.terremark.domain.InternetService;
|
||||||
|
import org.jclouds.vcloud.terremark.domain.InternetServiceConfiguration;
|
||||||
import org.jclouds.vcloud.terremark.domain.IpAddress;
|
import org.jclouds.vcloud.terremark.domain.IpAddress;
|
||||||
import org.jclouds.vcloud.terremark.domain.Node;
|
import org.jclouds.vcloud.terremark.domain.Node;
|
||||||
import org.jclouds.vcloud.terremark.domain.NodeConfiguration;
|
import org.jclouds.vcloud.terremark.domain.NodeConfiguration;
|
||||||
|
@ -237,10 +238,20 @@ public class TerremarkVCloudClientLiveTest extends VCloudClientLiveTest {
|
||||||
TimeoutException, IOException {
|
TimeoutException, IOException {
|
||||||
is = tmClient.addInternetServiceToVDC(tmClient.getDefaultVDC().getId(), "SSH", Protocol.TCP,
|
is = tmClient.addInternetServiceToVDC(tmClient.getDefaultVDC().getId(), "SSH", Protocol.TCP,
|
||||||
22);
|
22);
|
||||||
|
publicIp = is.getPublicIpAddress().getAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
// throws 500 errors
|
// 400 errors
|
||||||
@Test(enabled = false, dependsOnMethods = { "testInstantiateAndPowerOn" })
|
@Test(dependsOnMethods = { "testAddInternetService" }, expectedExceptions=HttpResponseException.class)
|
||||||
|
public void testConfigureInternetService() throws InterruptedException, ExecutionException,
|
||||||
|
TimeoutException, IOException {
|
||||||
|
is = tmClient.configureInternetService(is.getId(), new InternetServiceConfiguration()
|
||||||
|
.changeDescriptionTo("holy cow"));
|
||||||
|
assertEquals(is.getDescription(), "holy cow");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 500 errors
|
||||||
|
@Test(dependsOnMethods = { "testInstantiateAndPowerOn" }, expectedExceptions=HttpResponseException.class)
|
||||||
public void testCloneVApp() {
|
public void testCloneVApp() {
|
||||||
// lookup the id of the datacenter you are deploying into
|
// lookup the id of the datacenter you are deploying into
|
||||||
String vDCId = tmClient.getDefaultVDC().getId();
|
String vDCId = tmClient.getDefaultVDC().getId();
|
||||||
|
@ -273,12 +284,11 @@ public class TerremarkVCloudClientLiveTest extends VCloudClientLiveTest {
|
||||||
IOException {
|
IOException {
|
||||||
node = tmClient.addNode(is.getId(), Iterables.getLast(vApp.getNetworkToAddresses().values()),
|
node = tmClient.addNode(is.getId(), Iterables.getLast(vApp.getNetworkToAddresses().values()),
|
||||||
vApp.getName() + "-SSH", 22);
|
vApp.getName() + "-SSH", 22);
|
||||||
|
|
||||||
publicIp = is.getPublicIpAddress().getAddress();
|
|
||||||
doCheckPass(publicIp);
|
doCheckPass(publicIp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(dependsOnMethods = { "testPublicIp" })
|
// 400 errors
|
||||||
|
@Test(dependsOnMethods = { "testPublicIp" }, expectedExceptions=HttpResponseException.class)
|
||||||
public void testConfigureNode() throws InterruptedException, ExecutionException,
|
public void testConfigureNode() throws InterruptedException, ExecutionException,
|
||||||
TimeoutException, IOException {
|
TimeoutException, IOException {
|
||||||
node = tmClient.configureNode(node.getId(), new NodeConfiguration()
|
node = tmClient.configureNode(node.getId(), new NodeConfiguration()
|
||||||
|
|
|
@ -119,11 +119,7 @@ public class TerremarkVCloudComputeClientLiveTest {
|
||||||
|
|
||||||
@Test(dependsOnMethods = "testGetAnyPrivateAddress")
|
@Test(dependsOnMethods = "testGetAnyPrivateAddress")
|
||||||
public void testSshLoadBalanceIp() {
|
public void testSshLoadBalanceIp() {
|
||||||
// bug creating more than one internet service returns 503 or 500
|
InetAddress publicIp = client.createPublicAddressMappedToPorts(tmClient.getVApp(id), 22, 80, 8080);
|
||||||
// InetAddress publicIp = client.createPublicAddressMappedToPorts(tmClient.getVApp(id), 22,
|
|
||||||
// 80,
|
|
||||||
// 8080);
|
|
||||||
InetAddress publicIp = client.createPublicAddressMappedToPorts(tmClient.getVApp(id), 22);
|
|
||||||
assert addressTester.apply(publicIp);
|
assert addressTester.apply(publicIp);
|
||||||
// client.exec(publicIp, "uname -a");
|
// client.exec(publicIp, "uname -a");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue