mirror of https://github.com/apache/jclouds.git
fixed pattern to id windows 2008
This commit is contained in:
parent
b351223f5e
commit
c8d4008c98
|
@ -63,7 +63,7 @@ public class VCloudComputeUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CIMOperatingSystem toComputeOs(org.jclouds.vcloud.domain.ovf.OperatingSystemSection os) {
|
public static CIMOperatingSystem toComputeOs(org.jclouds.vcloud.domain.ovf.OperatingSystemSection os) {
|
||||||
return new CIMOperatingSystem(CIMOperatingSystem.OSType.fromValue(os.getId()), null, null, os.getDescription());
|
return new CIMOperatingSystem(CIMOperatingSystem.OSType.fromValue(os.getId()), "", null, os.getDescription());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Credentials getCredentialsFrom(VApp vApp) {
|
public static Credentials getCredentialsFrom(VApp vApp) {
|
||||||
|
|
|
@ -26,6 +26,7 @@ import org.jclouds.compute.config.BindComputeStrategiesByClass;
|
||||||
import org.jclouds.compute.config.BindComputeSuppliersByClass;
|
import org.jclouds.compute.config.BindComputeSuppliersByClass;
|
||||||
import org.jclouds.compute.domain.Image;
|
import org.jclouds.compute.domain.Image;
|
||||||
import org.jclouds.compute.domain.NodeMetadata;
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
|
import org.jclouds.compute.domain.OperatingSystem;
|
||||||
import org.jclouds.compute.internal.ComputeServiceContextImpl;
|
import org.jclouds.compute.internal.ComputeServiceContextImpl;
|
||||||
import org.jclouds.rest.RestContext;
|
import org.jclouds.rest.RestContext;
|
||||||
import org.jclouds.rest.internal.RestContextImpl;
|
import org.jclouds.rest.internal.RestContextImpl;
|
||||||
|
@ -33,6 +34,7 @@ import org.jclouds.vcloud.VCloudExpressClient;
|
||||||
import org.jclouds.vcloud.compute.CommonVCloudComputeClient;
|
import org.jclouds.vcloud.compute.CommonVCloudComputeClient;
|
||||||
import org.jclouds.vcloud.compute.VCloudExpressComputeClient;
|
import org.jclouds.vcloud.compute.VCloudExpressComputeClient;
|
||||||
import org.jclouds.vcloud.compute.functions.ImagesInVCloudExpressOrg;
|
import org.jclouds.vcloud.compute.functions.ImagesInVCloudExpressOrg;
|
||||||
|
import org.jclouds.vcloud.compute.functions.ParseOsFromVAppTemplateName;
|
||||||
import org.jclouds.vcloud.compute.functions.VCloudExpressVAppToNodeMetadata;
|
import org.jclouds.vcloud.compute.functions.VCloudExpressVAppToNodeMetadata;
|
||||||
import org.jclouds.vcloud.compute.internal.VCloudExpressComputeClientImpl;
|
import org.jclouds.vcloud.compute.internal.VCloudExpressComputeClientImpl;
|
||||||
import org.jclouds.vcloud.domain.Org;
|
import org.jclouds.vcloud.domain.Org;
|
||||||
|
@ -64,6 +66,8 @@ public class VCloudExpressComputeServiceContextModule extends CommonVCloudComput
|
||||||
bind(new TypeLiteral<Function<Org, Iterable<? extends Image>>>() {
|
bind(new TypeLiteral<Function<Org, Iterable<? extends Image>>>() {
|
||||||
}).to(new TypeLiteral<ImagesInVCloudExpressOrg>() {
|
}).to(new TypeLiteral<ImagesInVCloudExpressOrg>() {
|
||||||
});
|
});
|
||||||
|
bind(new TypeLiteral<Function<String, OperatingSystem>>() {
|
||||||
|
}).to(ParseOsFromVAppTemplateName.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void bindVAppConverter() {
|
protected void bindVAppConverter() {
|
||||||
|
|
|
@ -51,19 +51,33 @@ import org.jclouds.vcloud.terremark.options.AddNodeOptions;
|
||||||
*/
|
*/
|
||||||
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
|
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
|
||||||
public interface TerremarkVCloudClient extends VCloudExpressClient {
|
public interface TerremarkVCloudClient extends VCloudExpressClient {
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
TerremarkCatalogItem getCatalogItem(URI catalogItem);
|
TerremarkCatalogItem getCatalogItem(URI catalogItem);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
TerremarkVDC getVDC(URI catalogItem);
|
TerremarkVDC getVDC(URI catalogItem);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
TerremarkCatalogItem findCatalogItemInOrgCatalogNamed(String orgName, String catalogName, String itemName);
|
TerremarkCatalogItem findCatalogItemInOrgCatalogNamed(String orgName, String catalogName, String itemName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
TerremarkOrg getOrg(URI orgId);
|
TerremarkOrg getOrg(URI orgId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
TerremarkOrg findOrgNamed(String orgName);
|
TerremarkOrg findOrgNamed(String orgName);
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ import org.jclouds.http.HttpResponse;
|
||||||
import org.jclouds.http.HttpResponseException;
|
import org.jclouds.http.HttpResponseException;
|
||||||
import org.jclouds.logging.Logger;
|
import org.jclouds.logging.Logger;
|
||||||
import org.jclouds.rest.AuthorizationException;
|
import org.jclouds.rest.AuthorizationException;
|
||||||
|
import org.jclouds.rest.InsufficientResourcesException;
|
||||||
import org.jclouds.rest.ResourceNotFoundException;
|
import org.jclouds.rest.ResourceNotFoundException;
|
||||||
import org.jclouds.util.Strings2;
|
import org.jclouds.util.Strings2;
|
||||||
|
|
||||||
|
@ -61,6 +62,9 @@ public class ParseTerremarkVCloudErrorFromHttpResponse implements HttpErrorHandl
|
||||||
|| (response.getMessage().indexOf("because it is already powered off") != -1)
|
|| (response.getMessage().indexOf("because it is already powered off") != -1)
|
||||||
|| (response.getMessage().indexOf("exists") != -1)))
|
|| (response.getMessage().indexOf("exists") != -1)))
|
||||||
exception = new IllegalStateException(response.getMessage(), exception);
|
exception = new IllegalStateException(response.getMessage(), exception);
|
||||||
|
else if (response.getMessage() != null
|
||||||
|
&& ((response.getMessage().indexOf("There are no additional Public IPs available") != -1)))
|
||||||
|
exception = new InsufficientResourcesException(response.getMessage(), exception);
|
||||||
else
|
else
|
||||||
switch (response.getStatusCode()) {
|
switch (response.getStatusCode()) {
|
||||||
case 400:
|
case 400:
|
||||||
|
|
|
@ -220,16 +220,13 @@ public abstract class TerremarkClientLiveTest extends VCloudExpressClientLiveTes
|
||||||
|
|
||||||
abstract TerremarkInstantiateVAppTemplateOptions createInstantiateOptions();
|
abstract TerremarkInstantiateVAppTemplateOptions createInstantiateOptions();
|
||||||
|
|
||||||
protected abstract Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(URI vdc);
|
protected abstract Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(VCloudExpressVApp vApp);
|
||||||
|
|
||||||
@Test
|
@Test(enabled = true, dependsOnMethods = "testInstantiateAndPowerOn")
|
||||||
public void testAddInternetService() throws InterruptedException, ExecutionException, TimeoutException, IOException {
|
public void testAddInternetService() throws InterruptedException, ExecutionException, TimeoutException, IOException {
|
||||||
|
Entry<InternetService, PublicIpAddress> entry = getNewInternetServiceAndIpForSSH(vApp);
|
||||||
Entry<InternetService, PublicIpAddress> entry = getNewInternetServiceAndIpForSSH(tmClient.findVDCInOrgNamed(null,
|
|
||||||
null).getHref());
|
|
||||||
is = entry.getKey();
|
is = entry.getKey();
|
||||||
publicIp = entry.getValue().getAddress();
|
publicIp = entry.getValue().getAddress();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(enabled = true, dependsOnMethods = "testInstantiateAndPowerOn")
|
@Test(enabled = true, dependsOnMethods = "testInstantiateAndPowerOn")
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.net.URI;
|
||||||
import org.jclouds.http.BaseHttpErrorHandlerTest;
|
import org.jclouds.http.BaseHttpErrorHandlerTest;
|
||||||
import org.jclouds.http.HttpErrorHandler;
|
import org.jclouds.http.HttpErrorHandler;
|
||||||
import org.jclouds.rest.AuthorizationException;
|
import org.jclouds.rest.AuthorizationException;
|
||||||
|
import org.jclouds.rest.InsufficientResourcesException;
|
||||||
import org.jclouds.rest.ResourceNotFoundException;
|
import org.jclouds.rest.ResourceNotFoundException;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
@ -71,6 +72,12 @@ public class ParseTerremarkVCloudErrorFromHttpResponseTest extends BaseHttpError
|
||||||
"", "", AuthorizationException.class);
|
"", "", AuthorizationException.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test403SetsInsufficientResourcesException() {
|
||||||
|
assertCodeMakes("GET", URI.create("https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32"), 403,
|
||||||
|
"There are no additional Public IPs available", "", InsufficientResourcesException.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test501SetsNotImplementedMakesUnsupportedOperationException() {
|
public void test501SetsNotImplementedMakesUnsupportedOperationException() {
|
||||||
assertCodeMakes("POST", URI
|
assertCodeMakes("POST", URI
|
||||||
|
@ -87,11 +94,12 @@ public class ParseTerremarkVCloudErrorFromHttpResponseTest extends BaseHttpError
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testKeyAlreadyExistsSetsIllegalStateException() {
|
public void testKeyAlreadyExistsSetsIllegalStateException() {
|
||||||
assertCodeMakes("POST", URI.create("https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/extensions/org/48/keys"), 400,
|
assertCodeMakes("POST", URI
|
||||||
|
.create("https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/extensions/org/48/keys"), 400,
|
||||||
"Security key with name livetest exists.", "Security key with name livetest exists.",
|
"Security key with name livetest exists.", "Security key with name livetest exists.",
|
||||||
IllegalStateException.class);
|
IllegalStateException.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Class<? extends HttpErrorHandler> getHandlerClass() {
|
protected Class<? extends HttpErrorHandler> getHandlerClass() {
|
||||||
return ParseTerremarkVCloudErrorFromHttpResponse.class;
|
return ParseTerremarkVCloudErrorFromHttpResponse.class;
|
||||||
|
|
|
@ -25,7 +25,6 @@ import static org.jclouds.vcloud.util.Utils.putReferenceType;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.SortedMap;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
@ -56,7 +55,7 @@ public class CatalogHandler extends ParseSax.HandlerWithResult<Catalog> {
|
||||||
private StringBuilder currentText = new StringBuilder();
|
private StringBuilder currentText = new StringBuilder();
|
||||||
|
|
||||||
private ReferenceType catalog;
|
private ReferenceType catalog;
|
||||||
private SortedMap<String, ReferenceType> contents = Maps.newTreeMap();
|
private Map<String, ReferenceType> contents = Maps.newLinkedHashMap();
|
||||||
protected List<Task> tasks = Lists.newArrayList();
|
protected List<Task> tasks = Lists.newArrayList();
|
||||||
private String description;
|
private String description;
|
||||||
private ReferenceType org;
|
private ReferenceType org;
|
||||||
|
|
|
@ -58,7 +58,7 @@ public interface ComputeServiceConstants {
|
||||||
public static class ReferenceData {
|
public static class ReferenceData {
|
||||||
@Inject(optional = true)
|
@Inject(optional = true)
|
||||||
@Named(PROPERTY_OS_VERSION_MAP_JSON)
|
@Named(PROPERTY_OS_VERSION_MAP_JSON)
|
||||||
public String osVersionMapJson = "{\"centos\":{\"5.2\":\"5.2\",\"5.3\":\"5.3\",\"5.4\":\"5.4\",\"5.5\":\"5.5\"},\"rhel\":{\"5.2\":\"5.2\",\"5.3\":\"5.3\",\"5.4\":\"5.4\",\"5.5\":\"5.5\"},\"ubuntu\":{\"hardy\":\"8.04\",\"karmic\":\"9.10\",\"lucid\":\"10.04\",\"maverick\":\"10.10\",\"natty\":\"11.04\"},\"windows\":{\"2003\":\"2003\",\"2003 Standard\":\"2003\",\"2008\":\"2008\",\"2008 Web\":\"2008\",\"Server 2008\":\"2008\",\"2008 R2\":\"2008 R2\",\"Server 2008 R2\":\"2008 R2\",\"2008 Server R2\":\"2008 R2\",\"2008 SP2\":\"2008 SP2\",\"Server 2008 SP2\":\"2008 SP2\"}}";
|
public String osVersionMapJson = "{\"centos\":{\"\":\"\",\"5\":\"5.0\",\"5.2\":\"5.2\",\"5.3\":\"5.3\",\"5.4\":\"5.4\",\"5.5\":\"5.5\"},\"rhel\":{\"\":\"\",\"5\":\"5.0\",\"5.2\":\"5.2\",\"5.3\":\"5.3\",\"5.4\":\"5.4\",\"5.5\":\"5.5\"},\"solaris\":{\"\":\"\",\"10\":\"10\"},\"ubuntu\":{\"\":\"\",\"hardy\":\"8.04\",\"karmic\":\"9.10\",\"lucid\":\"10.04\",\"maverick\":\"10.10\",\"natty\":\"11.04\"},\"windows\":{\"\":\"\",\"2003\":\"2003\",\"2003 Standard\":\"2003\",\"2003 R2\":\"2003 R2\",\"2008\":\"2008\",\"2008 Web\":\"2008\",\"2008 Server\":\"2008\",\"Server 2008\":\"2008\",\"2008 R2\":\"2008 R2\",\"Server 2008 R2\":\"2008 R2\",\"2008 Server R2\":\"2008 R2\",\"2008 SP2\":\"2008 SP2\",\"Server 2008 SP2\":\"2008 SP2\"}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
|
|
|
@ -201,7 +201,7 @@ public class ComputeServiceUtils {
|
||||||
"node does not have IP addresses configured: " + node);
|
"node does not have IP addresses configured: " + node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String parseVersionOrReturnEmptyString(org.jclouds.compute.domain.OsFamily family, final String in,
|
public static String parseVersionOrReturnEmptyString(org.jclouds.compute.domain.OsFamily family, String in,
|
||||||
Map<OsFamily, Map<String, String>> osVersionMap) {
|
Map<OsFamily, Map<String, String>> osVersionMap) {
|
||||||
if (osVersionMap.containsKey(family)) {
|
if (osVersionMap.containsKey(family)) {
|
||||||
if (osVersionMap.get(family).containsKey(in))
|
if (osVersionMap.get(family).containsKey(in))
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<test.trmk-ecloud.endpoint>https://services.enterprisecloud.terremark.com/api</test.trmk-ecloud.endpoint>
|
<test.trmk-ecloud.endpoint>https://services.enterprisecloud.terremark.com/api</test.trmk-ecloud.endpoint>
|
||||||
<test.trmk-ecloud.apiversion>0.8b-ext2.6</test.trmk-ecloud.apiversion>
|
<test.trmk-ecloud.apiversion>0.8b-ext2.7</test.trmk-ecloud.apiversion>
|
||||||
<test.trmk-ecloud.identity>FIXME</test.trmk-ecloud.identity>
|
<test.trmk-ecloud.identity>FIXME</test.trmk-ecloud.identity>
|
||||||
<test.trmk-ecloud.credential>FIXME</test.trmk-ecloud.credential>
|
<test.trmk-ecloud.credential>FIXME</test.trmk-ecloud.credential>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
|
@ -44,6 +44,8 @@ public interface TerremarkECloudClient extends TerremarkVCloudClient {
|
||||||
*
|
*
|
||||||
* @param vDCId
|
* @param vDCId
|
||||||
* @return
|
* @return
|
||||||
|
* @throws org.jclouds.rest.InsufficientResourcesException
|
||||||
|
* if there's no additional ips available
|
||||||
*/
|
*/
|
||||||
PublicIpAddress activatePublicIpInVDC(URI vDCId);
|
PublicIpAddress activatePublicIpInVDC(URI vDCId);
|
||||||
|
|
||||||
|
|
|
@ -36,10 +36,10 @@ public class TerremarkECloudPropertiesBuilder extends TerremarkVCloudPropertiesB
|
||||||
@Override
|
@Override
|
||||||
protected Properties defaultProperties() {
|
protected Properties defaultProperties() {
|
||||||
Properties properties = super.defaultProperties();
|
Properties properties = super.defaultProperties();
|
||||||
properties.setProperty(PROPERTY_API_VERSION, "0.8b-ext2.6");
|
properties.setProperty(PROPERTY_API_VERSION, "0.8b-ext2.7");
|
||||||
properties.setProperty(PROPERTY_ENDPOINT, "https://services.enterprisecloud.terremark.com/api");
|
properties.setProperty(PROPERTY_ENDPOINT, "https://services.enterprisecloud.terremark.com/api");
|
||||||
properties.setProperty(PROPERTY_TERREMARK_EXTENSION_NAME, "eCloudExtensions");
|
properties.setProperty(PROPERTY_TERREMARK_EXTENSION_NAME, "eCloudExtensions");
|
||||||
properties.setProperty(PROPERTY_TERREMARK_EXTENSION_VERSION, "2.6");
|
properties.setProperty(PROPERTY_TERREMARK_EXTENSION_VERSION, "2.7");
|
||||||
// for some reason the centos template is very slow to deploy
|
// for some reason the centos template is very slow to deploy
|
||||||
properties.setProperty(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED, 720l * 1000l + "");
|
properties.setProperty(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED, 720l * 1000l + "");
|
||||||
return properties;
|
return properties;
|
||||||
|
|
|
@ -22,6 +22,8 @@ package org.jclouds.vcloud.terremark.compute.config;
|
||||||
import static org.jclouds.compute.domain.OsFamily.CENTOS;
|
import static org.jclouds.compute.domain.OsFamily.CENTOS;
|
||||||
|
|
||||||
import org.jclouds.compute.domain.TemplateBuilder;
|
import org.jclouds.compute.domain.TemplateBuilder;
|
||||||
|
import org.jclouds.vcloud.compute.functions.ParseOsFromVAppTemplateName;
|
||||||
|
import org.jclouds.vcloud.terremark.compute.functions.TerremarkECloudParseOsFromVAppTemplateName;
|
||||||
import org.jclouds.vcloud.terremark.suppliers.InternetServiceAndPublicIpAddressSupplier;
|
import org.jclouds.vcloud.terremark.suppliers.InternetServiceAndPublicIpAddressSupplier;
|
||||||
import org.jclouds.vcloud.terremark.suppliers.TerremarkECloudInternetServiceAndPublicIpAddressSupplier;
|
import org.jclouds.vcloud.terremark.suppliers.TerremarkECloudInternetServiceAndPublicIpAddressSupplier;
|
||||||
|
|
||||||
|
@ -32,6 +34,14 @@ import com.google.inject.Injector;
|
||||||
*/
|
*/
|
||||||
public class TerremarkECloudComputeServiceContextModule extends TerremarkVCloudComputeServiceContextModule {
|
public class TerremarkECloudComputeServiceContextModule extends TerremarkVCloudComputeServiceContextModule {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bind(InternetServiceAndPublicIpAddressSupplier.class).to(
|
||||||
|
TerremarkECloudInternetServiceAndPublicIpAddressSupplier.class);
|
||||||
|
bind(ParseOsFromVAppTemplateName.class).to(TerremarkECloudParseOsFromVAppTemplateName.class);
|
||||||
|
super.configure();
|
||||||
|
}
|
||||||
|
|
||||||
// as of 6-nov-2010 only centos has ssh key injection in the images.
|
// as of 6-nov-2010 only centos has ssh key injection in the images.
|
||||||
// ssh key injection in ubuntu is targeted for dec-2010 or sooner
|
// ssh key injection in ubuntu is targeted for dec-2010 or sooner
|
||||||
@Override
|
@Override
|
||||||
|
@ -39,10 +49,4 @@ public class TerremarkECloudComputeServiceContextModule extends TerremarkVCloudC
|
||||||
return template.osFamily(CENTOS).os64Bit(true);
|
return template.osFamily(CENTOS).os64Bit(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void configure() {
|
|
||||||
bind(InternetServiceAndPublicIpAddressSupplier.class).to(
|
|
||||||
TerremarkECloudInternetServiceAndPublicIpAddressSupplier.class);
|
|
||||||
super.configure();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,14 +31,13 @@ import javax.inject.Named;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||||
import org.jclouds.http.HttpResponseException;
|
|
||||||
import org.jclouds.logging.Logger;
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rest.InsufficientResourcesException;
|
||||||
import org.jclouds.vcloud.domain.VCloudExpressVApp;
|
import org.jclouds.vcloud.domain.VCloudExpressVApp;
|
||||||
import org.jclouds.vcloud.terremark.TerremarkECloudClient;
|
import org.jclouds.vcloud.terremark.TerremarkECloudClient;
|
||||||
import org.jclouds.vcloud.terremark.domain.InternetService;
|
import org.jclouds.vcloud.terremark.domain.InternetService;
|
||||||
import org.jclouds.vcloud.terremark.domain.Protocol;
|
import org.jclouds.vcloud.terremark.domain.Protocol;
|
||||||
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
||||||
import org.jclouds.vcloud.terremark.suppliers.InternetServiceAndPublicIpAddressSupplier;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
|
@ -64,28 +63,22 @@ public class TerremarkECloudInternetServiceAndPublicIpAddressSupplier implements
|
||||||
public Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIp(VCloudExpressVApp vApp, int port,
|
public Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIp(VCloudExpressVApp vApp, int port,
|
||||||
Protocol protocol) {
|
Protocol protocol) {
|
||||||
logger.debug(">> creating InternetService in vDC %s:%s:%d", vApp.getVDC().getName(), protocol, port);
|
logger.debug(">> creating InternetService in vDC %s:%s:%d", vApp.getVDC().getName(), protocol, port);
|
||||||
// http://support.theenterprisecloud.com/kb/default.asp?id=706&Lang=1&SID=
|
|
||||||
// response with a 500 error code means we should look for an existing public ip to
|
|
||||||
// use
|
|
||||||
InternetService is = null;
|
InternetService is = null;
|
||||||
PublicIpAddress ip = null;
|
PublicIpAddress ip = null;
|
||||||
try {
|
try {
|
||||||
ip = client.activatePublicIpInVDC(vApp.getVDC().getHref());
|
ip = client.activatePublicIpInVDC(vApp.getVDC().getHref());
|
||||||
} catch (HttpResponseException e) {
|
} catch (InsufficientResourcesException e) {
|
||||||
if (e.getResponse().getStatusCode() == 500) {
|
logger.warn(">> no more ip addresses available, looking for one to re-use");
|
||||||
logger.warn(">> no more ip addresses available, looking for one to re-use");
|
for (PublicIpAddress existingIp : client.getPublicIpsAssociatedWithVDC(vApp.getVDC().getHref())) {
|
||||||
for (PublicIpAddress existingIp : client.getPublicIpsAssociatedWithVDC(vApp.getVDC().getHref())) {
|
Set<InternetService> services = client.getInternetServicesOnPublicIp(existingIp.getId());
|
||||||
Set<InternetService> services = client.getInternetServicesOnPublicIp(existingIp.getId());
|
if (services.size() == 0) {
|
||||||
if (services.size() == 0) {
|
ip = existingIp;
|
||||||
ip = existingIp;
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (ip == null)
|
|
||||||
throw e;
|
|
||||||
} else {
|
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
|
if (ip == null)
|
||||||
|
throw e;
|
||||||
|
|
||||||
}
|
}
|
||||||
is = client.addInternetServiceToExistingIp(ip.getId(), vApp.getName() + "-" + port, protocol, port,
|
is = client.addInternetServiceToExistingIp(ip.getId(), vApp.getName() + "-" + port, protocol, port,
|
||||||
withDescription(String.format("port %d access to serverId: %s name: %s", port, vApp.getName(), vApp
|
withDescription(String.format("port %d access to serverId: %s name: %s", port, vApp.getName(), vApp
|
||||||
|
|
|
@ -285,7 +285,7 @@ public class TerremarkECloudAsyncClientTest extends RestClientTest<TerremarkEClo
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.ecloud.internetService+xml\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.ecloud.internetService+xml\n");
|
||||||
assertPayloadEquals(request, Strings2.toStringAndClose(
|
assertPayloadEquals(request, Strings2.toStringAndClose(
|
||||||
getClass().getResourceAsStream("/terremark/CreateInternetService-test2.xml")).replace(
|
getClass().getResourceAsStream("/terremark/CreateInternetService-test2.xml")).replace(
|
||||||
"vCloudExpressExtensions-1.6", "eCloudExtensions-2.6"),
|
"vCloudExpressExtensions-1.6", "eCloudExtensions-2.7"),
|
||||||
"application/vnd.tmrk.ecloud.internetService+xml", false);
|
"application/vnd.tmrk.ecloud.internetService+xml", false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, ParseSax.class);
|
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||||
|
@ -305,7 +305,7 @@ public class TerremarkECloudAsyncClientTest extends RestClientTest<TerremarkEClo
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.ecloud.internetService+xml\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.ecloud.internetService+xml\n");
|
||||||
assertPayloadEquals(request, Strings2.toStringAndClose(
|
assertPayloadEquals(request, Strings2.toStringAndClose(
|
||||||
getClass().getResourceAsStream("/terremark/CreateInternetService-options-test.xml")).replace(
|
getClass().getResourceAsStream("/terremark/CreateInternetService-options-test.xml")).replace(
|
||||||
"vCloudExpressExtensions-1.6", "eCloudExtensions-2.6"),
|
"vCloudExpressExtensions-1.6", "eCloudExtensions-2.7"),
|
||||||
"application/vnd.tmrk.ecloud.internetService+xml", false);
|
"application/vnd.tmrk.ecloud.internetService+xml", false);
|
||||||
assertResponseParserClassEquals(method, request, ParseSax.class);
|
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||||
assertSaxResponseParserClassEquals(method, InternetServiceHandler.class);
|
assertSaxResponseParserClassEquals(method, InternetServiceHandler.class);
|
||||||
|
@ -324,7 +324,7 @@ public class TerremarkECloudAsyncClientTest extends RestClientTest<TerremarkEClo
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.vCloud.nodeService+xml\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.vCloud.nodeService+xml\n");
|
||||||
assertPayloadEquals(request, Strings2.toStringAndClose(
|
assertPayloadEquals(request, Strings2.toStringAndClose(
|
||||||
getClass().getResourceAsStream("/terremark/CreateNodeService-test2.xml")).replace(
|
getClass().getResourceAsStream("/terremark/CreateNodeService-test2.xml")).replace(
|
||||||
"vCloudExpressExtensions-1.6", "eCloudExtensions-2.6"), "application/vnd.tmrk.vCloud.nodeService+xml",
|
"vCloudExpressExtensions-1.6", "eCloudExtensions-2.7"), "application/vnd.tmrk.vCloud.nodeService+xml",
|
||||||
false);
|
false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, ParseSax.class);
|
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||||
|
@ -345,7 +345,7 @@ public class TerremarkECloudAsyncClientTest extends RestClientTest<TerremarkEClo
|
||||||
|
|
||||||
assertPayloadEquals(request, Strings2.toStringAndClose(
|
assertPayloadEquals(request, Strings2.toStringAndClose(
|
||||||
getClass().getResourceAsStream("/terremark/CreateNodeService-options-test.xml")).replace(
|
getClass().getResourceAsStream("/terremark/CreateNodeService-options-test.xml")).replace(
|
||||||
"vCloudExpressExtensions-1.6", "eCloudExtensions-2.6"), "application/vnd.tmrk.vCloud.nodeService+xml",
|
"vCloudExpressExtensions-1.6", "eCloudExtensions-2.7"), "application/vnd.tmrk.vCloud.nodeService+xml",
|
||||||
false);
|
false);
|
||||||
assertResponseParserClassEquals(method, request, ParseSax.class);
|
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||||
assertSaxResponseParserClassEquals(method, NodeHandler.class);
|
assertSaxResponseParserClassEquals(method, NodeHandler.class);
|
||||||
|
@ -380,7 +380,7 @@ public class TerremarkECloudAsyncClientTest extends RestClientTest<TerremarkEClo
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.vCloud.nodeService+xml\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.vCloud.nodeService+xml\n");
|
||||||
assertPayloadEquals(
|
assertPayloadEquals(
|
||||||
request,
|
request,
|
||||||
"<NodeService xmlns=\"urn:tmrk:eCloudExtensions-2.6\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Name>name</Name><Enabled>true</Enabled><Description>eggs</Description></NodeService>",
|
"<NodeService xmlns=\"urn:tmrk:eCloudExtensions-2.7\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Name>name</Name><Enabled>true</Enabled><Description>eggs</Description></NodeService>",
|
||||||
"application/vnd.tmrk.vCloud.nodeService+xml", false);
|
"application/vnd.tmrk.vCloud.nodeService+xml", false);
|
||||||
assertResponseParserClassEquals(method, request, ParseSax.class);
|
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||||
assertSaxResponseParserClassEquals(method, NodeHandler.class);
|
assertSaxResponseParserClassEquals(method, NodeHandler.class);
|
||||||
|
@ -399,7 +399,7 @@ public class TerremarkECloudAsyncClientTest extends RestClientTest<TerremarkEClo
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.vCloud.nodeService+xml\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.tmrk.vCloud.nodeService+xml\n");
|
||||||
assertPayloadEquals(
|
assertPayloadEquals(
|
||||||
request,
|
request,
|
||||||
"<NodeService xmlns=\"urn:tmrk:eCloudExtensions-2.6\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Name>name</Name><Enabled>true</Enabled></NodeService>",
|
"<NodeService xmlns=\"urn:tmrk:eCloudExtensions-2.7\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Name>name</Name><Enabled>true</Enabled></NodeService>",
|
||||||
"application/vnd.tmrk.vCloud.nodeService+xml", false);
|
"application/vnd.tmrk.vCloud.nodeService+xml", false);
|
||||||
assertResponseParserClassEquals(method, request, ParseSax.class);
|
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||||
assertSaxResponseParserClassEquals(method, NodeHandler.class);
|
assertSaxResponseParserClassEquals(method, NodeHandler.class);
|
||||||
|
|
|
@ -21,34 +21,32 @@ package org.jclouds.vcloud.terremark;
|
||||||
|
|
||||||
import static org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTemplateOptions.Builder.processorCount;
|
import static org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTemplateOptions.Builder.processorCount;
|
||||||
|
|
||||||
import java.net.URI;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.jclouds.domain.Credentials;
|
import org.jclouds.domain.Credentials;
|
||||||
import org.jclouds.net.IPSocket;
|
import org.jclouds.net.IPSocket;
|
||||||
import org.jclouds.ssh.SshClient;
|
import org.jclouds.ssh.SshClient;
|
||||||
|
import org.jclouds.vcloud.domain.VCloudExpressVApp;
|
||||||
import org.jclouds.vcloud.terremark.domain.InternetService;
|
import org.jclouds.vcloud.terremark.domain.InternetService;
|
||||||
import org.jclouds.vcloud.terremark.domain.Protocol;
|
import org.jclouds.vcloud.terremark.domain.Protocol;
|
||||||
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
||||||
import org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTemplateOptions;
|
import org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTemplateOptions;
|
||||||
|
import org.jclouds.vcloud.terremark.suppliers.TerremarkECloudInternetServiceAndPublicIpAddressSupplier;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests behavior of {@code TerremarkVCloudClient}
|
* Tests behavior of {@code TerremarkVCloudClient}
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@Test(groups = "live", enabled = false, sequential = true)
|
@Test(groups = "live", enabled = true, sequential = true)
|
||||||
public class TerremarkECloudClientLiveTestDisabled extends TerremarkClientLiveTest {
|
public class TerremarkECloudClientLiveTestDisabled extends TerremarkClientLiveTest {
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
void setProvider() {
|
void setProvider() {
|
||||||
this.provider = "trmk-ecloud";
|
this.provider = "trmk-ecloud";
|
||||||
this.itemName = "Ubuntu 8.04 LTS (x86)";
|
this.itemName = "Ubuntu 8.04 LTS (x86)";
|
||||||
|
expectedOs = "Ubuntu Linux (32-bit)";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -62,13 +60,9 @@ public class TerremarkECloudClientLiveTestDisabled extends TerremarkClientLiveTe
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(URI vdc) {
|
protected Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(VCloudExpressVApp vApp) {
|
||||||
PublicIpAddress ip = TerremarkECloudClient.class.cast(tmClient).activatePublicIpInVDC(
|
return new TerremarkECloudInternetServiceAndPublicIpAddressSupplier(TerremarkECloudClient.class.cast(tmClient))
|
||||||
tmClient.findVDCInOrgNamed(null, null).getHref());
|
.getNewInternetServiceAndIp(vApp, 22, Protocol.TCP);
|
||||||
InternetService is = tmClient.addInternetServiceToExistingIp(ip.getId(), "SSH", Protocol.TCP, 22);
|
|
||||||
Map<InternetService, PublicIpAddress> result = ImmutableMap.<InternetService, PublicIpAddress> of(is, ip);
|
|
||||||
Entry<InternetService, PublicIpAddress> entry = Iterables.getOnlyElement(result.entrySet());
|
|
||||||
return entry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,8 +23,6 @@ import static org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTempl
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
import static org.testng.Assert.assertNotNull;
|
import static org.testng.Assert.assertNotNull;
|
||||||
|
|
||||||
import java.net.URI;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
@ -33,18 +31,17 @@ import java.util.concurrent.TimeoutException;
|
||||||
import org.jclouds.domain.Credentials;
|
import org.jclouds.domain.Credentials;
|
||||||
import org.jclouds.net.IPSocket;
|
import org.jclouds.net.IPSocket;
|
||||||
import org.jclouds.ssh.SshClient;
|
import org.jclouds.ssh.SshClient;
|
||||||
|
import org.jclouds.vcloud.domain.VCloudExpressVApp;
|
||||||
import org.jclouds.vcloud.terremark.domain.InternetService;
|
import org.jclouds.vcloud.terremark.domain.InternetService;
|
||||||
import org.jclouds.vcloud.terremark.domain.KeyPair;
|
import org.jclouds.vcloud.terremark.domain.KeyPair;
|
||||||
import org.jclouds.vcloud.terremark.domain.Protocol;
|
import org.jclouds.vcloud.terremark.domain.Protocol;
|
||||||
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
||||||
import org.jclouds.vcloud.terremark.domain.TerremarkOrg;
|
import org.jclouds.vcloud.terremark.domain.TerremarkOrg;
|
||||||
import org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTemplateOptions;
|
import org.jclouds.vcloud.terremark.options.TerremarkInstantiateVAppTemplateOptions;
|
||||||
|
import org.jclouds.vcloud.terremark.suppliers.TerremarkVCloudExpressInternetServiceAndPublicIpAddressSupplier;
|
||||||
import org.testng.annotations.AfterTest;
|
import org.testng.annotations.AfterTest;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests behavior of {@code TerremarkVCloudClient}
|
* Tests behavior of {@code TerremarkVCloudClient}
|
||||||
*
|
*
|
||||||
|
@ -53,16 +50,6 @@ import com.google.common.collect.Iterables;
|
||||||
@Test(groups = "live", sequential = true)
|
@Test(groups = "live", sequential = true)
|
||||||
public class TerremarkVCloudExpressClientLiveTest extends TerremarkClientLiveTest {
|
public class TerremarkVCloudExpressClientLiveTest extends TerremarkClientLiveTest {
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(URI vdc) {
|
|
||||||
InternetService is = TerremarkVCloudExpressClient.class.cast(tmClient).addInternetServiceToVDC(
|
|
||||||
tmClient.findVDCInOrgNamed(null, null).getHref(), "SSH", Protocol.TCP, 22);
|
|
||||||
PublicIpAddress ip = is.getPublicIpAddress();
|
|
||||||
Map<InternetService, PublicIpAddress> result = ImmutableMap.<InternetService, PublicIpAddress> of(is, ip);
|
|
||||||
Entry<InternetService, PublicIpAddress> entry = Iterables.getOnlyElement(result.entrySet());
|
|
||||||
return entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyPair key;
|
KeyPair key;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -114,4 +101,10 @@ public class TerremarkVCloudExpressClientLiveTest extends TerremarkClientLiveTes
|
||||||
protected TerremarkInstantiateVAppTemplateOptions createInstantiateOptions() {
|
protected TerremarkInstantiateVAppTemplateOptions createInstantiateOptions() {
|
||||||
return processorCount(1).memory(512).sshKeyFingerprint(key.getFingerPrint());
|
return processorCount(1).memory(512).sshKeyFingerprint(key.getFingerPrint());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(VCloudExpressVApp vApp) {
|
||||||
|
return new TerremarkVCloudExpressInternetServiceAndPublicIpAddressSupplier(TerremarkVCloudExpressClient.class
|
||||||
|
.cast(tmClient)).getNewInternetServiceAndIp(vApp, 22, Protocol.TCP);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue