Issue 112, Issue 129, Issue 130: add hosting.com to compute provider and ant tool

git-svn-id: http://jclouds.googlecode.com/svn/trunk@2444 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
adrian.f.cole 2009-12-16 03:49:13 +00:00
parent 9518a67228
commit f9e5839134
12 changed files with 270 additions and 138 deletions

View File

@ -2,3 +2,5 @@ rimuhosting.contextbuilder=org.jclouds.rimuhosting.miro.RimuHostingContextBuilde
rimuhosting.propertiesbuilder=org.jclouds.rimuhosting.miro.RimuHostingPropertiesBuilder
terremark.contextbuilder=org.jclouds.vcloud.terremark.TerremarkVCloudContextBuilder
terremark.propertiesbuilder=org.jclouds.vcloud.terremark.TerremarkVCloudPropertiesBuilder
hostingdotcom.contextbuilder=org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudContextBuilder
hostingdotcom.propertiesbuilder=org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudPropertiesBuilder

View File

@ -49,6 +49,13 @@ public class CredentialsTest {
assertEquals(creds.key, "Base64==");
}
public void testHosting() {
Credentials creds = Credentials.parse(URI
.create("compute://user%40domain:pa%24sword@hostingdotcom"));
assertEquals(creds.account, "user@domain");
assertEquals(creds.key, "pa$sword");
}
public void testCloudFiles() {
Credentials creds = Credentials.parse(URI
.create("blobstore://account:h3c@cloudfiles/container-hyphen/prefix"));

View File

@ -64,6 +64,12 @@ public class HttpUtilsTest extends PerformanceTest {
.create("blobstore://account:Base64==@azureblob/container-hyphen/prefix"));
}
public void testHosting() {
URI creds = HttpUtils.createUri("compute://user@domain:pa$sword@hostingdotcom");
assertEquals(creds.getUserInfo(), "user@domain:pa$sword");
assertEquals(creds, URI.create("compute://user%40domain:pa%24sword@hostingdotcom"));
}
public void testTerremark() {
URI creds = HttpUtils.createUri("compute://user@domain:password@terremark");
assertEquals(creds.getUserInfo(), "user@domain:password");

View File

@ -30,6 +30,7 @@
<artifact:dependencies pathId="jclouds.classpath">
<dependency groupId="org.jclouds" artifactId="jclouds-ant-plugin" version="1.0-SNAPSHOT" />
<dependency groupId="org.jclouds" artifactId="jclouds-terremark" version="1.0-SNAPSHOT" />
<dependency groupId="org.jclouds" artifactId="jclouds-hostingdotcom" version="1.0-SNAPSHOT" />
<dependency groupId="org.jclouds" artifactId="jclouds-rimuhosting" version="1.0-SNAPSHOT" />
<localRepository refid="local.repository" />
<remoteRepository refid="jclouds-snapshot.repository" />

View File

@ -32,8 +32,8 @@ import org.jclouds.logging.jdk.config.JDKLoggingModule;
import org.jclouds.rest.RestContext;
import org.jclouds.rest.RestContextBuilder;
import org.jclouds.vcloud.VCloudAsyncClient;
import org.jclouds.vcloud.config.VCloudContextModule;
import org.jclouds.vcloud.config.VCloudDiscoveryRestClientModule;
import org.jclouds.vcloud.hostingdotcom.config.HostingDotComVCloudContextModule;
import org.jclouds.vcloud.hostingdotcom.config.HostingDotComVCloudRestClientModule;
import com.google.inject.Module;
@ -70,7 +70,7 @@ public class HostingDotComVCloudContextBuilder extends
@Override
protected void addContextModule(List<Module> modules) {
modules.add(new VCloudContextModule());
modules.add(new HostingDotComVCloudContextModule());
}
@Override

View File

@ -0,0 +1,38 @@
package org.jclouds.vcloud.hostingdotcom;
import java.util.Properties;
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
import org.jclouds.logging.jdk.config.JDKLoggingModule;
import org.jclouds.rest.RestContext;
import com.google.inject.Module;
/**
* Creates {@link HostingDotComVCloudContext} instances based on the most commonly requested
* arguments.
* <p/>
* Note that Threadsafe objects will be bound as singletons to the Injector or Context provided.
* <p/>
* <p/>
* If no <code>Module</code>s are specified, the default {@link JDKLoggingModule logging} and
* {@link JavaUrlHttpCommandExecutorServiceModule http transports} will be installed.
*
* @author Adrian Cole
* @see HostingDotComVCloudContext
*/
public class HostingDotComVCloudContextFactory {
public static RestContext<HostingDotComVCloudAsyncClient, HostingDotComVCloudClient> createContext(
String username, String password, Module... modules) {
return new HostingDotComVCloudContextBuilder(new HostingDotComVCloudPropertiesBuilder(
username, password).build()).withModules(modules).buildContext();
}
public static RestContext<HostingDotComVCloudAsyncClient, HostingDotComVCloudClient> createContext(
Properties props, Module... modules) {
return new HostingDotComVCloudContextBuilder(new HostingDotComVCloudPropertiesBuilder(props)
.build()).withModules(modules).buildContext();
}
}

View File

@ -21,25 +21,23 @@
* under the License.
* ====================================================================
*/
package org.jclouds.vcloud.hostingdotcom;
package org.jclouds.vcloud.hostingdotcom.compute;
import static com.google.common.base.Preconditions.checkArgument;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.URI;
import java.util.Map;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.jclouds.compute.domain.Image;
import org.jclouds.logging.Logger;
import org.jclouds.ssh.ExecResponse;
import org.jclouds.ssh.SshClient;
import org.jclouds.ssh.SshClient.Factory;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.VAppStatus;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudClient;
import org.jclouds.vcloud.hostingdotcom.domain.HostingDotComVApp;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
@ -55,34 +53,21 @@ public class HostingDotComVCloudComputeClient {
@Resource
protected Logger logger = Logger.NULL;
private final Predicate<InetSocketAddress> socketTester;
private final Predicate<URI> taskTester;
private final HostingDotComVCloudClient tmClient;
@Inject
public HostingDotComVCloudComputeClient(HostingDotComVCloudClient tmClient, Factory sshFactory,
Predicate<InetSocketAddress> socketTester, Predicate<URI> successTester) {
public HostingDotComVCloudComputeClient(HostingDotComVCloudClient tmClient,
Predicate<URI> successTester) {
this.tmClient = tmClient;
this.sshFactory = sshFactory;
this.socketTester = socketTester;
this.taskTester = successTester;
}
private final Factory sshFactory;
public enum Image {
CENTOS_53, RHEL_53, UMBUNTU_90, UMBUNTU_JEOS
}
private Map<Image, String> imageCatalogIdMap = ImmutableMap.<Image, String> builder().put(
Image.CENTOS_53, "3").put(Image.RHEL_53, "8").put(Image.UMBUNTU_90, "10").put(
Image.UMBUNTU_JEOS, "11").build();
private String username;
private String password;
public String start(String name, int minCores, int minMegs, Image image) {
public Map<String, String> start(String name, int minCores, int minMegs, Image image) {
checkArgument(imageCatalogIdMap.containsKey(image), "image not configured: " + image);
String templateId = imageCatalogIdMap.get(image);
@ -91,8 +76,6 @@ public class HostingDotComVCloudComputeClient {
HostingDotComVApp vAppResponse = (HostingDotComVApp) tmClient.instantiateVAppTemplate(name,
templateId, InstantiateVAppTemplateOptions.Builder.cpuCount(minCores).megabytes(
minMegs));
this.username = vAppResponse.getUsername();
this.password = vAppResponse.getPassword();
logger.debug("<< instantiated VApp(%s)", vAppResponse.getId());
logger.debug(">> deploying vApp(%s)", vAppResponse.getId());
@ -100,14 +83,15 @@ public class HostingDotComVCloudComputeClient {
.deployVApp(vAppResponse.getId()), "deploy", VAppStatus.ON);// TODO, I'm not sure
// this should be on
// already
// logger.debug("<< deployed vApp(%s)", vApp.getId());
//
// logger.debug(">> powering vApp(%s)", vApp.getId());
// vApp = blockUntilVAppStatusOrThrowException(vApp, tmClient.powerOnVApp(vApp.getId()),
// "powerOn", VAppStatus.ON);
// logger.debug("<< deployed vApp(%s)", vApp.getId());
//
// logger.debug(">> powering vApp(%s)", vApp.getId());
// vApp = blockUntilVAppStatusOrThrowException(vApp, tmClient.powerOnVApp(vApp.getId()),
// "powerOn", VAppStatus.ON);
logger.debug("<< on vApp(%s)", vApp.getId());
return vApp.getId();
return ImmutableMap.<String, String> of("id", vApp.getId(), "username", vAppResponse
.getUsername(), "password", vAppResponse.getPassword());
}
/**
@ -120,14 +104,6 @@ public class HostingDotComVCloudComputeClient {
return Iterables.getLast(vApp.getNetworkToAddresses().values());
}
public ExecResponse exec(InetAddress address, String command) {
InetSocketAddress sshSocket = new InetSocketAddress(address, 22);
logger.debug(">> exec ssh://%s@%s/%s", username, sshSocket, command);
ExecResponse exec = exec(sshSocket, username, password, command);
logger.debug("<< output(%s) error(%s)", exec.getOutput(), exec.getError());
return exec;
}
public void reboot(String id) {
VApp vApp = tmClient.getVApp(id);
logger.debug(">> rebooting vApp(%s)", vApp.getId());
@ -149,21 +125,6 @@ public class HostingDotComVCloudComputeClient {
logger.debug("<< deleted vApp(%s)", vApp.getId());
}
private ExecResponse exec(InetSocketAddress socket, String username, String password,
String command) {
if (!socketTester.apply(socket)) {
throw new SocketNotOpenException(socket);
}
SshClient connection = sshFactory.create(socket, username, password);
try {
connection.connect();
return connection.exec(command);
} finally {
if (connection != null)
connection.disconnect();
}
}
private VApp blockUntilVAppStatusOrThrowException(VApp vApp, Task deployTask, String taskType,
VAppStatus expectedStatus) {
if (!taskTester.apply(deployTask.getLocation())) {
@ -196,23 +157,6 @@ public class HostingDotComVCloudComputeClient {
}
public static class SocketNotOpenException extends RuntimeException {
private final InetSocketAddress socket;
/** The serialVersionUID */
private static final long serialVersionUID = 251801929573211256L;
public SocketNotOpenException(InetSocketAddress socket) {
super("socket not open: " + socket);
this.socket = socket;
}
public InetSocketAddress getSocket() {
return socket;
}
}
public static class VAppException extends RuntimeException {
private final VApp vApp;

View File

@ -0,0 +1,114 @@
/**
*
* 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.hostingdotcom.compute;
import java.net.InetAddress;
import java.util.Map;
import java.util.SortedSet;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.domain.CreateServerResponse;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.LoginType;
import org.jclouds.compute.domain.Profile;
import org.jclouds.compute.domain.ServerIdentity;
import org.jclouds.compute.domain.ServerMetadata;
import org.jclouds.compute.domain.internal.CreateServerResponseImpl;
import org.jclouds.compute.domain.internal.ServerMetadataImpl;
import org.jclouds.domain.Credentials;
import org.jclouds.logging.Logger;
import org.jclouds.rest.domain.NamedResource;
import org.jclouds.vcloud.VCloudMediaType;
import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudClient;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.google.inject.internal.ImmutableSet;
/**
* @author Adrian Cole
*/
@Singleton
public class HostingDotComVCloudComputeService implements ComputeService {
@Resource
protected Logger logger = Logger.NULL;
private final HostingDotComVCloudComputeClient computeClient;
private final HostingDotComVCloudClient tmClient;
@Inject
public HostingDotComVCloudComputeService(HostingDotComVCloudClient tmClient,
HostingDotComVCloudComputeClient computeClient) {
this.tmClient = tmClient;
this.computeClient = computeClient;
}
@Override
public CreateServerResponse createServer(String name, Profile profile, Image image) {
Map<String, String> metaMap = computeClient.start(name, 1, 512, image);
VApp vApp = tmClient.getVApp(metaMap.get("id"));
return new CreateServerResponseImpl(vApp.getId(), vApp.getName(), vApp
.getNetworkToAddresses().values(), ImmutableSet.<InetAddress> of(), 22,
LoginType.SSH, new Credentials(metaMap.get("username"), metaMap.get("password")));
}
@Override
public ServerMetadata getServerMetadata(String id) {
VApp vApp = tmClient.getVApp(id);
return new ServerMetadataImpl(vApp.getId(), vApp.getName(), vApp.getNetworkToAddresses()
.values(), ImmutableSet.<InetAddress> of(), 22, LoginType.SSH);
}
@Override
public SortedSet<ServerIdentity> getServerByName(final String name) {
return Sets.newTreeSet(Iterables.filter(listServers(), new Predicate<ServerIdentity>() {
@Override
public boolean apply(ServerIdentity input) {
return input.getName().equalsIgnoreCase(name);
}
}));
}
@Override
public SortedSet<ServerIdentity> listServers() {
SortedSet<ServerIdentity> servers = Sets.newTreeSet();
for (NamedResource resource : tmClient.getDefaultVDC().getResourceEntities().values()) {
if (resource.getType().equals(VCloudMediaType.VAPP_XML)) {
servers.add(getServerMetadata(resource.getId()));
}
}
return servers;
}
@Override
public void destroyServer(String id) {
computeClient.stop(id);
}
}

View File

@ -0,0 +1,39 @@
package org.jclouds.vcloud.hostingdotcom.config;
import java.net.URI;
import javax.inject.Named;
import javax.inject.Singleton;
import org.jclouds.compute.ComputeService;
import org.jclouds.lifecycle.Closer;
import org.jclouds.rest.RestContext;
import org.jclouds.rest.internal.RestContextImpl;
import org.jclouds.vcloud.endpoints.Org;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudAsyncClient;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudClient;
import org.jclouds.vcloud.hostingdotcom.compute.HostingDotComVCloudComputeService;
import org.jclouds.vcloud.reference.VCloudConstants;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
/**
* @author Adrian Cole
*/
public class HostingDotComVCloudContextModule extends AbstractModule {
@Override
protected void configure() {
bind(ComputeService.class).to(HostingDotComVCloudComputeService.class);
}
@Provides
@Singleton
RestContext<HostingDotComVCloudAsyncClient, HostingDotComVCloudClient> provideContext(Closer closer,
HostingDotComVCloudAsyncClient asynchApi, HostingDotComVCloudClient defaultApi,
@Org URI endPoint, @Named(VCloudConstants.PROPERTY_VCLOUD_USER) String account) {
return new RestContextImpl<HostingDotComVCloudAsyncClient, HostingDotComVCloudClient>(closer,
asynchApi, defaultApi, endPoint, account);
}
}

View File

@ -23,12 +23,18 @@
*/
package org.jclouds.vcloud.hostingdotcom.config;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.URI;
import java.util.concurrent.TimeUnit;
import javax.inject.Singleton;
import org.jclouds.concurrent.internal.SyncProxy;
import org.jclouds.http.RequiresHttp;
import org.jclouds.predicates.AddressReachable;
import org.jclouds.predicates.RetryablePredicate;
import org.jclouds.predicates.SocketOpen;
import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.RestClientFactory;
import org.jclouds.vcloud.VCloudAsyncClient;
@ -36,7 +42,9 @@ import org.jclouds.vcloud.VCloudClient;
import org.jclouds.vcloud.config.VCloudRestClientModule;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudAsyncClient;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudClient;
import org.jclouds.vcloud.predicates.TaskSuccess;
import com.google.common.base.Predicate;
import com.google.inject.Provides;
/**
@ -49,7 +57,26 @@ import com.google.inject.Provides;
public class HostingDotComVCloudRestClientModule extends VCloudRestClientModule {
@Provides
@Singleton
protected HostingDotComVCloudAsyncClient provideHostingDotComVCloudAsyncClient(VCloudAsyncClient in) {
protected Predicate<InetSocketAddress> socketTester(SocketOpen open) {
return new RetryablePredicate<InetSocketAddress>(open, 130, 10, TimeUnit.SECONDS);
}
@Provides
@Singleton
protected Predicate<InetAddress> addressTester(AddressReachable reachable) {
return new RetryablePredicate<InetAddress>(reachable, 60, 5, TimeUnit.SECONDS);
}
@Provides
@Singleton
protected Predicate<URI> successTester(TaskSuccess success) {
return new RetryablePredicate<URI>(success, 600, 10, TimeUnit.SECONDS);
}
@Provides
@Singleton
protected HostingDotComVCloudAsyncClient provideHostingDotComVCloudAsyncClient(
VCloudAsyncClient in) {
return (HostingDotComVCloudAsyncClient) in;
}

View File

@ -21,39 +21,33 @@
* under the License.
* ====================================================================
*/
package org.jclouds.vcloud.hostingdotcom;
package org.jclouds.vcloud.hostingdotcom.compute;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.URI;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.jclouds.compute.domain.Image;
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
import org.jclouds.predicates.AddressReachable;
import org.jclouds.predicates.RetryablePredicate;
import org.jclouds.predicates.SocketOpen;
import org.jclouds.ssh.jsch.config.JschSshClientModule;
import org.jclouds.vcloud.domain.ResourceType;
import org.jclouds.vcloud.domain.VApp;
import org.jclouds.vcloud.domain.VAppStatus;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudComputeClient.Image;
import org.jclouds.vcloud.predicates.TaskSuccess;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudClient;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudContextBuilder;
import org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudPropertiesBuilder;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
import com.google.common.base.Predicate;
import com.google.inject.AbstractModule;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
import com.google.inject.internal.ImmutableMap;
@ -101,7 +95,7 @@ public class HostingDotComVCloudComputeClientLiveTest {
int processorCount = 1;
int memory = 512;
id = client.start(serverName, processorCount, memory, toTest);
id = client.start(serverName, processorCount, memory, toTest).get("id");
Expectation expectation = expectationMap.get(toTest);
VApp vApp = tmClient.getVApp(id);
@ -122,16 +116,10 @@ public class HostingDotComVCloudComputeClientLiveTest {
assert !addressTester.apply(privateAddress);
}
@Test(dependsOnMethods = "testGetAnyPrivateAddress")
public void testSshLoadBalanceIp() {
// assert addressTester.apply(publicIp);
client.exec(privateAddress, "uname -a");
}
private void verifyConfigurationOfVApp(VApp vApp, String serverName, String expectedOs,
int processorCount, int memory, long hardDisk) {
// assertEquals(vApp.getName(), serverName);
// assertEquals(vApp.getOperatingSystemDescription(), expectedOs);
// assertEquals(vApp.getName(), serverName);
// assertEquals(vApp.getOperatingSystemDescription(), expectedOs);
assertEquals(vApp.getResourceAllocationByType().get(ResourceType.PROCESSOR)
.getVirtualQuantity(), processorCount);
assertEquals(vApp.getResourceAllocationByType().get(ResourceType.SCSI_CONTROLLER)
@ -156,35 +144,7 @@ public class HostingDotComVCloudComputeClientLiveTest {
String key = checkNotNull(System.getProperty("jclouds.test.key"), "jclouds.test.key");
Injector injector = new HostingDotComVCloudContextBuilder(
new HostingDotComVCloudPropertiesBuilder(account, key).relaxSSLHostname().build())
.withModules(new Log4JLoggingModule(), new JschSshClientModule(),
new AbstractModule() {
@Override
protected void configure() {
}
@SuppressWarnings("unused")
@Provides
private Predicate<InetSocketAddress> socketTester(SocketOpen open) {
return new RetryablePredicate<InetSocketAddress>(open, 130, 10,
TimeUnit.SECONDS);// make it longer then
// default internet
}
@SuppressWarnings("unused")
@Provides
private Predicate<InetAddress> addressTester(AddressReachable reachable) {
return new RetryablePredicate<InetAddress>(reachable, 60, 5,
TimeUnit.SECONDS);
}
@SuppressWarnings("unused")
@Provides
private Predicate<URI> successTester(TaskSuccess success) {
return new RetryablePredicate<URI>(success, 5400, 10, TimeUnit.SECONDS);
}
}).buildInjector();
.withModules(new Log4JLoggingModule(), new JschSshClientModule()).buildInjector();
client = injector.getInstance(HostingDotComVCloudComputeClient.class);
tmClient = injector.getInstance(HostingDotComVCloudClient.class);
addressTester = injector.getInstance(Key.get(new TypeLiteral<Predicate<InetAddress>>() {

View File

@ -1,6 +1,5 @@
package org.jclouds.vcloud.terremark;
import java.net.URI;
import java.util.Properties;
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
@ -23,19 +22,14 @@ import com.google.inject.Module;
*/
public class TerremarkVCloudContextFactory {
public static RestContext<TerremarkVCloudAsyncClient, TerremarkVCloudClient> createContext(String username, String password,
Module... modules) {
return new TerremarkVCloudContextBuilder(new TerremarkVCloudPropertiesBuilder(username, password).build())
.withModules(modules).buildContext();
public static RestContext<TerremarkVCloudAsyncClient, TerremarkVCloudClient> createContext(
String username, String password, Module... modules) {
return new TerremarkVCloudContextBuilder(new TerremarkVCloudPropertiesBuilder(username,
password).build()).withModules(modules).buildContext();
}
public static RestContext<TerremarkVCloudAsyncClient, TerremarkVCloudClient> createContext(URI endpoint, String username,
String password, Module... modules) {
return new TerremarkVCloudContextBuilder(new TerremarkVCloudPropertiesBuilder(username, password).withEndpoint(
endpoint).build()).withModules(modules).buildContext();
}
public static RestContext<TerremarkVCloudAsyncClient, TerremarkVCloudClient> createContext(Properties props, Module... modules) {
public static RestContext<TerremarkVCloudAsyncClient, TerremarkVCloudClient> createContext(
Properties props, Module... modules) {
return new TerremarkVCloudContextBuilder(new TerremarkVCloudPropertiesBuilder(props).build())
.withModules(modules).buildContext();
}