diff --git a/README.txt b/README.txt
index a2e1cd7264..20b8a9e591 100644
--- a/README.txt
+++ b/README.txt
@@ -26,8 +26,9 @@ freedom to use portable abstractions or cloud-specific features.
our current version is 1.0-beta-6
our dev version is 1.0-SNAPSHOT
-our compute api supports: ec2, gogrid, rackspace, rimuhosting, vcloud, terremark,
- eucalyptus, hosting.com, bluelock, ibmdev, slicehost
+our compute api supports: ec2, gogrid, rackspace, rimuhosting, vcloud, trmk-ecloud,
+ trmk-vcloudexpress, eucalyptus, bluelock-vclouddirector,
+ bluelock-vcloudexpress, ibmdev, slicehost
* note * the pom dependency org.jclouds/jclouds-allcompute gives you access to
to all of these providers
diff --git a/assemblies/src/main/resources/assemblies/package-descriptor.xml b/assemblies/src/main/resources/assemblies/package-descriptor.xml
index e4df2f5385..9afba8c97c 100644
--- a/assemblies/src/main/resources/assemblies/package-descriptor.xml
+++ b/assemblies/src/main/resources/assemblies/package-descriptor.xml
@@ -243,33 +243,6 @@
providers/azure
-
-
- vcloud/hostingdotcom/target
-
- jclouds-hostingdotcom-${project.version}.jar
-
- providers/hostingdotcom/lib
-
-
- vcloud/hostingdotcom/target
-
- jclouds-hostingdotcom-${project.version}-sources.jar
-
- providers/hostingdotcom/src
-
-
- vcloud/hostingdotcom/target/apidocs
- providers/hostingdotcom/docs
-
-
- vcloud/hostingdotcom
-
- README.txt
-
- providers/hostingdotcom
-
-
mezeo/pcs2/target
diff --git a/aws/core/src/main/java/org/jclouds/aws/elb/ELBAsyncClient.java b/aws/core/src/main/java/org/jclouds/aws/elb/ELBAsyncClient.java
index 53c76a190f..f0e1c47f49 100644
--- a/aws/core/src/main/java/org/jclouds/aws/elb/ELBAsyncClient.java
+++ b/aws/core/src/main/java/org/jclouds/aws/elb/ELBAsyncClient.java
@@ -114,7 +114,6 @@ public interface ELBAsyncClient {
@XMLResponseParser(DescribeLoadBalancersResponseHandler.class)
@FormParams(keys = ACTION, values = "DescribeLoadBalancers")
ListenableFuture extends Set> describeLoadBalancersInRegion(
- @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
- @FormParam("LoadBalancerName") @Nullable String name);
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
}
diff --git a/aws/core/src/main/java/org/jclouds/aws/elb/ELBClient.java b/aws/core/src/main/java/org/jclouds/aws/elb/ELBClient.java
index 86a49d6853..2013fe03a0 100644
--- a/aws/core/src/main/java/org/jclouds/aws/elb/ELBClient.java
+++ b/aws/core/src/main/java/org/jclouds/aws/elb/ELBClient.java
@@ -94,6 +94,11 @@ public interface ELBClient {
void deregisterInstancesWithLoadBalancerInRegion(@Nullable String region, String name,
String... instanceIds);
- Set describeLoadBalancersInRegion(@Nullable String region, @Nullable String name);
+ /**
+ * Returns a set of elastic load balancers
+ * @param region
+ * @return
+ */
+ Set describeLoadBalancersInRegion(@Nullable String region);
}
\ No newline at end of file
diff --git a/aws/core/src/test/java/org/jclouds/aws/ec2/compute/EC2LoadBalancerServiceLiveTest.java b/aws/core/src/test/java/org/jclouds/aws/ec2/compute/EC2LoadBalancerServiceLiveTest.java
index d829f1720b..89c5cbe932 100644
--- a/aws/core/src/test/java/org/jclouds/aws/ec2/compute/EC2LoadBalancerServiceLiveTest.java
+++ b/aws/core/src/test/java/org/jclouds/aws/ec2/compute/EC2LoadBalancerServiceLiveTest.java
@@ -84,10 +84,12 @@ public class EC2LoadBalancerServiceLiveTest extends BaseLoadBalancerServiceLiveT
for (NodeMetadata node : nodes) {
instanceIds.add(node.getProviderId());
}
- Set elbs = elbClient.describeLoadBalancersInRegion(Region.US_EAST_1, tag);
+ Set elbs = elbClient.describeLoadBalancersInRegion(Region.US_EAST_1);
assertNotNull(elbs);
- LoadBalancer elb = elbs.iterator().next();
- assertEquals(elb.getInstanceIds(), instanceIds);
+ for(LoadBalancer elb:elbs)
+ {
+ if(elb.getName().equals(tag))
+ assertEquals(elb.getInstanceIds(), instanceIds);
+ }
}
-
}
diff --git a/aws/core/src/test/java/org/jclouds/aws/elb/ELBClientLiveTest.java b/aws/core/src/test/java/org/jclouds/aws/elb/ELBClientLiveTest.java
index 238c10ee7a..00b2c8c734 100644
--- a/aws/core/src/test/java/org/jclouds/aws/elb/ELBClientLiveTest.java
+++ b/aws/core/src/test/java/org/jclouds/aws/elb/ELBClientLiveTest.java
@@ -78,10 +78,9 @@ public class ELBClientLiveTest {
@Test(dependsOnMethods = "testCreateLoadBalancer")
void testDescribeLoadBalancers() {
- String name = "TestDescribeLoadBalancer";
for (String region : Lists.newArrayList(null, Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1, Region.AP_SOUTHEAST_1)) {
- Set allResults = client.describeLoadBalancersInRegion(region, name);
+ Set allResults = client.describeLoadBalancersInRegion(region);
assertNotNull(allResults);
assert (allResults.size() >= 1);
}
diff --git a/compute/src/main/clojure/org/jclouds/compute.clj b/compute/src/main/clojure/org/jclouds/compute.clj
index 0583635680..bfc99fb758 100644
--- a/compute/src/main/clojure/org/jclouds/compute.clj
+++ b/compute/src/main/clojure/org/jclouds/compute.clj
@@ -22,7 +22,7 @@
Current supported services are:
[ec2, rimuhosting, cloudservers, trmk-ecloud, trmk-vcloudexpress, vcloud, bluelock,
- ibmdev, eucalyptus, hostingdotcom, slicehost]
+ ibmdev, eucalyptus, slicehost]
Here's an example of getting some compute configuration from rackspace:
diff --git a/compute/src/main/java/org/jclouds/compute/LoadBalancerService.java b/compute/src/main/java/org/jclouds/compute/LoadBalancerService.java
index ea6e4560ea..d66c7b38f3 100644
--- a/compute/src/main/java/org/jclouds/compute/LoadBalancerService.java
+++ b/compute/src/main/java/org/jclouds/compute/LoadBalancerService.java
@@ -68,5 +68,8 @@ public interface LoadBalancerService {
@Beta
void destroyLoadBalancer(String handle);
+
+ @Beta
+ Set listLoadBalancers();
}
diff --git a/compute/src/main/java/org/jclouds/compute/domain/os/CIMOperatingSystem.java b/compute/src/main/java/org/jclouds/compute/domain/os/CIMOperatingSystem.java
index 2ac10eb05e..8921bf039c 100644
--- a/compute/src/main/java/org/jclouds/compute/domain/os/CIMOperatingSystem.java
+++ b/compute/src/main/java/org/jclouds/compute/domain/os/CIMOperatingSystem.java
@@ -38,171 +38,171 @@ public class CIMOperatingSystem extends OperatingSystem {
/**
* Other
*/
- OTHER(0, "Other", OsFamily.UNKNOWN, false),
+ OTHER(1, "Other", OsFamily.UNKNOWN, false),
/**
* MACOS
*/
- MACOS(1, "MACOS", OsFamily.DARWIN, false),
+ MACOS(2, "MACOS", OsFamily.DARWIN, false),
/**
* Solaris
*/
- SOLARIS(28, "Solaris", OsFamily.SOLARIS, false),
+ SOLARIS(29, "Solaris", OsFamily.SOLARIS, false),
/**
* LINUX
*/
- LINUX(35, "LINUX", OsFamily.LINUX, false),
+ LINUX(36, "LINUX", OsFamily.LINUX, false),
/**
* FreeBSD
*/
- FREEBSD(41, "FreeBSD", OsFamily.FREEBSD, false),
+ FREEBSD(42, "FreeBSD", OsFamily.FREEBSD, false),
/**
* NetBSD
*/
- NETBSD(42, "NetBSD", OsFamily.NETBSD, false),
+ NETBSD(43, "NetBSD", OsFamily.NETBSD, false),
/**
* OpenBSD
*/
- OPENBSD(64, "OpenBSD", OsFamily.OPENBSD, false),
+ OPENBSD(65, "OpenBSD", OsFamily.OPENBSD, false),
/**
* Not Applicable
*/
- NOT_APPLICABLE(65, "Not Applicable", OsFamily.UNKNOWN, false),
+ NOT_APPLICABLE(66, "Not Applicable", OsFamily.UNKNOWN, false),
/**
* Microsoft Windows Server 2003
*/
- WINDOWS_SERVER_2003(68, "Microsoft Windows Server 2003", OsFamily.WINDOWS, false),
+ WINDOWS_SERVER_2003(69, "Microsoft Windows Server 2003", OsFamily.WINDOWS, false),
/**
* Microsoft Windows Server 2003 64-Bit
*/
- WINDOWS_SERVER_2003_64(69, "Microsoft Windows Server 2003 64-Bit", OsFamily.WINDOWS, true),
+ WINDOWS_SERVER_2003_64(70, "Microsoft Windows Server 2003 64-Bit", OsFamily.WINDOWS, true),
/**
* Microsoft Windows Server 2008
*/
- WINDOWS_SERVER_2008(75, "Microsoft Windows Server 2008", OsFamily.WINDOWS, false),
+ WINDOWS_SERVER_2008(76, "Microsoft Windows Server 2008", OsFamily.WINDOWS, false),
/**
* Microsoft Windows Server 2008 64-Bit
*/
- WINDOWS_SERVER_2008_64(76, "Microsoft Windows Server 2008 64-Bit", OsFamily.WINDOWS, true),
+ WINDOWS_SERVER_2008_64(77, "Microsoft Windows Server 2008 64-Bit", OsFamily.WINDOWS, true),
/**
* FreeBSD 64-Bit
*/
- FREEBSD_64(77, "FreeBSD 64-Bit", OsFamily.FREEBSD, true),
+ FREEBSD_64(78, "FreeBSD 64-Bit", OsFamily.FREEBSD, true),
/**
* RedHat Enterprise Linux
*/
- RHEL(78, "RedHat Enterprise Linux", OsFamily.RHEL, false),
+ RHEL(79, "RedHat Enterprise Linux", OsFamily.RHEL, false),
/**
* RedHat Enterprise Linux 64-Bit
*/
- RHEL_64(79, "RedHat Enterprise Linux 64-Bit", OsFamily.RHEL, true),
+ RHEL_64(80, "RedHat Enterprise Linux 64-Bit", OsFamily.RHEL, true),
/**
* Solaris 64-Bit
*/
- SOLARIS_64(80, "Solaris 64-Bit", OsFamily.SOLARIS, true),
+ SOLARIS_64(81, "Solaris 64-Bit", OsFamily.SOLARIS, true),
/**
* SUSE
*/
- SUSE(81, "SUSE", OsFamily.SUSE, false),
+ SUSE(82, "SUSE", OsFamily.SUSE, false),
/**
* SUSE 64-Bit
*/
- SUSE_64(82, "SUSE 64-Bit", OsFamily.SUSE, true),
+ SUSE_64(83, "SUSE 64-Bit", OsFamily.SUSE, true),
/**
* SLES
*/
- SLES(83, "SLES", OsFamily.SUSE, false),
+ SLES(84, "SLES", OsFamily.SUSE, false),
/**
* SLES 64-Bit
*/
- SLES_64(84, "SLES 64-Bit", OsFamily.SUSE, true),
+ SLES_64(85, "SLES 64-Bit", OsFamily.SUSE, true),
/**
* Novell OES
*/
- NOVELL_OES(85, "Novell OES", OsFamily.SUSE, true),
+ NOVELL_OES(86, "Novell OES", OsFamily.SUSE, true),
/**
* Mandriva
*/
- MANDRIVA(88, "Mandriva", OsFamily.MANDRIVA, false),
+ MANDRIVA(89, "Mandriva", OsFamily.MANDRIVA, false),
/**
* Mandriva 64-Bit
*/
- MANDRIVA_64(89, "Mandriva 64-Bit", OsFamily.MANDRIVA, true),
+ MANDRIVA_64(90, "Mandriva 64-Bit", OsFamily.MANDRIVA, true),
/**
* TurboLinux
*/
- TURBOLINUX(90, "TurboLinux", OsFamily.TURBOLINUX, false),
+ TURBOLINUX(91, "TurboLinux", OsFamily.TURBOLINUX, false),
/**
* TurboLinux 64-Bit
*/
- TURBOLINUX_64(91, "TurboLinux 64-Bit", OsFamily.TURBOLINUX, true),
+ TURBOLINUX_64(92, "TurboLinux 64-Bit", OsFamily.TURBOLINUX, true),
/**
* Ubuntu
*/
- UBUNTU(92, "Ubuntu", OsFamily.UBUNTU, false),
+ UBUNTU(93, "Ubuntu", OsFamily.UBUNTU, false),
/**
* Ubuntu 64-Bit
*/
- UBUNTU_64(93, "Ubuntu 64-Bit", OsFamily.UBUNTU, true),
+ UBUNTU_64(94, "Ubuntu 64-Bit", OsFamily.UBUNTU, true),
/**
* Debian
*/
- DEBIAN(94, "Debian", OsFamily.DEBIAN, false),
+ DEBIAN(95, "Debian", OsFamily.DEBIAN, false),
/**
* Debian 64-Bit
*/
- DEBIAN_64(95, "Debian 64-Bit", OsFamily.DEBIAN, false),
+ DEBIAN_64(96, "Debian 64-Bit", OsFamily.DEBIAN, false),
/**
* Linux 2.4.x
*/
- LINUX_2_4(96, "Linux 2.4.x", OsFamily.LINUX, false),
+ LINUX_2_4(97, "Linux 2.4.x", OsFamily.LINUX, false),
/**
* Linux 2.4.x 64-Bi
*/
- LINUX_2_4_64(97, "Linux 2.4.x 64-Bit", OsFamily.LINUX, true),
+ LINUX_2_4_64(98, "Linux 2.4.x 64-Bit", OsFamily.LINUX, true),
/**
* Linux 2.6.x
*/
- LINUX_2_6(98, "Linux 2.6.x", OsFamily.LINUX, false),
+ LINUX_2_6(99, "Linux 2.6.x", OsFamily.LINUX, false),
/**
* Linux 2.6.x 64-Bit
*/
- LINUX_2_6_64(99, "Linux 2.6.x 64-Bit", OsFamily.LINUX, true),
+ LINUX_2_6_64(100, "Linux 2.6.x 64-Bit", OsFamily.LINUX, true),
/**
* Linux 64-Bit
*/
- LINUX_64(100, "Linux 64-Bit", OsFamily.LINUX, true),
+ LINUX_64(101, "Linux 64-Bit", OsFamily.LINUX, true),
/**
* Other 64-Bit
*/
- OTHER_64(101, "Other 64-Bit", OsFamily.UNKNOWN, true),
+ OTHER_64(102, "Other 64-Bit", OsFamily.UNKNOWN, true),
/**
* Microsoft Windows Server 2008 R2
*/
- WINDOWS_SERVER_2008_R2(102, "Microsoft Windows Server 2008 R2", OsFamily.WINDOWS, true),
+ WINDOWS_SERVER_2008_R2(103, "Microsoft Windows Server 2008 R2", OsFamily.WINDOWS, true),
/**
* VMware ESXi
*/
- ESXI(103, "VMware ESXi", OsFamily.ESX, true),
+ ESXI(104, "VMware ESXi", OsFamily.ESX, true),
/**
* Microsoft Windows 7
*/
- WINDOWS_7(104, "Microsoft Windows 7", OsFamily.WINDOWS, false),
+ WINDOWS_7(105, "Microsoft Windows 7", OsFamily.WINDOWS, false),
/**
* CentOS 32-bit
*/
- CENTOS(105, "CentOS 32-bit", OsFamily.CENTOS, false),
+ CENTOS(106, "CentOS 32-bit", OsFamily.CENTOS, false),
/**
* CentOS 64-bit
*/
- CENTOS_64(106, "CentOS 64-bit", OsFamily.CENTOS, true),
+ CENTOS_64(107, "CentOS 64-bit", OsFamily.CENTOS, true),
/**
* Oracle Enterprise Linux 32-bit
*/
- ORACLE_ENTERPRISE_LINUX(107, "Oracle Enterprise Linux 32-bit", OsFamily.OEL, false),
+ ORACLE_ENTERPRISE_LINUX(108, "Oracle Enterprise Linux 32-bit", OsFamily.OEL, false),
/**
* Oracle Enterprise Linux 64-bit
*/
- ORACLE_ENTERPRISE_LINUX_64(108, "Oracle Enterprise Linux 64-bit", OsFamily.OEL, true);
+ ORACLE_ENTERPRISE_LINUX_64(109, "Oracle Enterprise Linux 64-bit", OsFamily.OEL, true);
private final int code;
diff --git a/compute/src/main/java/org/jclouds/compute/internal/BaseLoadBalancerService.java b/compute/src/main/java/org/jclouds/compute/internal/BaseLoadBalancerService.java
index de6e5b0d22..d76fb6b704 100644
--- a/compute/src/main/java/org/jclouds/compute/internal/BaseLoadBalancerService.java
+++ b/compute/src/main/java/org/jclouds/compute/internal/BaseLoadBalancerService.java
@@ -43,6 +43,7 @@ import org.jclouds.logging.Logger;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -68,19 +69,20 @@ public class BaseLoadBalancerService implements LoadBalancerService {
protected final ComputeServiceContext context;
protected final LoadBalanceNodesStrategy loadBalancerStrategy;
protected final DestroyLoadBalancerStrategy destroyLoadBalancerStrategy;
+ // protected final ListLoadBalancersStrategy listLoadBalancersStrategy;
protected final BackoffLimitedRetryHandler backoffLimitedRetryHandler;
@Inject
- protected BaseLoadBalancerService(ComputeServiceContext context,
- LoadBalanceNodesStrategy loadBalancerStrategy,
+ protected BaseLoadBalancerService(ComputeServiceContext context, LoadBalanceNodesStrategy loadBalancerStrategy,
DestroyLoadBalancerStrategy destroyLoadBalancerStrategy,
+ // ListLoadBalancersStrategy listLoadBalancersStrategy,
BackoffLimitedRetryHandler backoffLimitedRetryHandler) {
this.context = checkNotNull(context, "context");
this.loadBalancerStrategy = checkNotNull(loadBalancerStrategy, "loadBalancerStrategy");
- this.destroyLoadBalancerStrategy = checkNotNull(destroyLoadBalancerStrategy,
- "destroyLoadBalancerStrategy");
- this.backoffLimitedRetryHandler = checkNotNull(backoffLimitedRetryHandler,
- "backoffLimitedRetryHandler");
+ this.destroyLoadBalancerStrategy = checkNotNull(destroyLoadBalancerStrategy, "destroyLoadBalancerStrategy");
+ // this.listLoadBalancersStrategy = checkNotNull(listLoadBalancersStrategy,
+ // "listLoadBalancersStrategy");
+ this.backoffLimitedRetryHandler = checkNotNull(backoffLimitedRetryHandler, "backoffLimitedRetryHandler");
}
/**
@@ -92,17 +94,16 @@ public class BaseLoadBalancerService implements LoadBalancerService {
}
@Override
- public Set loadBalanceNodesMatching(Predicate filter,
- String loadBalancerName, String protocol, int loadBalancerPort, int instancePort) {
+ public Set loadBalanceNodesMatching(Predicate filter, String loadBalancerName,
+ String protocol, int loadBalancerPort, int instancePort) {
checkNotNull(loadBalancerName, "loadBalancerName");
checkNotNull(protocol, "protocol");
checkArgument(protocol.toUpperCase().equals("HTTP") || protocol.toUpperCase().equals("TCP"),
"Acceptable values for protocol are HTTP or TCP");
Map> locationMap = Maps.newHashMap();
- for (NodeMetadata node : Iterables.filter(context.getComputeService()
- .listNodesDetailsMatching(NodePredicates.all()), Predicates.and(filter, Predicates
- .not(NodePredicates.TERMINATED)))) {
+ for (NodeMetadata node : Iterables.filter(context.getComputeService().listNodesDetailsMatching(
+ NodePredicates.all()), Predicates.and(filter, Predicates.not(NodePredicates.TERMINATED)))) {
Set ids = locationMap.get(node.getLocation());
if (ids == null)
ids = Sets.newHashSet();
@@ -112,8 +113,8 @@ public class BaseLoadBalancerService implements LoadBalancerService {
Set dnsNames = Sets.newHashSet();
for (Location location : locationMap.keySet()) {
logger.debug(">> creating load balancer (%s)", loadBalancerName);
- String dnsName = loadBalancerStrategy.execute(location, loadBalancerName, protocol,
- loadBalancerPort, instancePort, locationMap.get(location));
+ String dnsName = loadBalancerStrategy.execute(location, loadBalancerName, protocol, loadBalancerPort,
+ instancePort, locationMap.get(location));
dnsNames.add(dnsName);
logger.debug("<< created load balancer (%s) DNS (%s)", loadBalancerName, dnsName);
}
@@ -131,4 +132,11 @@ public class BaseLoadBalancerService implements LoadBalancerService {
logger.debug("<< destroyed load balancer(%s) success(%s)", loadBalancer, successful);
}
+ public Set listLoadBalancers() {
+ return ImmutableSet.of();
+ // TODO
+ // Set loadBalancerSet = listLoadBalancersStrategy.execute();
+ // return loadBalancerSet;
+ }
+
}
\ No newline at end of file
diff --git a/compute/src/test/java/org/jclouds/compute/BaseComputeServiceLiveTest.java b/compute/src/test/java/org/jclouds/compute/BaseComputeServiceLiveTest.java
index 4500537cae..133243b8df 100755
--- a/compute/src/test/java/org/jclouds/compute/BaseComputeServiceLiveTest.java
+++ b/compute/src/test/java/org/jclouds/compute/BaseComputeServiceLiveTest.java
@@ -64,7 +64,6 @@ import org.jclouds.compute.predicates.OperatingSystemPredicates;
import org.jclouds.domain.Credentials;
import org.jclouds.domain.Location;
import org.jclouds.domain.LocationScope;
-import org.jclouds.http.HttpResponseException;
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
import org.jclouds.net.IPSocket;
import org.jclouds.predicates.RetryablePredicate;
@@ -266,8 +265,6 @@ public abstract class BaseComputeServiceLiveTest {
public void testCreateTwoNodesWithRunScript() throws Exception {
try {
client.destroyNodesMatching(withTag(tag));
- } catch (HttpResponseException e) {
- // TODO hosting.com throws 400 when we try to delete a vApp
} catch (NoSuchElementException e) {
}
diff --git a/core/src/main/java/org/jclouds/Constants.java b/core/src/main/java/org/jclouds/Constants.java
index 280cd79ca3..f4e8207aa5 100644
--- a/core/src/main/java/org/jclouds/Constants.java
+++ b/core/src/main/java/org/jclouds/Constants.java
@@ -30,21 +30,21 @@ public interface Constants {
*
* Amount of threads servicing the user requests and transformations
*/
- public static final String PROPERTY_USER_THREADS = "jclouds.user_threads";
+ public static final String PROPERTY_USER_THREADS = "jclouds.user-threads";
/**
* Integer property. default (20)
*
* Amount of threads servicing the I/O of http connections.
*/
- public static final String PROPERTY_IO_WORKER_THREADS = "jclouds.io_worker_threads";
+ public static final String PROPERTY_IO_WORKER_THREADS = "jclouds.io-worker-threads";
/**
* Integer property. default (20)
*
* Limits the amount of connections per context.
*/
- public static final String PROPERTY_MAX_CONNECTIONS_PER_CONTEXT = "jclouds.max_connections_per_context";
+ public static final String PROPERTY_MAX_CONNECTIONS_PER_CONTEXT = "jclouds.max-connections-per_context";
/**
* Integer property. default (0)
@@ -52,73 +52,73 @@ public interface Constants {
* Limits the amount of connections per host. 0 means indirectly limited by
* {@link #PROPERTY_MAX_CONNECTIONS_PER_CONTEXT}.
*/
- public static final String PROPERTY_MAX_CONNECTIONS_PER_HOST = "jclouds.max_connections_per_host";
+ public static final String PROPERTY_MAX_CONNECTIONS_PER_HOST = "jclouds.max-connections-per-host";
/**
* Integer property. default (2)
*
* Maximum amount of http session failures before a pool is disabled.
*/
- public static final String PROPERTY_MAX_SESSION_FAILURES = "jclouds.max_session_failures";
+ public static final String PROPERTY_MAX_SESSION_FAILURES = "jclouds.max-session-failures";
/**
* Integer property. default (75)
*
* Maximum amount of times to re_use an http connection. Services like Amazon S3 throw errors if
* connections are reused too many times.
*/
- public static final String PROPERTY_MAX_CONNECTION_REUSE = "jclouds.max_connection_reuse";
+ public static final String PROPERTY_MAX_CONNECTION_REUSE = "jclouds.max-connection-reuse";
/**
* int property. default (60000)
*
* How many milliseconds to wait before a socket connection times out. 0 means infinity.
*/
- public static final String PROPERTY_SO_TIMEOUT = "jclouds.so_timeout";
+ public static final String PROPERTY_SO_TIMEOUT = "jclouds.so-timeout";
/**
* Long property. default (60000)
*
* How many milliseconds to wait before a connection times out. 0 means infinity.
*/
- public static final String PROPERTY_CONNECTION_TIMEOUT = "jclouds.connection_timeout";
+ public static final String PROPERTY_CONNECTION_TIMEOUT = "jclouds.connection-timeout";
/**
* Long property. default (60)
*
* How many seconds to wait before creating a new session
*/
- public static final String PROPERTY_SESSION_INTERVAL = "jclouds.session_interval";
+ public static final String PROPERTY_SESSION_INTERVAL = "jclouds.session-interval";
/**
* Boolean property.
*
* Whether or not to use the proxy setup from the underlying operating system.
*/
- public static final String PROPERTY_PROXY_SYSTEM = "jclouds.use_system_proxy";
+ public static final String PROPERTY_PROXY_SYSTEM = "jclouds.use-system-proxy";
/**
* String property.
*
*Explicitly sets the host name of a HTTP proxy server.
*/
- public static final String PROPERTY_PROXY_HOST = "jclouds.proxy_host";
+ public static final String PROPERTY_PROXY_HOST = "jclouds.proxy-host";
/**
* Integer property.
*
* Explicitly sets the port number of a HTTP proxy server.
*/
- public static final String PROPERTY_PROXY_PORT = "jclouds.proxy_port";
+ public static final String PROPERTY_PROXY_PORT = "jclouds.proxy-port";
/**
* String property.
*
* Explicitly sets the user name credential for proxy authentication.
*/
- public static final String PROPERTY_PROXY_USER = "jclouds.proxy_user";
+ public static final String PROPERTY_PROXY_USER = "jclouds.proxy-user";
/**
* String property.
*
* Explicitly sets the password credential for proxy authentication.
*/
- public static final String PROPERTY_PROXY_PASSWORD = "jclouds.proxy_password";
+ public static final String PROPERTY_PROXY_PASSWORD = "jclouds.proxy-password";
/**
* Integer property.
@@ -126,26 +126,32 @@ public interface Constants {
* Commands are retried, if the problem on the server side was a resolvable conflict. However,
* the maximum tries of a single command is bounded.
*/
- public static final String PROPERTY_MAX_RETRIES = "jclouds.max_retries";
+ public static final String PROPERTY_MAX_RETRIES = "jclouds.max-retries";
/**
* Integer property.
*
* Commands are limited to only a certain amount of redirects.
*/
- public static final String PROPERTY_MAX_REDIRECTS = "jclouds.max_redirects";
+ public static final String PROPERTY_MAX_REDIRECTS = "jclouds.max-redirects";
/**
* Long property.
*
* longest time a single request can take before throwing an exception.
*/
- public static final String PROPERTY_REQUEST_TIMEOUT = "jclouds.request_timeout";
+ public static final String PROPERTY_REQUEST_TIMEOUT = "jclouds.request-timeout";
/**
* Boolean property.
*
* allow mismatch between hostname and ssl cerificate. Set to true in DNS_based services like
* Amazon S3.
*/
- public static final String PROPERTY_RELAX_HOSTNAME = "jclouds.relax_hostname";
+ public static final String PROPERTY_RELAX_HOSTNAME = "jclouds.relax-hostname";
+ /**
+ * Boolean property.
+ *
+ * trust self-signed certs
+ */
+ public static final String PROPERTY_TRUST_ALL_CERTS = "jclouds.trust-all-certs";
/**
* Name of the logger that records all http headers from the client and the server.
*/
@@ -161,7 +167,7 @@ public interface Constants {
/**
* Name of the custom adapter bindings map for Json
*/
- public static final String PROPERTY_GSON_ADAPTERS = "jclouds.gson_adapters";
+ public static final String PROPERTY_GSON_ADAPTERS = "jclouds.gson-adapters";
/**
* String property.
@@ -182,7 +188,7 @@ public interface Constants {
*
* Explicitly identifies the version of an api.
*/
- public static final String PROPERTY_API_VERSION = "jclouds.api_version";
+ public static final String PROPERTY_API_VERSION = "jclouds.api-version";
/**
* String property.
diff --git a/core/src/main/java/org/jclouds/PropertiesBuilder.java b/core/src/main/java/org/jclouds/PropertiesBuilder.java
index 6b509773c4..21a312ca19 100755
--- a/core/src/main/java/org/jclouds/PropertiesBuilder.java
+++ b/core/src/main/java/org/jclouds/PropertiesBuilder.java
@@ -23,6 +23,7 @@ import static org.jclouds.Constants.PROPERTY_API_VERSION;
import static org.jclouds.Constants.PROPERTY_CONNECTION_TIMEOUT;
import static org.jclouds.Constants.PROPERTY_CREDENTIAL;
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
+import static org.jclouds.Constants.PROPERTY_IDENTITY;
import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_CONTEXT;
import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_HOST;
@@ -30,7 +31,6 @@ import static org.jclouds.Constants.PROPERTY_MAX_CONNECTION_REUSE;
import static org.jclouds.Constants.PROPERTY_MAX_REDIRECTS;
import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
import static org.jclouds.Constants.PROPERTY_MAX_SESSION_FAILURES;
-import static org.jclouds.Constants.PROPERTY_IDENTITY;
import static org.jclouds.Constants.PROPERTY_PROVIDER;
import static org.jclouds.Constants.PROPERTY_PROXY_HOST;
import static org.jclouds.Constants.PROPERTY_PROXY_PASSWORD;
@@ -40,6 +40,7 @@ import static org.jclouds.Constants.PROPERTY_PROXY_USER;
import static org.jclouds.Constants.PROPERTY_RELAX_HOSTNAME;
import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT;
+import static org.jclouds.Constants.PROPERTY_TRUST_ALL_CERTS;
import static org.jclouds.Constants.PROPERTY_USER_THREADS;
import java.util.Properties;
@@ -63,6 +64,14 @@ public class PropertiesBuilder {
return this;
}
+ /**
+ * @see org.jclouds.Constants.PROPERTY_TRUST_ALL_CERTS
+ */
+ public PropertiesBuilder trustAllCerts(boolean trust) {
+ properties.setProperty(PROPERTY_TRUST_ALL_CERTS, trust + "");
+ return this;
+ }
+
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_SYSTEM
*/
@@ -147,8 +156,7 @@ public class PropertiesBuilder {
* @see org.jclouds.Constants.PROPERTY_MAX_SESSION_FAILURES
*/
public PropertiesBuilder withMaxSessionFailures(int poolMaxSessionFailures) {
- properties.setProperty(PROPERTY_MAX_SESSION_FAILURES, Integer
- .toString(poolMaxSessionFailures));
+ properties.setProperty(PROPERTY_MAX_SESSION_FAILURES, Integer.toString(poolMaxSessionFailures));
return this;
}
@@ -173,8 +181,7 @@ public class PropertiesBuilder {
* @see org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_CONTEXT
*/
public PropertiesBuilder limitConnectionsTo(int connectionLimit) {
- properties.setProperty(PROPERTY_MAX_CONNECTIONS_PER_CONTEXT, Integer
- .toString(connectionLimit));
+ properties.setProperty(PROPERTY_MAX_CONNECTIONS_PER_CONTEXT, Integer.toString(connectionLimit));
return this;
}
diff --git a/core/src/main/java/org/jclouds/http/HttpUtils.java b/core/src/main/java/org/jclouds/http/HttpUtils.java
index 4af5d79d2e..c72266660e 100644
--- a/core/src/main/java/org/jclouds/http/HttpUtils.java
+++ b/core/src/main/java/org/jclouds/http/HttpUtils.java
@@ -117,6 +117,9 @@ public class HttpUtils {
@Inject(optional = true)
@Named(Constants.PROPERTY_PROXY_PASSWORD)
private String proxyPassword;
+ @Inject(optional = true)
+ @Named(Constants.PROPERTY_TRUST_ALL_CERTS)
+ private boolean trustAllCerts;
@Inject
public HttpUtils(@Named(Constants.PROPERTY_CONNECTION_TIMEOUT) int connectionTimeout,
@@ -169,6 +172,10 @@ public class HttpUtils {
return relaxHostname;
}
+ public boolean trustAllCerts() {
+ return trustAllCerts;
+ }
+
public boolean useSystemProxies() {
return systemProxies;
}
diff --git a/core/src/main/java/org/jclouds/http/config/JavaUrlHttpCommandExecutorServiceModule.java b/core/src/main/java/org/jclouds/http/config/JavaUrlHttpCommandExecutorServiceModule.java
index 95390cc27a..9925585cf3 100644
--- a/core/src/main/java/org/jclouds/http/config/JavaUrlHttpCommandExecutorServiceModule.java
+++ b/core/src/main/java/org/jclouds/http/config/JavaUrlHttpCommandExecutorServiceModule.java
@@ -19,12 +19,18 @@
package org.jclouds.http.config;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
import java.util.Map;
import javax.annotation.Resource;
+import javax.inject.Inject;
import javax.inject.Singleton;
import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
import org.jclouds.http.HttpCommandExecutorService;
import org.jclouds.http.TransformingHttpCommandExecutorService;
@@ -32,9 +38,13 @@ import org.jclouds.http.TransformingHttpCommandExecutorServiceImpl;
import org.jclouds.http.internal.JavaUrlHttpCommandExecutorService;
import org.jclouds.logging.Logger;
+import com.google.common.base.Supplier;
+import com.google.common.base.Throwables;
import com.google.common.collect.Maps;
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
/**
* Configures {@link JavaUrlHttpCommandExecutorService}.
@@ -52,11 +62,13 @@ public class JavaUrlHttpCommandExecutorServiceModule extends AbstractModule {
}
protected void bindClient() {
- bind(HttpCommandExecutorService.class).to(JavaUrlHttpCommandExecutorService.class).in(
- Scopes.SINGLETON);
+ bind(HttpCommandExecutorService.class).to(JavaUrlHttpCommandExecutorService.class).in(Scopes.SINGLETON);
bind(HostnameVerifier.class).to(LogToMapHostnameVerifier.class);
- bind(TransformingHttpCommandExecutorService.class).to(
- TransformingHttpCommandExecutorServiceImpl.class).in(Scopes.SINGLETON);
+ bind(TransformingHttpCommandExecutorService.class).to(TransformingHttpCommandExecutorServiceImpl.class).in(
+ Scopes.SINGLETON);
+ bind(new TypeLiteral>() {
+ }).annotatedWith(Names.named("untrusted")).to(new TypeLiteral() {
+ });
}
/**
@@ -77,4 +89,49 @@ public class JavaUrlHttpCommandExecutorServiceModule extends AbstractModule {
return true;
}
}
+
+ @Singleton
+ public static class UntrustedSSLContextSupplier implements Supplier {
+ private final TrustAllCerts trustAllCerts;
+
+ @Inject
+ UntrustedSSLContextSupplier(TrustAllCerts trustAllCerts) {
+ this.trustAllCerts = trustAllCerts;
+ }
+
+ @Override
+ public SSLContext get() {
+ try {
+ SSLContext sc;
+ sc = SSLContext.getInstance("SSL");
+ sc.init(null, new TrustManager[] { trustAllCerts }, new SecureRandom());
+ return sc;
+ } catch (Exception e) {
+ Throwables.propagate(e);
+ return null;
+ }
+
+ }
+ }
+
+ /**
+ *
+ * Used to trust all certs
+ *
+ * @author Adrian Cole
+ */
+ @Singleton
+ static class TrustAllCerts implements X509TrustManager {
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+
+ public void checkClientTrusted(X509Certificate[] certs, String authType) {
+ return;
+ }
+
+ public void checkServerTrusted(X509Certificate[] certs, String authType) {
+ return;
+ }
+ }
}
\ No newline at end of file
diff --git a/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java b/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
index 9d85444857..6b1f228a48 100644
--- a/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
+++ b/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
@@ -47,6 +47,7 @@ import javax.inject.Named;
import javax.inject.Singleton;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
import javax.ws.rs.core.HttpHeaders;
import org.jclouds.Constants;
@@ -62,6 +63,7 @@ import org.jclouds.io.Payload;
import org.jclouds.io.Payloads;
import org.jclouds.logging.Logger;
+import com.google.common.base.Supplier;
import com.google.common.base.Throwables;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
@@ -77,6 +79,7 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
public static final String USER_AGENT = "jclouds/1.0 java/" + System.getProperty("java.version");
@Resource
protected Logger logger = Logger.NULL;
+ private final Supplier untrustedSSLContextProvider;
private final HostnameVerifier verifier;
private final Field methodField;
@@ -84,11 +87,13 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
public JavaUrlHttpCommandExecutorService(HttpUtils utils,
@Named(Constants.PROPERTY_IO_WORKER_THREADS) ExecutorService ioWorkerExecutor,
DelegatingRetryHandler retryHandler, IOExceptionRetryHandler ioRetryHandler,
- DelegatingErrorHandler errorHandler, HttpWire wire, HostnameVerifier verifier) throws SecurityException,
+ DelegatingErrorHandler errorHandler, HttpWire wire, HostnameVerifier verifier,
+ @Named("untrusted") Supplier untrustedSSLContextProvider) throws SecurityException,
NoSuchFieldException {
super(utils, ioWorkerExecutor, retryHandler, ioRetryHandler, errorHandler, wire);
if (utils.getMaxConnections() > 0)
System.setProperty("http.maxConnections", String.valueOf(checkNotNull(utils, "utils").getMaxConnections()));
+ this.untrustedSSLContextProvider = checkNotNull(untrustedSSLContextProvider, "untrustedSSLContextProvider");
this.verifier = checkNotNull(verifier, "verifier");
this.methodField = HttpURLConnection.class.getDeclaredField("method");
methodField.setAccessible(true);
@@ -160,9 +165,12 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
} else {
connection = (HttpURLConnection) url.openConnection();
}
- if (utils.relaxHostname() && connection instanceof HttpsURLConnection) {
+ if (connection instanceof HttpsURLConnection) {
HttpsURLConnection sslCon = (HttpsURLConnection) connection;
- sslCon.setHostnameVerifier(verifier);
+ if (utils.relaxHostname())
+ sslCon.setHostnameVerifier(verifier);
+ if (utils.trustAllCerts())
+ sslCon.setSSLSocketFactory(untrustedSSLContextProvider.get().getSocketFactory());
}
connection.setDoOutput(true);
connection.setAllowUserInteraction(false);
diff --git a/core/src/main/resources/rest.properties b/core/src/main/resources/rest.properties
index fe611b190c..520c44adc7 100644
--- a/core/src/main/resources/rest.properties
+++ b/core/src/main/resources/rest.properties
@@ -59,9 +59,6 @@ trmk-vcloudexpress.propertiesbuilder=org.jclouds.vcloud.terremark.TerremarkVClou
trmk-ecloud.contextbuilder=org.jclouds.vcloud.terremark.TerremarkECloudContextBuilder
trmk-ecloud.propertiesbuilder=org.jclouds.vcloud.terremark.TerremarkECloudPropertiesBuilder
-hostingdotcom.contextbuilder=org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudContextBuilder
-hostingdotcom.propertiesbuilder=org.jclouds.vcloud.hostingdotcom.HostingDotComVCloudPropertiesBuilder
-
chef.contextbuilder=org.jclouds.chef.ChefContextBuilder
chef.propertiesbuilder=org.jclouds.chef.ChefPropertiesBuilder
@@ -74,14 +71,20 @@ opscodeplatform.propertiesbuilder=org.jclouds.opscodeplatform.OpscodePlatformPro
vcloud.contextbuilder=org.jclouds.vcloud.VCloudContextBuilder
vcloud.propertiesbuilder=org.jclouds.vcloud.VCloudPropertiesBuilder
+vcloudexpress.contextbuilder=org.jclouds.vcloud.VCloudExpressContextBuilder
+vcloudexpress.propertiesbuilder=org.jclouds.vcloud.VCloudExpressPropertiesBuilder
+
eucalyptus.contextbuilder=org.jclouds.aws.ec2.EC2ContextBuilder
eucalyptus.propertiesbuilder=org.jclouds.aws.ec2.EucalyptusPropertiesBuilder
cloudservers.contextbuilder=org.jclouds.rackspace.cloudservers.CloudServersContextBuilder
cloudservers.propertiesbuilder=org.jclouds.rackspace.RackspacePropertiesBuilder
-bluelock.contextbuilder=org.jclouds.vcloud.bluelock.BlueLockVCloudContextBuilder
-bluelock.propertiesbuilder=org.jclouds.vcloud.bluelock.BlueLockVCloudPropertiesBuilder
+bluelock-vclouddirector.contextbuilder=org.jclouds.vcloud.bluelock.BlueLockVCloudDirectorContextBuilder
+bluelock-vclouddirector.propertiesbuilder=org.jclouds.vcloud.bluelock.BlueLockVCloudDirectorPropertiesBuilder
+
+bluelock-vcloudexpress.contextbuilder=org.jclouds.vcloud.bluelock.BlueLockVCloudExpressContextBuilder
+bluelock-vcloudexpress.propertiesbuilder=org.jclouds.vcloud.bluelock.BlueLockVCloudExpressPropertiesBuilder
gogrid.propertiesbuilder=org.jclouds.gogrid.GoGridPropertiesBuilder
gogrid.contextbuilder=org.jclouds.gogrid.GoGridContextBuilder
diff --git a/core/src/test/java/org/jclouds/domain/CredentialsTest.java b/core/src/test/java/org/jclouds/domain/CredentialsTest.java
index bc0af26ddb..767889bdfd 100644
--- a/core/src/test/java/org/jclouds/domain/CredentialsTest.java
+++ b/core/src/test/java/org/jclouds/domain/CredentialsTest.java
@@ -45,7 +45,7 @@ public class CredentialsTest {
assertEquals(creds.credential, "Base64==");
}
- public void testHosting() {
+ public void testDollar() {
Credentials creds = Credentials.parse(URI
.create("compute://user%40domain:pa%24sword@hostingdotcom"));
assertEquals(creds.identity, "user@domain");
diff --git a/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java b/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java
index c494c8caa5..26d9186bbd 100644
--- a/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java
+++ b/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java
@@ -31,6 +31,7 @@ import java.util.concurrent.Executors;
import javax.inject.Provider;
import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.ws.rs.core.UriBuilder;
@@ -50,6 +51,7 @@ import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
+import com.google.common.base.Supplier;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
@@ -112,12 +114,20 @@ public class BackoffLimitedRetryHandlerTest {
RedirectionRetryHandler retry = new RedirectionRetryHandler(uriBuilderProvider, backoff);
JavaUrlHttpCommandExecutorService httpService = new JavaUrlHttpCommandExecutorService(utils, execService,
new DelegatingRetryHandler(backoff, retry), new BackoffLimitedRetryHandler(),
- new DelegatingErrorHandler(), new HttpWire(), new HostnameVerifier(){
+ new DelegatingErrorHandler(), new HttpWire(), new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return false;
- }});
+ }
+ }, new Supplier() {
+
+ @Override
+ public SSLContext get() {
+ return null;
+ }
+
+ });
executorService = new TransformingHttpCommandExecutorServiceImpl(httpService, execService);
}
diff --git a/core/src/test/java/org/jclouds/util/HttpUtilsTest.java b/core/src/test/java/org/jclouds/util/HttpUtilsTest.java
index 6e1282ebec..9d1b49b41f 100644
--- a/core/src/test/java/org/jclouds/util/HttpUtilsTest.java
+++ b/core/src/test/java/org/jclouds/util/HttpUtilsTest.java
@@ -136,10 +136,10 @@ public class HttpUtilsTest extends PerformanceTest {
assertEquals(creds, URI.create("compute://identity:Base64==@azureblob/container-hyphen/prefix"));
}
- public void testHosting() {
- URI creds = HttpUtils.createUri("compute://user@domain:pa$sword@hostingdotcom");
+ public void testDollar() {
+ URI creds = HttpUtils.createUri("compute://user@domain:pa$sword@host");
assertEquals(creds.getUserInfo(), "user@domain:pa$sword");
- assertEquals(creds, URI.create("compute://user%40domain:pa%24sword@hostingdotcom"));
+ assertEquals(creds, URI.create("compute://user%40domain:pa%24sword@host"));
}
public void testTerremark() {
diff --git a/tools/antcontrib/samples/cargooverssh/build.xml b/tools/antcontrib/samples/cargooverssh/build.xml
index fa4302117a..409ea99620 100644
--- a/tools/antcontrib/samples/cargooverssh/build.xml
+++ b/tools/antcontrib/samples/cargooverssh/build.xml
@@ -39,14 +39,14 @@
-->
diff --git a/tools/antcontrib/samples/compute/build.xml b/tools/antcontrib/samples/compute/build.xml
index aa75b99227..043f0ad227 100644
--- a/tools/antcontrib/samples/compute/build.xml
+++ b/tools/antcontrib/samples/compute/build.xml
@@ -30,14 +30,14 @@
diff --git a/vcloud/bluelock/pom.xml b/vcloud/bluelock/pom.xml
index 83b6a1d20a..4794df66f5 100644
--- a/vcloud/bluelock/pom.xml
+++ b/vcloud/bluelock/pom.xml
@@ -31,9 +31,18 @@
jclouds-bluelockjclouds bluelock Components Corejclouds core components to access bluelock
+
- ${jclouds.bluelock.user}
- ${jclouds.bluelock.password}
+
+
+ https://express.bluelock.com/api
+ 0.8
+ FIXME
+ FIXME
+ https://vcenterprise.bluelock.com/api
+ 1.0
+ FIXME
+ FIXME
@@ -56,5 +65,66 @@
test
-
+
+
+ live
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ integration
+ integration-test
+
+ test
+
+
+
+
+ bluelock-vcloudexpress.endpoint
+ ${bluelock-vcloudexpress.endpoint}
+
+
+ bluelock-vcloudexpress.apiversion
+ ${bluelock-vcloudexpress.apiversion}
+
+
+ bluelock-vcloudexpress.identity
+ ${bluelock-vcloudexpress.identity}
+
+
+ bluelock-vcloudexpress.credential
+ ${bluelock-vcloudexpress.credential}
+
+
+ bluelock-vclouddirector.endpoint
+ ${bluelock-vclouddirector.endpoint}
+
+
+ bluelock-vclouddirector.apiversion
+ ${bluelock-vclouddirector.apiversion}
+
+
+ bluelock-vclouddirector.identity
+ ${bluelock-vclouddirector.identity}
+
+
+ bluelock-vclouddirector.credential
+ ${bluelock-vclouddirector.credential}
+
+
+ jclouds.compute.blacklist.nodes
+ ${jclouds.compute.blacklist.nodes}
+
+
+
+
+
+
+
+
+
+
diff --git a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudContextBuilder.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorContextBuilder.java
similarity index 82%
rename from vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudContextBuilder.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorContextBuilder.java
index 6c65ecd46d..7f9c2e80e8 100644
--- a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudContextBuilder.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorContextBuilder.java
@@ -25,8 +25,8 @@ import java.util.Properties;
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
import org.jclouds.logging.jdk.config.JDKLoggingModule;
import org.jclouds.vcloud.VCloudContextBuilder;
-import org.jclouds.vcloud.bluelock.compute.config.BlueLockVCloudComputeServiceContextModule;
-import org.jclouds.vcloud.bluelock.config.BlueLockVCloudRestClientModule;
+import org.jclouds.vcloud.bluelock.compute.config.BlueLockVCloudDirectorComputeServiceContextModule;
+import org.jclouds.vcloud.bluelock.config.BlueLockVCloudDirectorRestClientModule;
import com.google.inject.Injector;
import com.google.inject.Module;
@@ -44,20 +44,20 @@ import com.google.inject.Module;
* @author Adrian Cole
* @see BlueLockVCloudComputeServiceContext
*/
-public class BlueLockVCloudContextBuilder extends VCloudContextBuilder {
+public class BlueLockVCloudDirectorContextBuilder extends VCloudContextBuilder {
- public BlueLockVCloudContextBuilder(Properties props) {
+ public BlueLockVCloudDirectorContextBuilder(Properties props) {
super(props);
}
@Override
protected void addContextModule(List modules) {
- modules.add(new BlueLockVCloudComputeServiceContextModule());
+ modules.add(new BlueLockVCloudDirectorComputeServiceContextModule());
}
@Override
protected void addClientModule(List modules) {
- modules.add(new BlueLockVCloudRestClientModule());
+ modules.add(new BlueLockVCloudDirectorRestClientModule());
}
}
diff --git a/vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudPropertiesBuilder.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorPropertiesBuilder.java
similarity index 67%
rename from vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudPropertiesBuilder.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorPropertiesBuilder.java
index e9a6a1b1b4..dd171d19c6 100644
--- a/vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudPropertiesBuilder.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorPropertiesBuilder.java
@@ -17,31 +17,28 @@
* ====================================================================
*/
-package org.jclouds.vcloud.hostingdotcom;
+package org.jclouds.vcloud.bluelock;
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
-import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED;
import java.util.Properties;
import org.jclouds.vcloud.VCloudPropertiesBuilder;
/**
- * Builds properties used in hosting.com VCloud Clients
+ * Builds properties used in bluelock VCloud Clients
*
* @author Adrian Cole
*/
-public class HostingDotComVCloudPropertiesBuilder extends VCloudPropertiesBuilder {
+public class BlueLockVCloudDirectorPropertiesBuilder extends VCloudPropertiesBuilder {
@Override
protected Properties defaultProperties() {
Properties properties = super.defaultProperties();
- properties.setProperty(PROPERTY_ENDPOINT, "https://vcloud.safesecureweb.com/api");
- properties.setProperty(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED, 45 * 60 * 1000l + "");
+ properties.setProperty(PROPERTY_ENDPOINT, "https://vcenterprise.bluelock.com/api");
return properties;
}
- public HostingDotComVCloudPropertiesBuilder(Properties properties) {
+ public BlueLockVCloudDirectorPropertiesBuilder(Properties properties) {
super(properties);
}
-
}
diff --git a/vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudContextBuilder.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressContextBuilder.java
similarity index 67%
rename from vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudContextBuilder.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressContextBuilder.java
index a760e292c7..7dd776267c 100644
--- a/vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudContextBuilder.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressContextBuilder.java
@@ -17,23 +17,23 @@
* ====================================================================
*/
-package org.jclouds.vcloud.hostingdotcom;
+package org.jclouds.vcloud.bluelock;
import java.util.List;
import java.util.Properties;
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
import org.jclouds.logging.jdk.config.JDKLoggingModule;
-import org.jclouds.vcloud.VCloudContextBuilder;
-import org.jclouds.vcloud.hostingdotcom.compute.config.HostingDotComVCloudComputeServiceContextModule;
-import org.jclouds.vcloud.hostingdotcom.config.HostingDotComVCloudRestClientModule;
+import org.jclouds.vcloud.VCloudExpressContextBuilder;
+import org.jclouds.vcloud.bluelock.compute.config.BlueLockVCloudExpressComputeServiceContextModule;
+import org.jclouds.vcloud.bluelock.config.BlueLockVCloudExpressRestClientModule;
import com.google.inject.Injector;
import com.google.inject.Module;
/**
- * Creates {@link HostingDotComVCloudComputeServiceContext} or {@link Injector} instances based on
- * the most commonly requested arguments.
+ * Creates {@link BlueLockVCloudComputeServiceContext} or {@link Injector} instances based on the
+ * most commonly requested arguments.
*
* Note that Threadsafe objects will be bound as singletons to the Injector or Context provided.
*
@@ -42,22 +42,22 @@ import com.google.inject.Module;
* {@link JavaUrlHttpCommandExecutorServiceModule http transports} will be installed.
*
* @author Adrian Cole
- * @see HostingDotComVCloudComputeServiceContext
+ * @see BlueLockVCloudComputeServiceContext
*/
-public class HostingDotComVCloudContextBuilder extends VCloudContextBuilder {
+public class BlueLockVCloudExpressContextBuilder extends VCloudExpressContextBuilder {
- public HostingDotComVCloudContextBuilder(Properties props) {
+ public BlueLockVCloudExpressContextBuilder(Properties props) {
super(props);
}
@Override
protected void addContextModule(List modules) {
- modules.add(new HostingDotComVCloudComputeServiceContextModule());
+ modules.add(new BlueLockVCloudExpressComputeServiceContextModule());
}
@Override
protected void addClientModule(List modules) {
- modules.add(new HostingDotComVCloudRestClientModule());
+ modules.add(new BlueLockVCloudExpressRestClientModule());
}
}
diff --git a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudPropertiesBuilder.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressPropertiesBuilder.java
similarity index 84%
rename from vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudPropertiesBuilder.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressPropertiesBuilder.java
index d86391b17d..1d1ee131e6 100644
--- a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudPropertiesBuilder.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressPropertiesBuilder.java
@@ -23,14 +23,14 @@ import static org.jclouds.Constants.PROPERTY_ENDPOINT;
import java.util.Properties;
-import org.jclouds.vcloud.VCloudPropertiesBuilder;
+import org.jclouds.vcloud.VCloudExpressPropertiesBuilder;
/**
* Builds properties used in bluelock VCloud Clients
*
* @author Adrian Cole
*/
-public class BlueLockVCloudPropertiesBuilder extends VCloudPropertiesBuilder {
+public class BlueLockVCloudExpressPropertiesBuilder extends VCloudExpressPropertiesBuilder {
@Override
protected Properties defaultProperties() {
Properties properties = super.defaultProperties();
@@ -38,7 +38,7 @@ public class BlueLockVCloudPropertiesBuilder extends VCloudPropertiesBuilder {
return properties;
}
- public BlueLockVCloudPropertiesBuilder(Properties properties) {
+ public BlueLockVCloudExpressPropertiesBuilder(Properties properties) {
super(properties);
}
}
diff --git a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudComputeClient.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudDirectorComputeClient.java
similarity index 82%
rename from vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudComputeClient.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudDirectorComputeClient.java
index 74e627efe5..58411a6e40 100644
--- a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudComputeClient.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudDirectorComputeClient.java
@@ -29,9 +29,9 @@ import org.jclouds.compute.domain.NodeState;
import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
import org.jclouds.domain.Credentials;
import org.jclouds.vcloud.VCloudClient;
-import org.jclouds.vcloud.compute.BaseVCloudComputeClient;
+import org.jclouds.vcloud.compute.internal.VCloudComputeClientImpl;
import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.domain.VAppStatus;
+import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VAppTemplate;
import com.google.common.base.Predicate;
@@ -40,12 +40,12 @@ import com.google.common.base.Predicate;
* @author Adrian Cole
*/
@Singleton
-public class BlueLockVCloudComputeClient extends BaseVCloudComputeClient {
+public class BlueLockVCloudDirectorComputeClient extends VCloudComputeClientImpl {
private final PopulateDefaultLoginCredentialsForImageStrategy credentialsProvider;
@Inject
- protected BlueLockVCloudComputeClient(PopulateDefaultLoginCredentialsForImageStrategy credentialsProvider,
- VCloudClient client, Predicate successTester, Map vAppStatusToNodeState) {
+ protected BlueLockVCloudDirectorComputeClient(PopulateDefaultLoginCredentialsForImageStrategy credentialsProvider,
+ VCloudClient client, Predicate successTester, Map vAppStatusToNodeState) {
super(client, successTester, vAppStatusToNodeState);
this.credentialsProvider = credentialsProvider;
}
diff --git a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudExpressComputeClient.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudExpressComputeClient.java
new file mode 100644
index 0000000000..cfda41e4ba
--- /dev/null
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudExpressComputeClient.java
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.bluelock.compute;
+
+import java.net.URI;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.domain.NodeState;
+import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
+import org.jclouds.domain.Credentials;
+import org.jclouds.vcloud.VCloudExpressClient;
+import org.jclouds.vcloud.compute.internal.VCloudExpressComputeClientImpl;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.Status;
+import org.jclouds.vcloud.domain.VAppTemplate;
+
+import com.google.common.base.Predicate;
+
+/**
+ * @author Adrian Cole
+ */
+@Singleton
+public class BlueLockVCloudExpressComputeClient extends VCloudExpressComputeClientImpl {
+ private final PopulateDefaultLoginCredentialsForImageStrategy credentialsProvider;
+
+ @Inject
+ protected BlueLockVCloudExpressComputeClient(PopulateDefaultLoginCredentialsForImageStrategy credentialsProvider,
+ VCloudExpressClient client, Predicate successTester, Map vAppStatusToNodeState) {
+ super(client, successTester, vAppStatusToNodeState);
+ this.credentialsProvider = credentialsProvider;
+ }
+
+ @Override
+ protected Map parseAndValidateResponse(VAppTemplate template, VApp vAppResponse) {
+ Credentials credentials = credentialsProvider.execute(template);
+ Map toReturn = super.parseResponse(template, vAppResponse);
+ toReturn.put("username", credentials.identity);
+ toReturn.put("password", credentials.credential);
+ return toReturn;
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudComputeServiceContextModule.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudDirectorComputeServiceContextModule.java
similarity index 81%
rename from vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudComputeServiceContextModule.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudDirectorComputeServiceContextModule.java
index 1fdea89539..acbf6d57e1 100644
--- a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudComputeServiceContextModule.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudDirectorComputeServiceContextModule.java
@@ -23,9 +23,9 @@ import java.util.Set;
import org.jclouds.compute.domain.Size;
import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
-import org.jclouds.vcloud.bluelock.compute.BlueLockVCloudComputeClient;
+import org.jclouds.vcloud.bluelock.compute.BlueLockVCloudDirectorComputeClient;
import org.jclouds.vcloud.bluelock.compute.config.suppliers.ParseSizeFromImageSupplier;
-import org.jclouds.vcloud.bluelock.compute.functions.BlueLockImageForVAppTemplate;
+import org.jclouds.vcloud.bluelock.compute.functions.BlueLockVCloudImageForVAppTemplate;
import org.jclouds.vcloud.bluelock.compute.strategy.DefaultLoginCredentialsFromBlueLockFAQ;
import org.jclouds.vcloud.compute.VCloudComputeClient;
import org.jclouds.vcloud.compute.config.VCloudComputeServiceContextModule;
@@ -40,13 +40,13 @@ import com.google.inject.Injector;
*
* @author Adrian Cole
*/
-public class BlueLockVCloudComputeServiceContextModule extends VCloudComputeServiceContextModule {
+public class BlueLockVCloudDirectorComputeServiceContextModule extends VCloudComputeServiceContextModule {
@Override
protected void configure() {
super.configure();
- bind(ImageForVAppTemplate.class).to(BlueLockImageForVAppTemplate.class);
- bind(VCloudComputeClient.class).to(BlueLockVCloudComputeClient.class);
+ bind(ImageForVAppTemplate.class).to(BlueLockVCloudImageForVAppTemplate.class);
+ bind(VCloudComputeClient.class).to(BlueLockVCloudDirectorComputeClient.class);
bind(PopulateDefaultLoginCredentialsForImageStrategy.class).to(DefaultLoginCredentialsFromBlueLockFAQ.class);
}
diff --git a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudExpressComputeServiceContextModule.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudExpressComputeServiceContextModule.java
new file mode 100644
index 0000000000..ff3659e864
--- /dev/null
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/config/BlueLockVCloudExpressComputeServiceContextModule.java
@@ -0,0 +1,57 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.bluelock.compute.config;
+
+import java.util.Set;
+
+import org.jclouds.compute.domain.Size;
+import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
+import org.jclouds.vcloud.bluelock.compute.BlueLockVCloudExpressComputeClient;
+import org.jclouds.vcloud.bluelock.compute.config.suppliers.ParseSizeFromImageSupplier;
+import org.jclouds.vcloud.bluelock.compute.functions.BlueLockVCloudImageForVAppTemplate;
+import org.jclouds.vcloud.bluelock.compute.strategy.DefaultLoginCredentialsFromBlueLockFAQ;
+import org.jclouds.vcloud.compute.VCloudExpressComputeClient;
+import org.jclouds.vcloud.compute.config.VCloudExpressComputeServiceContextModule;
+import org.jclouds.vcloud.compute.functions.ImageForVAppTemplate;
+
+import com.google.common.base.Supplier;
+import com.google.inject.Injector;
+
+/**
+ * Configures the {@link BlueLockVCloudComputeServiceContext}; requires
+ * {@link BlueLockVCloudExpressComputeClient} bound.
+ *
+ * @author Adrian Cole
+ */
+public class BlueLockVCloudExpressComputeServiceContextModule extends VCloudExpressComputeServiceContextModule {
+
+ @Override
+ protected void configure() {
+ super.configure();
+ bind(ImageForVAppTemplate.class).to(BlueLockVCloudImageForVAppTemplate.class);
+ bind(VCloudExpressComputeClient.class).to(BlueLockVCloudExpressComputeClient.class);
+ bind(PopulateDefaultLoginCredentialsForImageStrategy.class).to(DefaultLoginCredentialsFromBlueLockFAQ.class);
+ }
+
+ @Override
+ protected Supplier> getSourceSizeSupplier(Injector injector) {
+ return injector.getInstance(ParseSizeFromImageSupplier.class);
+ }
+}
diff --git a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/functions/BlueLockImageForVAppTemplate.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/functions/BlueLockVCloudImageForVAppTemplate.java
similarity index 89%
rename from vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/functions/BlueLockImageForVAppTemplate.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/functions/BlueLockVCloudImageForVAppTemplate.java
index cc0d620607..1e1e12c70a 100644
--- a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/functions/BlueLockImageForVAppTemplate.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/compute/functions/BlueLockVCloudImageForVAppTemplate.java
@@ -31,10 +31,10 @@ import org.jclouds.vcloud.compute.functions.ImageForVAppTemplate;
* @author Adrian Cole
*/
@Singleton
-public class BlueLockImageForVAppTemplate extends ImageForVAppTemplate {
+public class BlueLockVCloudImageForVAppTemplate extends ImageForVAppTemplate {
@Inject
- protected BlueLockImageForVAppTemplate(FindLocationForResource findLocationForResource,
+ protected BlueLockVCloudImageForVAppTemplate(FindLocationForResource findLocationForResource,
PopulateDefaultLoginCredentialsForImageStrategy credentialsProvider) {
super(findLocationForResource, credentialsProvider);
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/Organization.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudDirectorRestClientModule.java
similarity index 57%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/domain/Organization.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudDirectorRestClientModule.java
index 4701e47ad9..2d552cbd0b 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/Organization.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudDirectorRestClientModule.java
@@ -17,32 +17,19 @@
* ====================================================================
*/
-package org.jclouds.vcloud.domain;
+package org.jclouds.vcloud.bluelock.config;
-import java.util.Map;
-
-import org.jclouds.vcloud.domain.internal.OrganizationImpl;
-import org.jclouds.vcloud.endpoints.Catalog;
-import org.jclouds.vcloud.endpoints.Org;
-import org.jclouds.vcloud.endpoints.TasksList;
-import org.jclouds.vcloud.endpoints.VDC;
-
-import com.google.inject.ImplementedBy;
+import org.jclouds.http.RequiresHttp;
+import org.jclouds.rest.ConfiguresRestClient;
+import org.jclouds.vcloud.config.VCloudRestClientModule;
/**
+ * Configures the VCloud authentication service connection, including logging and http transport.
+ *
* @author Adrian Cole
*/
-@Org
-@ImplementedBy(OrganizationImpl.class)
-public interface Organization extends NamedResource {
+@RequiresHttp
+@ConfiguresRestClient
+public class BlueLockVCloudDirectorRestClientModule extends VCloudRestClientModule {
- @Catalog
- Map getCatalogs();
-
- @VDC
- Map getVDCs();
-
- @TasksList
- Map getTasksLists();
-
-}
\ No newline at end of file
+}
diff --git a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudRestClientModule.java b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudExpressRestClientModule.java
similarity index 79%
rename from vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudRestClientModule.java
rename to vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudExpressRestClientModule.java
index 3e56163d16..9d9ca3714f 100644
--- a/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudRestClientModule.java
+++ b/vcloud/bluelock/src/main/java/org/jclouds/vcloud/bluelock/config/BlueLockVCloudExpressRestClientModule.java
@@ -24,34 +24,30 @@ import static org.jclouds.Constants.PROPERTY_IDENTITY;
import java.net.URI;
import java.util.Map;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
import javax.inject.Named;
import org.jclouds.http.RequiresHttp;
import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.vcloud.VCloudClient;
-import org.jclouds.vcloud.config.VCloudRestClientModule;
+import org.jclouds.vcloud.CommonVCloudClient;
+import org.jclouds.vcloud.config.VCloudExpressRestClientModule;
import org.jclouds.vcloud.domain.NamedResource;
-import org.jclouds.vcloud.domain.Organization;
+import org.jclouds.vcloud.domain.Org;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
/**
- * Configures the VCloud authentication service connection, including logging
- * and http transport.
+ * Configures the VCloud authentication service connection, including logging and http transport.
*
* @author Adrian Cole
*/
@RequiresHttp
@ConfiguresRestClient
-public class BlueLockVCloudRestClientModule extends VCloudRestClientModule {
+public class BlueLockVCloudExpressRestClientModule extends VCloudExpressRestClientModule {
@Override
- protected URI provideDefaultNetwork(VCloudClient client) throws InterruptedException, ExecutionException,
- TimeoutException {
+ protected URI provideDefaultNetwork(CommonVCloudClient client) {
org.jclouds.vcloud.domain.VDC vDC = client.findVDCInOrgNamed(null, null);
Map networks = vDC.getAvailableNetworks();
checkState(networks.size() > 0, "No networks present in vDC: " + vDC.getName());
@@ -66,7 +62,7 @@ public class BlueLockVCloudRestClientModule extends VCloudRestClientModule {
}
@Override
- protected URI provideCatalog(Organization org, @Named(PROPERTY_IDENTITY) final String user) {
+ protected URI provideCatalog(Org org, @Named(PROPERTY_IDENTITY) final String user) {
checkState(org.getCatalogs().size() > 0, "No catalogs present in org: " + org.getName());
return Iterables.getOnlyElement(Iterables.filter(org.getCatalogs().values(), new Predicate() {
diff --git a/vcloud/hostingdotcom/src/test/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudClientLiveTest.java b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorClientLiveTest.java
similarity index 60%
rename from vcloud/hostingdotcom/src/test/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudClientLiveTest.java
rename to vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorClientLiveTest.java
index f46f6b8f00..929c25059a 100644
--- a/vcloud/hostingdotcom/src/test/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudClientLiveTest.java
+++ b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudDirectorClientLiveTest.java
@@ -11,20 +11,20 @@
*
* 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.
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either director or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
-package org.jclouds.vcloud.hostingdotcom;
+package org.jclouds.vcloud.bluelock;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Properties;
+import org.jclouds.compute.ComputeServiceContextFactory;
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
-import org.jclouds.rest.RestContextFactory;
import org.jclouds.vcloud.VCloudClientLiveTest;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
@@ -33,21 +33,22 @@ import com.google.common.collect.ImmutableSet;
import com.google.inject.Module;
/**
- * Tests behavior of {@code HostingDotComVCloudClient}
+ * Tests behavior of {@code BlueLockVCloudClient}
*
* @author Adrian Cole
*/
-@Test(groups = "live", sequential = true, testName = "vcloud.HostingDotComVCloudClientLiveTest")
-public class HostingDotComVCloudClientLiveTest extends VCloudClientLiveTest {
+@Test(groups = "live", sequential = true, testName = "bluelock.BlueLockVCloudDirectorClientLiveTest")
+public class BlueLockVCloudDirectorClientLiveTest extends VCloudClientLiveTest {
@BeforeGroups(groups = { "live" })
@Override
public void setupClient() {
- identity = checkNotNull(System.getProperty("jclouds.test.identity"), "jclouds.test.identity");
- String credential = checkNotNull(System.getProperty("jclouds.test.credential"), "jclouds.test.credential");
-
- context = new RestContextFactory().createContext("hostingdotcom", identity, credential, ImmutableSet
- . of(new Log4JLoggingModule()), new Properties());
+ identity = checkNotNull(System.getProperty("bluelock-vclouddirector.identity"),
+ "bluelock-vclouddirector.identity");
+ String credential = checkNotNull(System.getProperty("bluelock-vclouddirector.credential"),
+ "bluelock-vclouddirector.credential");
+ context = new ComputeServiceContextFactory().createContext("bluelock-vclouddirector", identity, credential, ImmutableSet
+ . of(new Log4JLoggingModule()), new Properties()).getProviderSpecificContext();
connection = context.getApi();
}
diff --git a/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudClientLiveTest.java b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressClientLiveTest.java
similarity index 67%
rename from vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudClientLiveTest.java
rename to vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressClientLiveTest.java
index 40cb827765..0b6412b02f 100644
--- a/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudClientLiveTest.java
+++ b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/BlueLockVCloudExpressClientLiveTest.java
@@ -23,9 +23,9 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Properties;
+import org.jclouds.compute.ComputeServiceContextFactory;
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
-import org.jclouds.rest.RestContextFactory;
-import org.jclouds.vcloud.VCloudClientLiveTest;
+import org.jclouds.vcloud.VCloudExpressClientLiveTest;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
@@ -38,15 +38,16 @@ import com.google.inject.Module;
* @author Adrian Cole
*/
@Test(groups = "live", sequential = true, testName = "vcloud.BlueLockVCloudClientLiveTest")
-public class BlueLockVCloudClientLiveTest extends VCloudClientLiveTest {
+public class BlueLockVCloudExpressClientLiveTest extends VCloudExpressClientLiveTest {
@BeforeGroups(groups = { "live" })
@Override
public void setupClient() {
- identity = checkNotNull(System.getProperty("jclouds.test.identity"), "jclouds.test.identity");
- String credential = checkNotNull(System.getProperty("jclouds.test.credential"), "jclouds.test.credential");
- context = new RestContextFactory().createContext("bluelock", identity, credential, ImmutableSet
- . of(new Log4JLoggingModule()), new Properties());
+ identity = checkNotNull(System.getProperty("bluelock-vcloudexpress.identity"), "bluelock-vcloudexpress.identity");
+ String credential = checkNotNull(System.getProperty("bluelock-vcloudexpress.credential"),
+ "bluelock-vcloudexpress.credential");
+ context = new ComputeServiceContextFactory().createContext("bluelock-vcloudexpress", identity, credential,
+ ImmutableSet. of(new Log4JLoggingModule()), new Properties()).getProviderSpecificContext();
connection = context.getApi();
}
diff --git a/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/ProvidersInPropertiesTest.java b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/ProvidersInPropertiesTest.java
index 58e3efac36..67e6511e09 100644
--- a/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/ProvidersInPropertiesTest.java
+++ b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/ProvidersInPropertiesTest.java
@@ -36,13 +36,16 @@ public class ProvidersInPropertiesTest {
@Test
public void testSupportedProviders() {
Iterable providers = Utils.getSupportedProviders();
- assert Iterables.contains(providers, "bluelock") : providers;
+ assert Iterables.contains(providers, "bluelock-vcloudexpress") : providers;
+ assert Iterables.contains(providers, "bluelock-vclouddirector") : providers;
+
}
@Test
public void testSupportedComputeServiceProviders() {
Iterable providers = ComputeServiceUtils.getSupportedProviders();
- assert Iterables.contains(providers, "bluelock") : providers;
+ assert Iterables.contains(providers, "bluelock-vcloudexpress") : providers;
+ assert Iterables.contains(providers, "bluelock-vclouddirector") : providers;
}
}
diff --git a/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/VCloudSessionRefreshLiveTest.java b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/VCloudSessionRefreshLiveTest.java
index d3bd466193..5000bcdc40 100644
--- a/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/VCloudSessionRefreshLiveTest.java
+++ b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/VCloudSessionRefreshLiveTest.java
@@ -53,21 +53,22 @@ public class VCloudSessionRefreshLiveTest {
@Test
public void testSessionRefresh() throws Exception {
- connection.findOrganizationNamed(null);
+ connection.findOrgNamed(null);
Thread.sleep(timeOut * 1000);
- connection.findOrganizationNamed(null);
+ connection.findOrgNamed(null);
}
@BeforeGroups(groups = { "live" })
public void setupClient() throws IOException {
- identity = checkNotNull(System.getProperty("jclouds.test.identity"), "jclouds.test.identity");
- String credential = checkNotNull(System.getProperty("jclouds.test.credential"), "jclouds.test.credential");
+ identity = checkNotNull(System.getProperty("bluelock-vclouddirector.identity"), "bluelock-vclouddirector.identity");
+ String credential = checkNotNull(System.getProperty("bluelock-vclouddirector.credential"),
+ "bluelock-vclouddirector.credential");
Properties props = new Properties();
props.setProperty(PROPERTY_SESSION_INTERVAL, 40 + "");
- context = new ComputeServiceContextFactory().createContext("bluelock", identity, credential, ImmutableSet
- . of(new Log4JLoggingModule()), props);
+ context = new ComputeServiceContextFactory().createContext("bluelock-vclouddirector", identity, credential,
+ ImmutableSet. of(new Log4JLoggingModule()), props);
connection = VCloudClient.class.cast(context.getProviderSpecificContext().getApi());
}
diff --git a/vcloud/hostingdotcom/src/test/java/org/jclouds/vcloud/hostingdotcom/compute/HostingDotComVCloudComputeServiceLiveTest.java b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudDirectorComputeServiceLiveTest.java
similarity index 52%
rename from vcloud/hostingdotcom/src/test/java/org/jclouds/vcloud/hostingdotcom/compute/HostingDotComVCloudComputeServiceLiveTest.java
rename to vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudDirectorComputeServiceLiveTest.java
index a25f26f6f7..aba4db23fd 100644
--- a/vcloud/hostingdotcom/src/test/java/org/jclouds/vcloud/hostingdotcom/compute/HostingDotComVCloudComputeServiceLiveTest.java
+++ b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudDirectorComputeServiceLiveTest.java
@@ -11,20 +11,22 @@
*
* 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.
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either director or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
-package org.jclouds.vcloud.hostingdotcom.compute;
+package org.jclouds.vcloud.bluelock.compute;
+import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
+import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.vcloud.compute.VCloudComputeServiceLiveTest;
-import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
@@ -32,21 +34,38 @@ import org.testng.annotations.Test;
*
* @author Adrian Cole
*/
-@Test(groups = "live", enabled = true, sequential = true, testName = "compute.HostingDotComVCloudComputeServiceLiveTest")
-public class HostingDotComVCloudComputeServiceLiveTest extends VCloudComputeServiceLiveTest {
- @BeforeClass
+@Test(groups = "live", enabled = true, sequential = true, testName = "bluelock.BlueLockVCloudComputeServiceLiveTest")
+public class BlueLockVCloudDirectorComputeServiceLiveTest extends VCloudComputeServiceLiveTest {
@Override
public void setServiceDefaults() {
- provider = "hostingdotcom";
+ provider = "bluelock-vclouddirector";
+ tag = "director";
+ }
+
+ @Override
+ protected void setupCredentials() {
+ identity = checkNotNull(System.getProperty("bluelock-vclouddirector.identity"),
+ "bluelock-vclouddirector.identity");
+ credential = checkNotNull(System.getProperty("bluelock-vclouddirector.credential"),
+ "bluelock-vclouddirector.credential");
}
@Test
public void testTemplateBuilder() {
Template defaultTemplate = client.templateBuilder().build();
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
- assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS);
- assertEquals(defaultTemplate.getLocation().getId(), "188849");
+ assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
+ assert defaultTemplate.getLocation().getId() != null : defaultTemplate.getLocation();
assertEquals(defaultTemplate.getSize().getCores(), 1.0d);
}
-}
\ No newline at end of file
+ @Override
+ protected Template buildTemplate(TemplateBuilder templateBuilder) {
+ Template template = super.buildTemplate(templateBuilder);
+ Image image = template.getImage();
+ assert image.getDefaultCredentials().identity != null : image;
+ assert image.getDefaultCredentials().credential != null : image;
+ return template;
+ }
+
+}
diff --git a/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudComputeServiceLiveTest.java b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudExpressComputeServiceLiveTest.java
similarity index 75%
rename from vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudComputeServiceLiveTest.java
rename to vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudExpressComputeServiceLiveTest.java
index e46a2cf410..4b0d1ef294 100644
--- a/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudComputeServiceLiveTest.java
+++ b/vcloud/bluelock/src/test/java/org/jclouds/vcloud/bluelock/compute/BlueLockVCloudExpressComputeServiceLiveTest.java
@@ -19,14 +19,14 @@
package org.jclouds.vcloud.bluelock.compute;
+import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.TemplateBuilder;
-import org.jclouds.vcloud.compute.VCloudComputeServiceLiveTest;
-import org.testng.annotations.BeforeClass;
+import org.jclouds.vcloud.compute.VCloudExpressComputeServiceLiveTest;
import org.testng.annotations.Test;
/**
@@ -34,12 +34,19 @@ import org.testng.annotations.Test;
*
* @author Adrian Cole
*/
-@Test(groups = "live", enabled = true, sequential = true, testName = "compute.BlueLockVCloudComputeServiceLiveTest")
-public class BlueLockVCloudComputeServiceLiveTest extends VCloudComputeServiceLiveTest {
- @BeforeClass
+@Test(groups = "live", enabled = true, sequential = true, testName = "bluelock.BlueLockVCloudExpressComputeServiceLiveTest")
+public class BlueLockVCloudExpressComputeServiceLiveTest extends VCloudExpressComputeServiceLiveTest {
@Override
public void setServiceDefaults() {
- provider = "bluelock";
+ provider = "bluelock-vcloudexpress";
+ tag = "vcx";
+ }
+
+ @Override
+ protected void setupCredentials() {
+ identity = checkNotNull(System.getProperty("bluelock-vcloudexpress.identity"), "bluelock-vcloudexpress.identity");
+ credential = checkNotNull(System.getProperty("bluelock-vcloudexpress.credential"),
+ "bluelock-vcloudexpress.credential");
}
@Test
diff --git a/vcloud/core/src/main/java/domain/VCloudExpressLoginAsyncClient.java b/vcloud/core/src/main/java/domain/VCloudExpressLoginAsyncClient.java
new file mode 100755
index 0000000000..153a022ae0
--- /dev/null
+++ b/vcloud/core/src/main/java/domain/VCloudExpressLoginAsyncClient.java
@@ -0,0 +1,55 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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 domain;
+
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+
+import org.jclouds.http.filters.BasicAuthentication;
+import org.jclouds.rest.annotations.Endpoint;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.ResponseParser;
+import org.jclouds.vcloud.VCloudExpressMediaType;
+import org.jclouds.vcloud.domain.VCloudSession;
+import org.jclouds.vcloud.functions.ParseLoginResponseFromHeaders;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * Establishes a context with a VCloud endpoint.
+ *
+ *
+ * @see
+ * @author Adrian Cole
+ */
+@Endpoint(org.jclouds.vcloud.endpoints.VCloudLogin.class)
+@RequestFilters(BasicAuthentication.class)
+public interface VCloudExpressLoginAsyncClient {
+
+ /**
+ * This request returns a token to use in subsequent requests. After ten minutes of inactivity,
+ * the token expires and you have to request a new token with this call.
+ */
+ @POST
+ @ResponseParser(ParseLoginResponseFromHeaders.class)
+ @Consumes(VCloudExpressMediaType.ORGLIST_XML)
+ ListenableFuture login();
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/internal/VCloudLoginAsyncClient.java b/vcloud/core/src/main/java/domain/VCloudLoginAsyncClient.java
old mode 100755
new mode 100644
similarity index 84%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/internal/VCloudLoginAsyncClient.java
rename to vcloud/core/src/main/java/domain/VCloudLoginAsyncClient.java
index f5658b9b82..fbd3d86c98
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/internal/VCloudLoginAsyncClient.java
+++ b/vcloud/core/src/main/java/domain/VCloudLoginAsyncClient.java
@@ -17,9 +17,7 @@
* ====================================================================
*/
-package org.jclouds.vcloud.internal;
-
-import java.util.Map;
+package domain;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
@@ -29,9 +27,7 @@ import org.jclouds.rest.annotations.Endpoint;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.ResponseParser;
import org.jclouds.vcloud.VCloudMediaType;
-import org.jclouds.vcloud.VCloudToken;
-import org.jclouds.vcloud.domain.NamedResource;
-import org.jclouds.vcloud.endpoints.Org;
+import org.jclouds.vcloud.domain.VCloudSession;
import org.jclouds.vcloud.functions.ParseLoginResponseFromHeaders;
import com.google.common.util.concurrent.ListenableFuture;
@@ -47,14 +43,6 @@ import com.google.common.util.concurrent.ListenableFuture;
@RequestFilters(BasicAuthentication.class)
public interface VCloudLoginAsyncClient {
- public interface VCloudSession {
- @VCloudToken
- String getVCloudToken();
-
- @Org
- Map getOrgs();
- }
-
/**
* This request returns a token to use in subsequent requests. After ten minutes of inactivity,
* the token expires and you have to request a new token with this call.
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/internal/VCloudVersionsAsyncClient.java b/vcloud/core/src/main/java/domain/VCloudVersionsAsyncClient.java
similarity index 97%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/internal/VCloudVersionsAsyncClient.java
rename to vcloud/core/src/main/java/domain/VCloudVersionsAsyncClient.java
index 16a2f9301e..3c7ff7e1b2 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/internal/VCloudVersionsAsyncClient.java
+++ b/vcloud/core/src/main/java/domain/VCloudVersionsAsyncClient.java
@@ -17,7 +17,7 @@
* ====================================================================
*/
-package org.jclouds.vcloud.internal;
+package domain;
import java.net.URI;
import java.util.SortedMap;
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudAsyncClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudAsyncClient.java
new file mode 100644
index 0000000000..85fce4fd50
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudAsyncClient.java
@@ -0,0 +1,332 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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;
+
+import static org.jclouds.vcloud.VCloudMediaType.CATALOGITEM_XML;
+import static org.jclouds.vcloud.VCloudMediaType.CATALOG_XML;
+import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
+import static org.jclouds.vcloud.VCloudMediaType.ORG_XML;
+import static org.jclouds.vcloud.VCloudMediaType.TASKSLIST_XML;
+import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
+import static org.jclouds.vcloud.VCloudMediaType.VAPPTEMPLATE_XML;
+import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
+import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
+
+import java.net.URI;
+
+import javax.annotation.Nullable;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.ExceptionParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
+import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
+import org.jclouds.vcloud.domain.Catalog;
+import org.jclouds.vcloud.domain.CatalogItem;
+import org.jclouds.vcloud.domain.Org;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.TasksList;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.VAppTemplate;
+import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.functions.OrgNameAndCatalogNameToEndpoint;
+import org.jclouds.vcloud.functions.OrgNameAndVDCNameToEndpoint;
+import org.jclouds.vcloud.functions.OrgNameCatalogNameItemNameToEndpoint;
+import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
+import org.jclouds.vcloud.functions.OrgNameToEndpoint;
+import org.jclouds.vcloud.functions.OrgNameToTasksListEndpoint;
+import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
+import org.jclouds.vcloud.xml.CatalogHandler;
+import org.jclouds.vcloud.xml.CatalogItemHandler;
+import org.jclouds.vcloud.xml.OrgHandler;
+import org.jclouds.vcloud.xml.OrgNetworkHandler;
+import org.jclouds.vcloud.xml.TaskHandler;
+import org.jclouds.vcloud.xml.TasksListHandler;
+import org.jclouds.vcloud.xml.VAppHandler;
+import org.jclouds.vcloud.xml.VAppTemplateHandler;
+import org.jclouds.vcloud.xml.VDCHandler;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * Provides access to VCloud resources via their REST API.
+ *
+ *
+ * @see
+ * @author Adrian Cole
+ */
+@RequestFilters(SetVCloudTokenCookie.class)
+public interface CommonVCloudAsyncClient {
+
+ /**
+ * @see VCloudClient#getOrg
+ */
+ @GET
+ @XMLResponseParser(OrgHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ @Consumes(ORG_XML)
+ ListenableFuture extends Org> getOrg(@EndpointParam URI orgId);
+
+ /**
+ * @see VCloudClient#getOrgNamed
+ */
+ @GET
+ @XMLResponseParser(OrgHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ @Consumes(ORG_XML)
+ ListenableFuture extends Org> findOrgNamed(
+ @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
+
+ /**
+ * @see VCloudClient#getCatalog
+ */
+ @GET
+ @XMLResponseParser(CatalogHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ @Consumes(CATALOG_XML)
+ ListenableFuture extends Catalog> getCatalog(@EndpointParam URI catalogId);
+
+ /**
+ * @see VCloudClient#findCatalogInOrgNamed
+ */
+ @GET
+ @XMLResponseParser(CatalogHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ @Consumes(CATALOG_XML)
+ ListenableFuture extends Catalog> findCatalogInOrgNamed(
+ @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String orgName,
+ @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String catalogName);
+
+ /**
+ * @see VCloudClient#getVAppTemplate
+ */
+ @GET
+ @Consumes(VAPPTEMPLATE_XML)
+ @XMLResponseParser(VAppTemplateHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends VAppTemplate> getVAppTemplate(@EndpointParam URI vAppTemplate);
+
+ /**
+ * @see VCloudClient#findVAppTemplateInOrgCatalogNameds
+ */
+ @GET
+ @Consumes(VAPPTEMPLATE_XML)
+ @XMLResponseParser(VAppTemplateHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends VAppTemplate> findVAppTemplateInOrgCatalogNamed(
+ @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String orgName,
+ @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String catalogName,
+ @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String itemName);
+
+ /**
+ * @see VCloudClient#getCatalogItem
+ */
+ @GET
+ @Consumes(CATALOGITEM_XML)
+ @XMLResponseParser(CatalogItemHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends CatalogItem> getCatalogItem(@EndpointParam URI catalogItem);
+
+ /**
+ * @see VCloudClient#getCatalogItemInOrg
+ */
+ @GET
+ @Consumes(CATALOGITEM_XML)
+ @XMLResponseParser(CatalogItemHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends CatalogItem> findCatalogItemInOrgCatalogNamed(
+ @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String orgName,
+ @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String catalogName,
+ @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String itemName);
+
+ /**
+ * @see VCloudClient#findNetworkInOrgVDCNamed
+ */
+ @GET
+ @Consumes(NETWORK_XML)
+ @XMLResponseParser(OrgNetworkHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends OrgNetwork> findNetworkInOrgVDCNamed(
+ @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
+ @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
+ @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
+
+ /**
+ * @see VCloudClient#getNetwork
+ */
+ @GET
+ @Consumes(NETWORK_XML)
+ @XMLResponseParser(OrgNetworkHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends OrgNetwork> getNetwork(@EndpointParam URI network);
+
+ /**
+ * @see VCloudClient#getVDC(URI)
+ */
+ @GET
+ @XMLResponseParser(VDCHandler.class)
+ @Consumes(VDC_XML)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends VDC> getVDC(@EndpointParam URI vdc);
+
+ /**
+ * @see VCloudClient#findVDCInOrgNamed(String, String)
+ */
+ @GET
+ @XMLResponseParser(VDCHandler.class)
+ @Consumes(VDC_XML)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends VDC> findVDCInOrgNamed(
+ @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String orgName,
+ @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String vdcName);
+
+ /**
+ * @see VCloudClient#getTasksList
+ */
+ @GET
+ @Consumes(TASKSLIST_XML)
+ @XMLResponseParser(TasksListHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends TasksList> getTasksList(@EndpointParam URI tasksListId);
+
+ /**
+ * @see VCloudClient#findTasksListInOrgNamed
+ */
+ @GET
+ @Consumes(TASKSLIST_XML)
+ @XMLResponseParser(TasksListHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends TasksList> findTasksListInOrgNamed(
+ @Nullable @EndpointParam(parser = OrgNameToTasksListEndpoint.class) String orgName);
+
+ /**
+ * @see VCloudClient#deployVApp
+ */
+ @POST
+ @Consumes(TASK_XML)
+ @Path("/action/deploy")
+ @XMLResponseParser(TaskHandler.class)
+ ListenableFuture extends Task> deployVApp(@EndpointParam URI vAppId);
+
+ /**
+ * @see VCloudClient#deleteVApp
+ */
+ @DELETE
+ @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
+ ListenableFuture deleteVApp(@EndpointParam URI vAppId);
+
+ /**
+ * @see VCloudClient#undeployVApp
+ */
+ @POST
+ @Consumes(TASK_XML)
+ @Path("/action/undeploy")
+ @XMLResponseParser(TaskHandler.class)
+ ListenableFuture extends Task> undeployVApp(@EndpointParam URI vAppId);
+
+ /**
+ * @see VCloudClient#powerOnVApp
+ */
+ @POST
+ @Consumes(TASK_XML)
+ @Path("/power/action/powerOn")
+ @XMLResponseParser(TaskHandler.class)
+ ListenableFuture extends Task> powerOnVApp(@EndpointParam URI vAppId);
+
+ /**
+ * @see VCloudClient#powerOffVApp
+ */
+ @POST
+ @Consumes(TASK_XML)
+ @Path("/power/action/powerOff")
+ @XMLResponseParser(TaskHandler.class)
+ ListenableFuture extends Task> powerOffVApp(@EndpointParam URI vAppId);
+
+ /**
+ * @see VCloudClient#shutdownVApp
+ */
+ @POST
+ @Path("/power/action/shutdown")
+ ListenableFuture shutdownVApp(@EndpointParam URI vAppId);
+
+ /**
+ * @see VCloudClient#resetVApp
+ */
+ @POST
+ @Consumes(TASK_XML)
+ @Path("/power/action/reset")
+ @XMLResponseParser(TaskHandler.class)
+ ListenableFuture extends Task> resetVApp(@EndpointParam URI vAppId);
+
+ /**
+ * @see VCloudClient#suspendVApp
+ */
+ @POST
+ @Consumes(TASK_XML)
+ @Path("/power/action/suspend")
+ @XMLResponseParser(TaskHandler.class)
+ ListenableFuture extends Task> suspendVApp(@EndpointParam URI vAppId);
+
+ /**
+ * @see VCloudClient#getTask
+ */
+ @GET
+ @Consumes(TASK_XML)
+ @XMLResponseParser(TaskHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends Task> getTask(@EndpointParam URI taskId);
+
+ /**
+ * @see VCloudClient#cancelTask
+ */
+ @POST
+ @Path("/action/cancel")
+ ListenableFuture cancelTask(@EndpointParam URI taskId);
+
+ /**
+ * @see VCloudClient#findVAppInOrgVDCNamed
+ */
+ @GET
+ @Consumes(VAPP_XML)
+ @XMLResponseParser(VAppHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends VApp> findVAppInOrgVDCNamed(
+ @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
+ @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
+ @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String vAppName);
+
+ /**
+ * @see VCloudClient#getVApp
+ */
+ @GET
+ @Consumes(VAPP_XML)
+ @XMLResponseParser(VAppHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends VApp> getVApp(@EndpointParam URI vApp);
+
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudClient.java
new file mode 100644
index 0000000000..c64eafc70d
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/CommonVCloudClient.java
@@ -0,0 +1,176 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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;
+
+import java.net.URI;
+import java.util.NoSuchElementException;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.Nullable;
+
+import org.jclouds.concurrent.Timeout;
+import org.jclouds.vcloud.domain.Catalog;
+import org.jclouds.vcloud.domain.CatalogItem;
+import org.jclouds.vcloud.domain.Org;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.TasksList;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.VAppTemplate;
+import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+
+/**
+ * Provides access to VCloud resources via their REST API.
+ *
+ *
+ * @see
+ * @author Adrian Cole
+ */
+@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
+public interface CommonVCloudClient {
+
+ Org getOrg(URI orgId);
+
+ /**
+ * This call returns a list of all vCloud Data Centers (vdcs), catalogs, and task lists within
+ * the organization.
+ *
+ * @param name
+ * organization name, or null for the default
+ * @throws NoSuchElementException
+ * if you specified an org name that isn't present
+ */
+ Org findOrgNamed(@Nullable String name);
+
+ Catalog getCatalog(URI catalogId);
+
+ /**
+ * returns the catalog in the organization associated with the specified name. Note that both
+ * parameters can be null to choose default.
+ *
+ * @param orgName
+ * organization name, or null for the default
+ * @param catalogName
+ * catalog name, or null for the default
+ * @throws NoSuchElementException
+ * if you specified an org or catalog name that isn't present
+ */
+ Catalog findCatalogInOrgNamed(@Nullable String orgName, @Nullable String catalogName);
+
+ CatalogItem getCatalogItem(URI catalogItem);
+
+ /**
+ * returns the catalog item in the catalog associated with the specified name. Note that the org
+ * and catalog parameters can be null to choose default.
+ *
+ * @param orgName
+ * organization name, or null for the default
+ * @param catalogName
+ * catalog name, or null for the default
+ * @param itemName
+ * item you wish to lookup
+ *
+ * @throws NoSuchElementException
+ * if you specified an org, catalog, or catalog item name that isn't present
+ */
+ CatalogItem findCatalogItemInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName, String itemName);
+
+ VAppTemplate getVAppTemplate(URI vAppTemplate);
+
+ /**
+ * returns the vapp template corresponding to a catalog item in the catalog associated with the
+ * specified name. Note that the org and catalog parameters can be null to choose default.
+ *
+ * @param orgName
+ * organization name, or null for the default
+ * @param catalogName
+ * catalog name, or null for the default
+ * @param itemName
+ * item you wish to lookup
+ *
+ * @throws NoSuchElementException
+ * if you specified an org, catalog, or catalog item name that isn't present
+ */
+ VAppTemplate findVAppTemplateInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName,
+ String itemName);
+
+ OrgNetwork findNetworkInOrgVDCNamed(@Nullable String orgName, @Nullable String catalogName, String networkName);
+
+ OrgNetwork getNetwork(URI network);
+
+ VDC getVDC(URI vdc);
+
+ /**
+ * returns the VDC in the organization associated with the specified name. Note that both
+ * parameters can be null to choose default.
+ *
+ * @param orgName
+ * organization name, or null for the default
+ * @param vdcName
+ * catalog name, or null for the default
+ * @throws NoSuchElementException
+ * if you specified an org or vdc name that isn't present
+ */
+ VDC findVDCInOrgNamed(String orgName, String vdcName);
+
+ TasksList getTasksList(URI tasksListId);
+
+ TasksList findTasksListInOrgNamed(String orgName);
+
+ Task deployVApp(URI vAppId);
+
+ void deleteVApp(URI vAppId);
+
+ Task undeployVApp(URI vAppId);
+
+ /**
+ * This call powers on the vApp, as specified in the vApp's ovf:Startup element.
+ */
+ Task powerOnVApp(URI vAppId);
+
+ /**
+ * This call powers off the vApp, as specified in the vApp's ovf:Startup element.
+ */
+ Task powerOffVApp(URI vAppId);
+
+ /**
+ * This call shuts down the vApp.
+ */
+ void shutdownVApp(URI vAppId);
+
+ /**
+ * This call resets the vApp.
+ */
+ Task resetVApp(URI vAppId);
+
+ /**
+ * This call suspends the vApp.
+ */
+ Task suspendVApp(URI vAppId);
+
+ Task getTask(URI taskId);
+
+ void cancelTask(URI taskId);
+
+ VApp findVAppInOrgVDCNamed(@Nullable String orgName, @Nullable String catalogName, String vAppName);
+
+ VApp getVApp(URI vApp);
+
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java
index ae80a69b64..b1a9b79263 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java
@@ -19,68 +19,32 @@
package org.jclouds.vcloud;
-import static org.jclouds.vcloud.VCloudMediaType.CATALOGITEM_XML;
-import static org.jclouds.vcloud.VCloudMediaType.CATALOG_XML;
-import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
-import static org.jclouds.vcloud.VCloudMediaType.ORG_XML;
-import static org.jclouds.vcloud.VCloudMediaType.TASKSLIST_XML;
import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
-import static org.jclouds.vcloud.VCloudMediaType.VAPPTEMPLATE_XML;
import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
-import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
import java.net.URI;
-import javax.annotation.Nullable;
import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.jclouds.predicates.validators.DnsNameValidator;
-import org.jclouds.rest.annotations.Endpoint;
import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.MapBinder;
import org.jclouds.rest.annotations.MapPayloadParam;
import org.jclouds.rest.annotations.ParamValidators;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
-import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
import org.jclouds.vcloud.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
-import org.jclouds.vcloud.domain.Catalog;
-import org.jclouds.vcloud.domain.CatalogItem;
-import org.jclouds.vcloud.domain.Network;
-import org.jclouds.vcloud.domain.Organization;
import org.jclouds.vcloud.domain.Task;
-import org.jclouds.vcloud.domain.TasksList;
import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.domain.VAppTemplate;
-import org.jclouds.vcloud.domain.VDC;
-import org.jclouds.vcloud.endpoints.Org;
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
-import org.jclouds.vcloud.functions.OrgNameAndCatalogNameToEndpoint;
-import org.jclouds.vcloud.functions.OrgNameAndTasksListNameToEndpoint;
-import org.jclouds.vcloud.functions.OrgNameAndVDCNameToEndpoint;
-import org.jclouds.vcloud.functions.OrgNameCatalogNameItemNameToEndpoint;
-import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
-import org.jclouds.vcloud.functions.OrgNameToEndpoint;
-import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
import org.jclouds.vcloud.options.CloneVAppOptions;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
-import org.jclouds.vcloud.xml.CatalogHandler;
-import org.jclouds.vcloud.xml.CatalogItemHandler;
-import org.jclouds.vcloud.xml.NetworkHandler;
-import org.jclouds.vcloud.xml.OrgHandler;
import org.jclouds.vcloud.xml.TaskHandler;
-import org.jclouds.vcloud.xml.TasksListHandler;
import org.jclouds.vcloud.xml.VAppHandler;
-import org.jclouds.vcloud.xml.VAppTemplateHandler;
-import org.jclouds.vcloud.xml.VDCHandler;
import com.google.common.util.concurrent.ListenableFuture;
@@ -88,298 +52,11 @@ import com.google.common.util.concurrent.ListenableFuture;
* Provides access to VCloud resources via their REST API.
*
*
- * @see
+ * @see
* @author Adrian Cole
*/
@RequestFilters(SetVCloudTokenCookie.class)
-public interface VCloudAsyncClient {
- /**
- * @see VCloudClient#getDefaultOrganization
- */
- @Deprecated
- @GET
- @Endpoint(Org.class)
- @Consumes(ORG_XML)
- @XMLResponseParser(OrgHandler.class)
- ListenableFuture extends Organization> getDefaultOrganization();
-
- /**
- * @see VCloudClient#getOrganization
- */
- @GET
- @XMLResponseParser(OrgHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- @Consumes(ORG_XML)
- ListenableFuture extends Organization> getOrganization(@EndpointParam URI orgId);
-
- /**
- * @see VCloudClient#getOrganizationNamed
- */
- @GET
- @XMLResponseParser(OrgHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- @Consumes(ORG_XML)
- ListenableFuture extends Organization> findOrganizationNamed(
- @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
-
- /**
- * @see VCloudClient#getDefaultCatalog
- */
- @Deprecated
- @GET
- @Endpoint(org.jclouds.vcloud.endpoints.Catalog.class)
- @Consumes(CATALOG_XML)
- @XMLResponseParser(CatalogHandler.class)
- ListenableFuture extends Catalog> getDefaultCatalog();
-
- /**
- * @see VCloudClient#getCatalog
- */
- @GET
- @XMLResponseParser(CatalogHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- @Consumes(CATALOG_XML)
- ListenableFuture extends Catalog> getCatalog(@EndpointParam URI catalogId);
-
- /**
- * @see VCloudClient#findCatalogInOrgNamed
- */
- @GET
- @XMLResponseParser(CatalogHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- @Consumes(CATALOG_XML)
- ListenableFuture extends Catalog> findCatalogInOrgNamed(
- @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String orgName,
- @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String catalogName);
-
- /**
- * @see VCloudClient#getVAppTemplate
- */
- @GET
- @Consumes(VAPPTEMPLATE_XML)
- @XMLResponseParser(VAppTemplateHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends VAppTemplate> getVAppTemplate(@EndpointParam URI vAppTemplate);
-
- /**
- * @see VCloudClient#findVAppTemplateInOrgCatalogNameds
- */
- @GET
- @Consumes(VAPPTEMPLATE_XML)
- @XMLResponseParser(VAppTemplateHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends VAppTemplate> findVAppTemplateInOrgCatalogNamed(
- @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String orgName,
- @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String catalogName,
- @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String itemName);
-
- /**
- * @see VCloudClient#getCatalogItem
- */
- @GET
- @Consumes(CATALOGITEM_XML)
- @XMLResponseParser(CatalogItemHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends CatalogItem> getCatalogItem(@EndpointParam URI catalogItem);
-
- /**
- * @see VCloudClient#getCatalogItemInOrg
- */
- @GET
- @Consumes(CATALOGITEM_XML)
- @XMLResponseParser(CatalogItemHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends CatalogItem> findCatalogItemInOrgCatalogNamed(
- @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String orgName,
- @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String catalogName,
- @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String itemName);
-
- /**
- * @see VCloudClient#findNetworkInOrgVDCNamed
- */
- @GET
- @Consumes(NETWORK_XML)
- @XMLResponseParser(NetworkHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends Network> findNetworkInOrgVDCNamed(
- @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
- @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
- @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
-
- /**
- * @see VCloudClient#getNetwork
- */
- @GET
- @Consumes(NETWORK_XML)
- @XMLResponseParser(NetworkHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends Network> getNetwork(@EndpointParam URI network);
-
- /**
- * @see VCloudClient#getDefaultVDC
- */
- @Deprecated
- @GET
- @Endpoint(org.jclouds.vcloud.endpoints.VDC.class)
- @XMLResponseParser(VDCHandler.class)
- @Consumes(VDC_XML)
- ListenableFuture extends VDC> getDefaultVDC();
-
- /**
- * @see VCloudClient#getVDC(URI)
- */
- @GET
- @XMLResponseParser(VDCHandler.class)
- @Consumes(VDC_XML)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends VDC> getVDC(@EndpointParam URI vdc);
-
- /**
- * @see VCloudClient#findVDCInOrgNamed(String, String)
- */
- @GET
- @XMLResponseParser(VDCHandler.class)
- @Consumes(VDC_XML)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends VDC> findVDCInOrgNamed(
- @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String orgName,
- @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String vdcName);
-
- /**
- * @see VCloudClient#getTasksList
- */
- @GET
- @Consumes(TASKSLIST_XML)
- @XMLResponseParser(TasksListHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends TasksList> getTasksList(@EndpointParam URI tasksListId);
-
- /**
- * @see VCloudClient#getTasksListInOrg
- */
- @GET
- @Consumes(TASKSLIST_XML)
- @XMLResponseParser(TasksListHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends TasksList> findTasksListInOrgNamed(
- @Nullable @EndpointParam(parser = OrgNameAndTasksListNameToEndpoint.class) String orgName,
- @Nullable @EndpointParam(parser = OrgNameAndTasksListNameToEndpoint.class) String tasksListName);
-
- /**
- * @see VCloudClient#getDefaultTasksList
- */
- @Deprecated
- @GET
- @Endpoint(org.jclouds.vcloud.endpoints.TasksList.class)
- @Consumes(TASKSLIST_XML)
- @XMLResponseParser(TasksListHandler.class)
- ListenableFuture extends TasksList> getDefaultTasksList();
-
- /**
- * @see VCloudClient#deployVApp
- */
- @POST
- @Consumes(TASK_XML)
- @Path("/action/deploy")
- @XMLResponseParser(TaskHandler.class)
- ListenableFuture extends Task> deployVApp(@EndpointParam URI vAppId);
-
- /**
- * @see VCloudClient#deleteVApp
- */
- @DELETE
- @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
- ListenableFuture deleteVApp(@EndpointParam URI vAppId);
-
- /**
- * @see VCloudClient#undeployVApp
- */
- @POST
- @Consumes(TASK_XML)
- @Path("/action/undeploy")
- @XMLResponseParser(TaskHandler.class)
- ListenableFuture extends Task> undeployVApp(@EndpointParam URI vAppId);
-
- /**
- * @see VCloudClient#powerOnVApp
- */
- @POST
- @Consumes(TASK_XML)
- @Path("/power/action/powerOn")
- @XMLResponseParser(TaskHandler.class)
- ListenableFuture extends Task> powerOnVApp(@EndpointParam URI vAppId);
-
- /**
- * @see VCloudClient#powerOffVApp
- */
- @POST
- @Consumes(TASK_XML)
- @Path("/power/action/powerOff")
- @XMLResponseParser(TaskHandler.class)
- ListenableFuture extends Task> powerOffVApp(@EndpointParam URI vAppId);
-
- /**
- * @see VCloudClient#shutdownVApp
- */
- @POST
- @Path("/power/action/shutdown")
- ListenableFuture shutdownVApp(@EndpointParam URI vAppId);
-
- /**
- * @see VCloudClient#resetVApp
- */
- @POST
- @Consumes(TASK_XML)
- @Path("/power/action/reset")
- @XMLResponseParser(TaskHandler.class)
- ListenableFuture extends Task> resetVApp(@EndpointParam URI vAppId);
-
- /**
- * @see VCloudClient#suspendVApp
- */
- @POST
- @Consumes(TASK_XML)
- @Path("/power/action/suspend")
- @XMLResponseParser(TaskHandler.class)
- ListenableFuture extends Task> suspendVApp(@EndpointParam URI vAppId);
-
- /**
- * @see VCloudClient#getTask
- */
- @GET
- @Consumes(TASK_XML)
- @XMLResponseParser(TaskHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends Task> getTask(@EndpointParam URI taskId);
-
- /**
- * @see VCloudClient#cancelTask
- */
- @POST
- @Path("/action/cancel")
- ListenableFuture cancelTask(@EndpointParam URI taskId);
-
- /**
- * @see VCloudClient#findVAppInOrgVDCNamed
- */
- @GET
- @Consumes(VAPP_XML)
- @XMLResponseParser(VAppHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends VApp> findVAppInOrgVDCNamed(
- @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
- @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
- @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String vAppName);
-
- /**
- * @see VCloudClient#getVApp
- */
- @GET
- @Consumes(VAPP_XML)
- @XMLResponseParser(VAppHandler.class)
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture extends VApp> getVApp(@EndpointParam URI vApp);
+public interface VCloudAsyncClient extends CommonVCloudAsyncClient {
/**
* @see VCloudClient#instantiateVAppTemplateInVDC
@@ -391,9 +68,9 @@ public interface VCloudAsyncClient {
@XMLResponseParser(VAppHandler.class)
@MapBinder(BindInstantiateVAppTemplateParamsToXmlPayload.class)
ListenableFuture extends VApp> instantiateVAppTemplateInVDC(@EndpointParam URI vdc,
- @MapPayloadParam("template") URI template,
- @MapPayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName,
- InstantiateVAppTemplateOptions... options);
+ @MapPayloadParam("template") URI template,
+ @MapPayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName,
+ InstantiateVAppTemplateOptions... options);
/**
* @see VCloudClient#cloneVAppInVDC
@@ -405,7 +82,7 @@ public interface VCloudAsyncClient {
@XMLResponseParser(TaskHandler.class)
@MapBinder(BindCloneVAppParamsToXmlPayload.class)
ListenableFuture extends Task> cloneVAppInVDC(@EndpointParam URI vdc, @MapPayloadParam("vApp") URI toClone,
- @MapPayloadParam("newName") @ParamValidators(DnsNameValidator.class) String newName,
- CloneVAppOptions... options);
+ @MapPayloadParam("newName") @ParamValidators(DnsNameValidator.class) String newName,
+ CloneVAppOptions... options);
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudClient.java
index 1636be1b5d..1c12549f18 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudClient.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudClient.java
@@ -20,21 +20,11 @@
package org.jclouds.vcloud;
import java.net.URI;
-import java.util.NoSuchElementException;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nullable;
-
import org.jclouds.concurrent.Timeout;
-import org.jclouds.vcloud.domain.Catalog;
-import org.jclouds.vcloud.domain.CatalogItem;
-import org.jclouds.vcloud.domain.Network;
-import org.jclouds.vcloud.domain.Organization;
import org.jclouds.vcloud.domain.Task;
-import org.jclouds.vcloud.domain.TasksList;
import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.domain.VAppTemplate;
-import org.jclouds.vcloud.domain.VDC;
import org.jclouds.vcloud.options.CloneVAppOptions;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
@@ -42,169 +32,14 @@ import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
* Provides access to VCloud resources via their REST API.
*
*
- * @see
* @author Adrian Cole
*/
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
-public interface VCloudClient {
+public interface VCloudClient extends CommonVCloudClient {
- /**
- * Please use {@link #findOrganizationNamed(String)} passing null
- */
- @Deprecated
- Organization getDefaultOrganization();
-
- Organization getOrganization(URI orgId);
-
- /**
- * This call returns a list of all vCloud Data Centers (vdcs), catalogs, and
- * task lists within the organization.
- *
- * @param name
- * organization name, or null for the default
- * @throws NoSuchElementException
- * if you specified an org name that isn't present
- */
- Organization findOrganizationNamed(@Nullable String name);
-
- /**
- * Please use #findCatalogInOrgNamed(null, null)
- */
- @Deprecated
- Catalog getDefaultCatalog();
-
- Catalog getCatalog(URI catalogId);
-
- /**
- * returns the catalog in the organization associated with the specified
- * name. Note that both parameters can be null to choose default.
- *
- * @param orgName
- * organization name, or null for the default
- * @param catalogName
- * catalog name, or null for the default
- * @throws NoSuchElementException
- * if you specified an org or catalog name that isn't present
- */
- Catalog findCatalogInOrgNamed(@Nullable String orgName, @Nullable String catalogName);
-
- CatalogItem getCatalogItem(URI catalogItem);
-
- /**
- * returns the catalog item in the catalog associated with the specified
- * name. Note that the org and catalog parameters can be null to choose
- * default.
- *
- * @param orgName
- * organization name, or null for the default
- * @param catalogName
- * catalog name, or null for the default
- * @param itemName
- * item you wish to lookup
- *
- * @throws NoSuchElementException
- * if you specified an org, catalog, or catalog item name that
- * isn't present
- */
- CatalogItem findCatalogItemInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName, String itemName);
-
- VAppTemplate getVAppTemplate(URI vAppTemplate);
-
- /**
- * returns the vapp template corresponding to a catalog item in the catalog
- * associated with the specified name. Note that the org and catalog
- * parameters can be null to choose default.
- *
- * @param orgName
- * organization name, or null for the default
- * @param catalogName
- * catalog name, or null for the default
- * @param itemName
- * item you wish to lookup
- *
- * @throws NoSuchElementException
- * if you specified an org, catalog, or catalog item name that
- * isn't present
- */
- VAppTemplate findVAppTemplateInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName,
- String itemName);
-
- Network findNetworkInOrgVDCNamed(@Nullable String orgName, @Nullable String catalogName, String networkName);
-
- Network getNetwork(URI network);
-
- VDC getVDC(URI vdc);
-
- /**
- * returns the VDC in the organization associated with the specified name.
- * Note that both parameters can be null to choose default.
- *
- * @param orgName
- * organization name, or null for the default
- * @param vdcName
- * catalog name, or null for the default
- * @throws NoSuchElementException
- * if you specified an org or vdc name that isn't present
- */
- VDC findVDCInOrgNamed(String orgName, String vdcName);
-
- /**
- * Please use #findVDCInOrgNamed
- */
- @Deprecated
- VDC getDefaultVDC();
-
- TasksList getTasksList(URI tasksListId);
-
- TasksList findTasksListInOrgNamed(String orgName, String tasksListName);
-
- /**
- * Please use #getTasksListInOrg(null, null)
- */
- @Deprecated
- TasksList getDefaultTasksList();
-
- Task deployVApp(URI vAppId);
-
- void deleteVApp(URI vAppId);
-
- Task undeployVApp(URI vAppId);
-
- /**
- * This call powers on the vApp, as specified in the vApp's ovf:Startup
- * element.
- */
- Task powerOnVApp(URI vAppId);
-
- /**
- * This call powers off the vApp, as specified in the vApp's ovf:Startup
- * element.
- */
- Task powerOffVApp(URI vAppId);
-
- /**
- * This call shuts down the vApp.
- */
- void shutdownVApp(URI vAppId);
-
- /**
- * This call resets the vApp.
- */
- Task resetVApp(URI vAppId);
-
- /**
- * This call suspends the vApp.
- */
- Task suspendVApp(URI vAppId);
-
- Task getTask(URI taskId);
-
- void cancelTask(URI taskId);
-
- VApp findVAppInOrgVDCNamed(@Nullable String orgName, @Nullable String catalogName, String vAppName);
-
- VApp getVApp(URI vApp);
VApp instantiateVAppTemplateInVDC(URI vDC, URI template, String appName, InstantiateVAppTemplateOptions... options);
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudContextBuilder.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudContextBuilder.java
index fd6d54c329..1ce37d6e7d 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudContextBuilder.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudContextBuilder.java
@@ -48,8 +48,7 @@ import com.google.inject.TypeLiteral;
* @author Adrian Cole
* @see VCloudComputeServiceContext
*/
-public class VCloudContextBuilder extends
- ComputeServiceContextBuilder {
+public class VCloudContextBuilder extends ComputeServiceContextBuilder {
public VCloudContextBuilder(Properties props) {
super(VCloudClient.class, VCloudAsyncClient.class, props);
@@ -68,11 +67,8 @@ public class VCloudContextBuilder extends
@Override
public ComputeServiceContext buildComputeServiceContext() {
// need the generic type information
- return (ComputeServiceContext) this
- .buildInjector()
- .getInstance(
- Key
- .get(new TypeLiteral>() {
- }));
+ return (ComputeServiceContext) this.buildInjector().getInstance(
+ Key.get(new TypeLiteral>() {
+ }));
}
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java
new file mode 100644
index 0000000000..68413d4266
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressAsyncClient.java
@@ -0,0 +1,118 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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;
+
+import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
+import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
+import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
+
+import java.net.URI;
+
+import javax.annotation.Nullable;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.predicates.validators.DnsNameValidator;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.ExceptionParser;
+import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.MapPayloadParam;
+import org.jclouds.rest.annotations.ParamValidators;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
+import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
+import org.jclouds.vcloud.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
+import org.jclouds.vcloud.options.CloneVAppOptions;
+import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
+import org.jclouds.vcloud.xml.OrgNetworkFromVCloudExpressNetworkHandler;
+import org.jclouds.vcloud.xml.TaskHandler;
+import org.jclouds.vcloud.xml.VAppHandler;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * Provides access to VCloud resources via their REST API.
+ *
+ *
+ * @see
+ * @author Adrian Cole
+ */
+@RequestFilters(SetVCloudTokenCookie.class)
+public interface VCloudExpressAsyncClient extends CommonVCloudAsyncClient {
+ /**
+ * @see VCloudClient#findNetworkInOrgVDCNamed
+ */
+ @Override
+ @GET
+ @Consumes(NETWORK_XML)
+ @XMLResponseParser(OrgNetworkFromVCloudExpressNetworkHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends OrgNetwork> findNetworkInOrgVDCNamed(
+ @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
+ @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
+ @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
+
+ /**
+ * @see VCloudClient#getNetwork
+ */
+ @Override
+ @GET
+ @Consumes(NETWORK_XML)
+ @XMLResponseParser(OrgNetworkFromVCloudExpressNetworkHandler.class)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture extends OrgNetwork> getNetwork(@EndpointParam URI network);
+
+ /**
+ * @see VCloudExpressClient#instantiateVAppTemplateInVDC
+ */
+ @POST
+ @Path("action/instantiateVAppTemplate")
+ @Produces("application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")
+ @Consumes(VAPP_XML)
+ @XMLResponseParser(VAppHandler.class)
+ @MapBinder(BindInstantiateVAppTemplateParamsToXmlPayload.class)
+ ListenableFuture extends VApp> instantiateVAppTemplateInVDC(@EndpointParam URI vdc,
+ @MapPayloadParam("template") URI template,
+ @MapPayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName,
+ InstantiateVAppTemplateOptions... options);
+
+ /**
+ * @see VCloudExpressClient#cloneVAppInVDC
+ */
+ @POST
+ @Path("/action/cloneVApp")
+ @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
+ @Consumes(TASK_XML)
+ @XMLResponseParser(TaskHandler.class)
+ @MapBinder(BindCloneVAppParamsToXmlPayload.class)
+ ListenableFuture extends Task> cloneVAppInVDC(@EndpointParam URI vdc, @MapPayloadParam("vApp") URI toClone,
+ @MapPayloadParam("newName") @ParamValidators(DnsNameValidator.class) String newName,
+ CloneVAppOptions... options);
+
+}
diff --git a/vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressClient.java
similarity index 63%
rename from vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudClient.java
rename to vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressClient.java
index f0cb42288a..c9c468a372 100644
--- a/vcloud/hostingdotcom/src/main/java/org/jclouds/vcloud/hostingdotcom/HostingDotComVCloudClient.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressClient.java
@@ -17,34 +17,29 @@
* ====================================================================
*/
-package org.jclouds.vcloud.hostingdotcom;
+package org.jclouds.vcloud;
import java.net.URI;
import java.util.concurrent.TimeUnit;
import org.jclouds.concurrent.Timeout;
-import org.jclouds.vcloud.VCloudClient;
-import org.jclouds.vcloud.hostingdotcom.domain.HostingDotComVApp;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.options.CloneVAppOptions;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
/**
* Provides access to VCloud resources via their REST API.
*
*
- * @see
+ * @see
* @author Adrian Cole
*/
-@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
-public interface HostingDotComVCloudClient extends VCloudClient {
+@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
+public interface VCloudExpressClient extends CommonVCloudClient {
- @Override
- @Timeout(duration = 600, timeUnit = TimeUnit.SECONDS)
- HostingDotComVApp instantiateVAppTemplateInVDC(URI vDC, URI template, String appName,
- InstantiateVAppTemplateOptions... options);
+ VApp instantiateVAppTemplateInVDC(URI vDC, URI template, String appName, InstantiateVAppTemplateOptions... options);
- @Override
- @Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
- HostingDotComVApp getVApp(URI vAppId);
+ Task cloneVAppInVDC(URI vDC, URI toClone, String newName, CloneVAppOptions... options);
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressContextBuilder.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressContextBuilder.java
new file mode 100644
index 0000000000..ec99f5db0d
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressContextBuilder.java
@@ -0,0 +1,74 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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;
+
+import java.util.List;
+import java.util.Properties;
+
+import org.jclouds.compute.ComputeServiceContext;
+import org.jclouds.compute.ComputeServiceContextBuilder;
+import org.jclouds.compute.internal.ComputeServiceContextImpl;
+import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
+import org.jclouds.logging.jdk.config.JDKLoggingModule;
+import org.jclouds.vcloud.compute.config.VCloudExpressComputeServiceContextModule;
+import org.jclouds.vcloud.config.VCloudExpressRestClientModule;
+
+import com.google.inject.Injector;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.TypeLiteral;
+
+/**
+ * Creates {@link VCloudComputeServiceContext} or {@link Injector} instances based on the most
+ * commonly requested arguments.
+ *
+ * Note that Threadsafe objects will be bound as singletons to the Injector or Context provided.
+ *
+ *
+ * If no Modules are specified, the default {@link JDKLoggingModule logging} and
+ * {@link JavaUrlHttpCommandExecutorServiceModule http transports} will be installed.
+ *
+ * @author Adrian Cole
+ * @see VCloudComputeServiceContext
+ */
+public class VCloudExpressContextBuilder extends ComputeServiceContextBuilder {
+
+ public VCloudExpressContextBuilder(Properties props) {
+ super(VCloudExpressClient.class, VCloudExpressAsyncClient.class, props);
+ }
+
+ @Override
+ protected void addContextModule(List modules) {
+ modules.add(new VCloudExpressComputeServiceContextModule());
+ }
+
+ @Override
+ protected void addClientModule(List modules) {
+ modules.add(new VCloudExpressRestClientModule());
+ }
+
+ @Override
+ public ComputeServiceContext buildComputeServiceContext() {
+ // need the generic type information
+ return (ComputeServiceContext) this.buildInjector().getInstance(
+ Key.get(new TypeLiteral>() {
+ }));
+ }
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressMediaType.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressMediaType.java
new file mode 100644
index 0000000000..115de8d915
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressMediaType.java
@@ -0,0 +1,42 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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;
+
+import javax.ws.rs.core.MediaType;
+
+/**
+ * Resource Types used in VCloud express
+ *
+ * @see MediaType
+ */
+public interface VCloudExpressMediaType extends VCloudMediaType {
+
+ /**
+ * "application/vnd.vmware.vcloud.organizationList+xml"
+ */
+ public final static String ORGLIST_XML = "application/vnd.vmware.vcloud.organizationList+xml";
+
+ /**
+ * "application/vnd.vmware.vcloud.organizationList+xml"
+ */
+ public final static MediaType ORGLIST_XML_TYPE = new MediaType("application",
+ "vnd.vmware.vcloud.organizationList+xml");
+
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressPropertiesBuilder.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressPropertiesBuilder.java
new file mode 100644
index 0000000000..81af12ab81
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudExpressPropertiesBuilder.java
@@ -0,0 +1,90 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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;
+
+import static org.jclouds.Constants.PROPERTY_API_VERSION;
+import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
+import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_FENCEMODE;
+import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED;
+import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_VERSION_SCHEMA;
+import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_NAMESPACE;
+import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_SCHEMA;
+
+import java.util.Properties;
+
+import org.jclouds.PropertiesBuilder;
+import org.jclouds.vcloud.domain.network.FenceMode;
+
+/**
+ * Builds properties used in VCloud Clients
+ *
+ * @author Adrian Cole
+ */
+public class VCloudExpressPropertiesBuilder extends PropertiesBuilder {
+ @Override
+ protected Properties defaultProperties() {
+ Properties properties = super.defaultProperties();
+ properties.setProperty(PROPERTY_API_VERSION, "0.8");
+ properties.setProperty(PROPERTY_VCLOUD_VERSION_SCHEMA, "0.8");
+ properties.setProperty(PROPERTY_SESSION_INTERVAL, 8 * 60 + "");
+ properties.setProperty(PROPERTY_VCLOUD_XML_SCHEMA,
+ "http://vcloud.safesecureweb.com/ns/vcloud.xsd");
+ properties.setProperty("jclouds.dns_name_length_min", "1");
+ properties.setProperty("jclouds.dns_name_length_max", "80");
+ properties.setProperty(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED, 180l * 1000l + "");
+ return properties;
+ }
+
+ public VCloudExpressPropertiesBuilder(Properties properties) {
+ super(properties);
+ }
+
+ protected void setNs() {
+ if (properties.getProperty(PROPERTY_VCLOUD_XML_NAMESPACE) == null)
+ properties.setProperty(PROPERTY_VCLOUD_XML_NAMESPACE, "http://www.vmware.com/vcloud/v"
+ + properties.getProperty(PROPERTY_VCLOUD_VERSION_SCHEMA));
+ }
+
+ protected void setFenceMode() {
+ if (properties.getProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE) == null) {
+ if (properties.getProperty(PROPERTY_VCLOUD_VERSION_SCHEMA).startsWith("0.8"))
+ properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, "allowInOut");
+ else
+ properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, FenceMode.BRIDGED.toString());
+ }
+ }
+
+ public VCloudExpressPropertiesBuilder withApiVersion(String version) {
+ properties.setProperty(PROPERTY_API_VERSION, "0.8");
+ return this;
+ }
+
+ public VCloudExpressPropertiesBuilder withSchemaVersion(String version) {
+ properties.setProperty(PROPERTY_VCLOUD_VERSION_SCHEMA, "0.8");
+ return this;
+ }
+
+ @Override
+ public Properties build() {
+ setNs();
+ setFenceMode();
+ return super.build();
+ }
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudMediaType.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudMediaType.java
index 6747db515c..1d7f54be2a 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudMediaType.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudMediaType.java
@@ -22,31 +22,29 @@ package org.jclouds.vcloud;
import javax.ws.rs.core.MediaType;
/**
- * Resource Types used in VCloud express
+ * Resource Types used in VCloud
*
* @see MediaType
*/
public interface VCloudMediaType {
/**
- * "application/vnd.vmware.vcloud.organizationList+xml"
+ * "application/vnd.vmware.vcloud.vcloud+xml"
*/
public final static String VCLOUD_XML = "application/vnd.vmware.vcloud.vcloud+xml";
/**
- * "application/vnd.vmware.vcloud.organizationList+xml"
+ * "application/vnd.vmware.vcloud.vcloud+xml"
*/
- public final static MediaType VCLOUD_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.vcloud+xml");
+ public final static MediaType VCLOUD_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.vcloud+xml");
/**
- * "application/vnd.vmware.vcloud.organizationList+xml"
+ * "application/vnd.vmware.vcloud.orgList+xml"
*/
- public final static String ORGLIST_XML = "application/vnd.vmware.vcloud.organizationList+xml";
+ public final static String ORGLIST_XML = "application/vnd.vmware.vcloud.orgList+xml";
/**
- * "application/vnd.vmware.vcloud.organizationList+xml"
+ * "application/vnd.vmware.vcloud.orgList+xml"
*/
- public final static MediaType ORGLIST_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.organizationList+xml");
+ public final static MediaType ORGLIST_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.orgList+xml");
/**
* "application/vnd.vmware.vcloud.org+xml"
*/
@@ -54,8 +52,7 @@ public interface VCloudMediaType {
/**
* "application/vnd.vmware.vcloud.org+xml"
*/
- public final static MediaType ORG_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.org+xml");
+ public final static MediaType ORG_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.org+xml");
/**
* "application/vnd.vmware.vcloud.vdc+xml"
@@ -64,8 +61,7 @@ public interface VCloudMediaType {
/**
* "application/vnd.vmware.vcloud.vdc+xml"
*/
- public final static MediaType VDC_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.vdc+xml");
+ public final static MediaType VDC_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.vdc+xml");
/**
* "application/vnd.vmware.vcloud.catalog+xml"
@@ -74,8 +70,7 @@ public interface VCloudMediaType {
/**
* "application/vnd.vmware.vcloud.catalog+xml"
*/
- public final static MediaType CATALOG_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.catalog+xml");
+ public final static MediaType CATALOG_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.catalog+xml");
/**
* "application/vnd.vmware.vcloud.tasksList+xml"
@@ -84,8 +79,7 @@ public interface VCloudMediaType {
/**
* "application/vnd.vmware.vcloud.tasksList+xml"
*/
- public final static MediaType TASKSLIST_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.tasksList+xml");
+ public final static MediaType TASKSLIST_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.tasksList+xml");
/**
* "application/vnd.vmware.vcloud.catalogItem+xml"
@@ -104,8 +98,7 @@ public interface VCloudMediaType {
/**
* "application/vnd.vmware.vcloud.task+xml"
*/
- public final static MediaType TASK_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.task+xml");
+ public final static MediaType TASK_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.task+xml");
/**
* "application/vnd.vmware.vcloud.vApp+xml"
@@ -114,8 +107,7 @@ public interface VCloudMediaType {
/**
* "application/vnd.vmware.vcloud.vApp+xml"
*/
- public final static MediaType VAPP_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.vApp+xml");
+ public final static MediaType VAPP_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.vApp+xml");
/**
* "application/vnd.vmware.vcloud.vAppTemplate+xml"
@@ -134,7 +126,6 @@ public interface VCloudMediaType {
/**
* "application/vnd.vmware.vcloud.network+xml"
*/
- public final static MediaType NETWORK_XML_TYPE = new MediaType("application",
- "vnd.vmware.vcloud.network+xml");
+ public final static MediaType NETWORK_XML_TYPE = new MediaType("application", "vnd.vmware.vcloud.network+xml");
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudPropertiesBuilder.java b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudPropertiesBuilder.java
index 2831f23b07..10e71ee79d 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudPropertiesBuilder.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/VCloudPropertiesBuilder.java
@@ -30,7 +30,7 @@ import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_S
import java.util.Properties;
import org.jclouds.PropertiesBuilder;
-import org.jclouds.vcloud.domain.FenceMode;
+import org.jclouds.vcloud.domain.network.FenceMode;
/**
* Builds properties used in VCloud Clients
@@ -41,13 +41,13 @@ public class VCloudPropertiesBuilder extends PropertiesBuilder {
@Override
protected Properties defaultProperties() {
Properties properties = super.defaultProperties();
- properties.setProperty(PROPERTY_API_VERSION, "0.8");
- properties.setProperty(PROPERTY_VCLOUD_VERSION_SCHEMA, "0.8");
+ properties.setProperty(PROPERTY_API_VERSION, "1.0");
+ properties.setProperty(PROPERTY_VCLOUD_VERSION_SCHEMA, "1.0");
properties.setProperty(PROPERTY_SESSION_INTERVAL, 8 * 60 + "");
- properties.setProperty(PROPERTY_VCLOUD_XML_SCHEMA,
- "http://vcloud.safesecureweb.com/ns/vcloud.xsd");
+ properties.setProperty(PROPERTY_VCLOUD_XML_SCHEMA, "http://vcloud.safesecureweb.com/ns/vcloud.xsd");
properties.setProperty("jclouds.dns_name_length_min", "1");
properties.setProperty("jclouds.dns_name_length_max", "80");
+ properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, FenceMode.BRIDGED.toString());
properties.setProperty(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED, 180l * 1000l + "");
return properties;
}
@@ -62,29 +62,19 @@ public class VCloudPropertiesBuilder extends PropertiesBuilder {
+ properties.getProperty(PROPERTY_VCLOUD_VERSION_SCHEMA));
}
- protected void setFenceMode() {
- if (properties.getProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE) == null) {
- if (properties.getProperty(PROPERTY_VCLOUD_VERSION_SCHEMA).startsWith("0.8"))
- properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, "allowInOut");
- else
- properties.setProperty(PROPERTY_VCLOUD_DEFAULT_FENCEMODE, FenceMode.BRIDGED);
- }
- }
-
public VCloudPropertiesBuilder withApiVersion(String version) {
- properties.setProperty(PROPERTY_API_VERSION, "0.8");
+ properties.setProperty(PROPERTY_API_VERSION, "1.0");
return this;
}
public VCloudPropertiesBuilder withSchemaVersion(String version) {
- properties.setProperty(PROPERTY_VCLOUD_VERSION_SCHEMA, "0.8");
+ properties.setProperty(PROPERTY_VCLOUD_VERSION_SCHEMA, "1.0");
return this;
}
@Override
public Properties build() {
setNs();
- setFenceMode();
return super.build();
}
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java b/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java
index 22542ab9d3..fb5d8ecf09 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayload.java
@@ -38,7 +38,7 @@ import org.jclouds.http.HttpRequest;
import org.jclouds.rest.MapBinder;
import org.jclouds.rest.binders.BindToStringPayload;
import org.jclouds.rest.internal.GeneratedHttpRequest;
-import org.jclouds.vcloud.VCloudMediaType;
+import org.jclouds.vcloud.VCloudExpressMediaType;
import org.jclouds.vcloud.options.CloneVAppOptions;
import com.google.inject.Inject;
@@ -95,7 +95,7 @@ public class BindCloneVAppParamsToXmlPayload implements MapBinder {
XMLBuilder rootBuilder = buildRoot(newName, options.isDeploy(), options.isPowerOn());
if (options.getDescription() != null)
rootBuilder.e("Description").text(options.getDescription());
- rootBuilder.e("VApp").a("href", vApp).a("type", VCloudMediaType.VAPP_XML);
+ rootBuilder.e("VApp").a("href", vApp).a("type", VCloudExpressMediaType.VAPP_XML);
Properties outputProperties = new Properties();
outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes");
return rootBuilder.asString(outputProperties);
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindInstantiateVAppTemplateParamsToXmlPayload.java b/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindInstantiateVAppTemplateParamsToXmlPayload.java
index 73cffaa522..b4309ac4a1 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindInstantiateVAppTemplateParamsToXmlPayload.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/binders/BindInstantiateVAppTemplateParamsToXmlPayload.java
@@ -22,6 +22,7 @@ package org.jclouds.vcloud.binders;
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 org.jclouds.Constants.PROPERTY_API_VERSION;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_FENCEMODE;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_NETWORK;
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_XML_NAMESPACE;
@@ -63,21 +64,19 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
protected final String ns;
protected final String schema;
private final BindToStringPayload stringBinder;
- protected final Map virtualHardwareToInstanceId = ImmutableMap
- .of(ResourceType.PROCESSOR, "1", ResourceType.MEMORY, "2",
- ResourceType.DISK_DRIVE, "9");
+ protected final Map virtualHardwareToInstanceId = ImmutableMap.of(ResourceType.PROCESSOR, "1",
+ ResourceType.MEMORY, "2", ResourceType.DISK_DRIVE, "9");
private final URI defaultNetwork;
private final String defaultFenceMode;
+ private final String apiVersion;
@Inject
- public BindInstantiateVAppTemplateParamsToXmlPayload(
- BindToStringPayload stringBinder,
- @Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns,
- @Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema,
- @Named(PROPERTY_VCLOUD_DEFAULT_NETWORK) String network,
- @Named(PROPERTY_VCLOUD_DEFAULT_FENCEMODE) String fenceMode
- ) {
+ public BindInstantiateVAppTemplateParamsToXmlPayload(BindToStringPayload stringBinder,
+ @Named(PROPERTY_API_VERSION) String apiVersion, @Named(PROPERTY_VCLOUD_XML_NAMESPACE) String ns,
+ @Named(PROPERTY_VCLOUD_XML_SCHEMA) String schema, @Named(PROPERTY_VCLOUD_DEFAULT_NETWORK) String network,
+ @Named(PROPERTY_VCLOUD_DEFAULT_FENCEMODE) String fenceMode) {
this.ns = ns;
+ this.apiVersion = apiVersion;
this.schema = schema;
this.stringBinder = stringBinder;
this.defaultNetwork = URI.create(network);
@@ -86,17 +85,14 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
@SuppressWarnings("unchecked")
public void bindToRequest(HttpRequest request, Map postParams) {
- checkArgument(
- checkNotNull(request, "request") instanceof GeneratedHttpRequest,
- "this binder is only valid for GeneratedHttpRequests!");
+ 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");
+ checkState(gRequest.getArgs() != null, "args should be initialized at this point");
String name = checkNotNull(postParams.remove("name"), "name");
String template = checkNotNull(postParams.remove("template"), "template");
- SortedMap virtualHardwareQuantity = Maps
- .newTreeMap();
+ SortedMap virtualHardwareQuantity = Maps.newTreeMap();
InstantiateVAppTemplateOptions options = findOptionsInArgsOrNull(gRequest);
Map properties = Maps.newTreeMap();
@@ -106,14 +102,15 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
if (options != null) {
network = ifNullDefaultTo(options.getNetwork(), network);
fenceMode = ifNullDefaultTo(options.getFenceMode(), defaultFenceMode);
+ if (apiVersion.indexOf("0.8") != -1 && fenceMode.equals("bridged"))
+ fenceMode = "allowInOut";
networkName = ifNullDefaultTo(options.getNetworkName(), networkName);
addQuantity(options, virtualHardwareQuantity);
properties.putAll(options.getProperties());
}
try {
- stringBinder.bindToRequest(request, generateXml(name, template,
- properties, virtualHardwareQuantity, networkName, fenceMode, URI
- .create(network)));
+ stringBinder.bindToRequest(request, generateXml(name, template, properties, virtualHardwareQuantity,
+ networkName, fenceMode, URI.create(network)));
} catch (ParserConfigurationException e) {
throw new RuntimeException(e);
} catch (FactoryConfigurationError e) {
@@ -124,99 +121,73 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
}
- protected String generateXml(String name, String template,
- Map properties,
- SortedMap virtualHardwareQuantity,
- String networkName, @Nullable String fenceMode, URI network)
- throws ParserConfigurationException, FactoryConfigurationError,
- TransformerException {
+ protected String generateXml(String name, String template, Map properties,
+ SortedMap virtualHardwareQuantity, String networkName, @Nullable String fenceMode,
+ URI network) throws ParserConfigurationException, FactoryConfigurationError, TransformerException {
XMLBuilder rootBuilder = buildRoot(name);
rootBuilder.e("VAppTemplate").a("href", template);
- XMLBuilder instantiationParamsBuilder = rootBuilder
- .e("InstantiationParams");
+ XMLBuilder instantiationParamsBuilder = rootBuilder.e("InstantiationParams");
addPropertiesifPresent(instantiationParamsBuilder, properties);
- addVirtualQuantityIfPresent(instantiationParamsBuilder,
- virtualHardwareQuantity);
- addNetworkConfig(instantiationParamsBuilder, networkName, fenceMode,
- network);
+ addVirtualQuantityIfPresent(instantiationParamsBuilder, virtualHardwareQuantity);
+ addNetworkConfig(instantiationParamsBuilder, networkName, fenceMode, network);
Properties outputProperties = new Properties();
- outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION,
- "yes");
+ outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes");
return rootBuilder.asString(outputProperties);
}
- protected void addPropertiesifPresent(XMLBuilder instantiationParamsBuilder,
- Map properties) {
+ protected void addPropertiesifPresent(XMLBuilder instantiationParamsBuilder, Map properties) {
if (properties.size() > 0) {
- XMLBuilder productSectionBuilder = instantiationParamsBuilder.e(
- "ProductSection").a("xmlns:q1", ns).a("xmlns:ovf",
- "http://schemas.dmtf.org/ovf/envelope/1");
+ XMLBuilder productSectionBuilder = instantiationParamsBuilder.e("ProductSection").a("xmlns:q1", ns).a(
+ "xmlns:ovf", "http://schemas.dmtf.org/ovf/envelope/1");
for (Entry entry : properties.entrySet()) {
- productSectionBuilder.e("Property").a("xmlns",
- "http://schemas.dmtf.org/ovf/envelope/1").a("ovf:key",
- entry.getKey()).a("ovf:value", entry.getValue());
+ productSectionBuilder.e("Property").a("xmlns", "http://schemas.dmtf.org/ovf/envelope/1").a("ovf:key",
+ entry.getKey()).a("ovf:value", entry.getValue());
}
}
}
- protected void addNetworkConfig(XMLBuilder instantiationParamsBuilder,
- String name, @Nullable String fenceMode, URI network) {
- XMLBuilder networkConfigBuilder = instantiationParamsBuilder.e(
- "NetworkConfigSection").e("NetworkConfig").a("name", name);
+ protected void addNetworkConfig(XMLBuilder instantiationParamsBuilder, String name, @Nullable String fenceMode,
+ URI network) {
+ XMLBuilder networkConfigBuilder = instantiationParamsBuilder.e("NetworkConfigSection").e("NetworkConfig").a(
+ "name", name);
if (fenceMode != null) {
XMLBuilder featuresBuilder = networkConfigBuilder.e("Features");
featuresBuilder.e("FenceMode").t(fenceMode);
}
- networkConfigBuilder.e("NetworkAssociation").a("href",
- network.toASCIIString());
+ networkConfigBuilder.e("NetworkAssociation").a("href", network.toASCIIString());
}
- protected void addVirtualQuantityIfPresent(
- XMLBuilder instantiationParamsBuilder,
- SortedMap virtualHardwareQuantity) {
+ protected void addVirtualQuantityIfPresent(XMLBuilder instantiationParamsBuilder,
+ SortedMap virtualHardwareQuantity) {
if (virtualHardwareQuantity.size() > 0) {
- XMLBuilder virtualHardwareSectionBuilder = instantiationParamsBuilder
- .e("VirtualHardwareSection").a("xmlns:q1", ns);
- for (Entry entry : virtualHardwareQuantity
- .entrySet()) {
- XMLBuilder itemBuilder = virtualHardwareSectionBuilder.e("Item").a(
- "xmlns", "http://schemas.dmtf.org/ovf/envelope/1");
- itemBuilder
- .e("InstanceID")
- .a(
- "xmlns",
- "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
- .t(virtualHardwareToInstanceId.get(entry.getKey()));
- itemBuilder
- .e("ResourceType")
- .a(
- "xmlns",
- "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
- .t(entry.getKey().value());
- itemBuilder
- .e("VirtualQuantity")
- .a(
- "xmlns",
- "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
- .t(entry.getValue());
+ XMLBuilder virtualHardwareSectionBuilder = instantiationParamsBuilder.e("VirtualHardwareSection").a(
+ "xmlns:q1", ns);
+ for (Entry entry : virtualHardwareQuantity.entrySet()) {
+ XMLBuilder itemBuilder = virtualHardwareSectionBuilder.e("Item").a("xmlns",
+ "http://schemas.dmtf.org/ovf/envelope/1");
+ itemBuilder.e("InstanceID").a("xmlns",
+ "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData").t(
+ virtualHardwareToInstanceId.get(entry.getKey()));
+ itemBuilder.e("ResourceType").a("xmlns",
+ "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData").t(
+ entry.getKey().value());
+ itemBuilder.e("VirtualQuantity").a("xmlns",
+ "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData").t(
+ entry.getValue());
}
}
}
- protected XMLBuilder buildRoot(String name)
- throws ParserConfigurationException, FactoryConfigurationError {
- XMLBuilder rootBuilder = XMLBuilder.create(
- "InstantiateVAppTemplateParams").a("name", name).a("xmlns", ns).a(
- "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance").a(
- "xsi:schemaLocation", ns + " " + schema).a("xmlns:ovf",
- "http://schemas.dmtf.org/ovf/envelope/1");
+ protected XMLBuilder buildRoot(String name) throws ParserConfigurationException, FactoryConfigurationError {
+ XMLBuilder rootBuilder = XMLBuilder.create("InstantiateVAppTemplateParams").a("name", name).a("xmlns", ns).a(
+ "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance").a("xsi:schemaLocation", ns + " " + schema).a(
+ "xmlns:ovf", "http://schemas.dmtf.org/ovf/envelope/1");
return rootBuilder;
}
- protected InstantiateVAppTemplateOptions findOptionsInArgsOrNull(
- GeneratedHttpRequest> gRequest) {
+ protected InstantiateVAppTemplateOptions findOptionsInArgsOrNull(GeneratedHttpRequest> gRequest) {
for (Object arg : gRequest.getArgs()) {
if (arg instanceof InstantiateVAppTemplateOptions) {
return (InstantiateVAppTemplateOptions) arg;
@@ -228,28 +199,23 @@ public class BindInstantiateVAppTemplateParamsToXmlPayload implements MapBinder
return null;
}
- private void addQuantity(InstantiateVAppTemplateOptions options,
- Map virtualHardwareQuantity) {
+ private void addQuantity(InstantiateVAppTemplateOptions options, Map virtualHardwareQuantity) {
if (options.getCpuCount() != null) {
- virtualHardwareQuantity.put(ResourceType.PROCESSOR, options
- .getCpuCount());
+ virtualHardwareQuantity.put(ResourceType.PROCESSOR, options.getCpuCount());
}
if (options.getMemorySizeMegabytes() != null) {
- virtualHardwareQuantity.put(ResourceType.MEMORY, options
- .getMemorySizeMegabytes());
+ virtualHardwareQuantity.put(ResourceType.MEMORY, options.getMemorySizeMegabytes());
}
if (options.getDiskSizeKilobytes() != null) {
- virtualHardwareQuantity.put(ResourceType.DISK_DRIVE, options
- .getDiskSizeKilobytes());
+ virtualHardwareQuantity.put(ResourceType.DISK_DRIVE, options.getDiskSizeKilobytes());
}
}
public void bindToRequest(HttpRequest request, Object input) {
- throw new IllegalStateException(
- "InstantiateVAppTemplateParams is needs parameters");
+ throw new IllegalStateException("InstantiateVAppTemplateParams is needs parameters");
}
- protected String ifNullDefaultTo(String value, String defaultValue) {
- return value != null ? value : checkNotNull(defaultValue, "defaultValue");
+ protected String ifNullDefaultTo(Object value, String defaultValue) {
+ return value != null ? value.toString() : checkNotNull(defaultValue, "defaultValue");
}
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/CommonVCloudComputeClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/CommonVCloudComputeClient.java
new file mode 100644
index 0000000000..656b25ad9d
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/CommonVCloudComputeClient.java
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.compute;
+
+import java.net.URI;
+import java.util.Set;
+
+/**
+ *
+ * @author Adrian Cole
+ */
+public interface CommonVCloudComputeClient {
+
+ /**
+ * returns a set of addresses that are only visible to the private network.
+ */
+ Set getPrivateAddresses(URI vAppId);
+
+ /**
+ * returns a set of addresses that are publically visible
+ */
+ Set getPublicAddresses(URI vAppId);
+
+ /**
+ * reboots the vApp, blocking until the following state transition is complete:
+ *
+ * current -> {@code VAppStatus#OFF} -> {@code VAppStatus#ON}
+ *
+ * @param vAppId
+ * vApp to reboot
+ */
+ void reboot(URI vAppId);
+
+ /**
+ * Destroys dependent resources, powers off and deletes the vApp, blocking until the following
+ * state transition is complete:
+ *
+ * current -> {@code VAppStatus#OFF} -> deleted
+ *
+ * @param vAppId
+ * vApp to stop
+ */
+ void stop(URI vAppId);
+
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/VCloudComputeClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/VCloudComputeClient.java
index ea388f0c8e..9f8e8ec37f 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/VCloudComputeClient.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/VCloudComputeClient.java
@@ -21,10 +21,10 @@ package org.jclouds.vcloud.compute;
import java.net.URI;
import java.util.Map;
-import java.util.Set;
import javax.annotation.Nullable;
+import org.jclouds.vcloud.compute.internal.VCloudComputeClientImpl;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
import com.google.inject.ImplementedBy;
@@ -33,11 +33,11 @@ import com.google.inject.ImplementedBy;
*
* @author Adrian Cole
*/
-@ImplementedBy(BaseVCloudComputeClient.class)
-public interface VCloudComputeClient {
+@ImplementedBy(VCloudComputeClientImpl.class)
+public interface VCloudComputeClient extends CommonVCloudComputeClient {
/**
- * Runs through all commands necessary to startup a vApp, opening at least
- * one ip address to the public network. These are the steps:
+ * Runs through all commands necessary to startup a vApp, opening at least one ip address to the
+ * public network. These are the steps:
*
* instantiate -> deploy -> powerOn
*
@@ -59,43 +59,11 @@ public interface VCloudComputeClient {
* opens the following ports on the public ip address
* @return map contains at least the following properties
*
- *
id - vApp id
username - console login user
- * password - console login password
+ *
id - vApp id
username - console login user
password - console
+ * login password
*
*/
Map start(@Nullable URI VDC, URI templateId, String name, InstantiateVAppTemplateOptions options,
- int... portsToOpen);
-
- /**
- * returns a set of addresses that are only visible to the private network.
- */
- Set getPrivateAddresses(URI vAppId);
-
- /**
- * returns a set of addresses that are publically visible
- */
- Set getPublicAddresses(URI vAppId);
-
- /**
- * reboots the vApp, blocking until the following state transition is
- * complete:
- *
- * current -> {@code VAppStatus#OFF} -> {@code VAppStatus#ON}
- *
- * @param vAppId
- * vApp to reboot
- */
- void reboot(URI vAppId);
-
- /**
- * Destroys dependent resources, powers off and deletes the vApp, blocking
- * until the following state transition is complete:
- *
- * current -> {@code VAppStatus#OFF} -> deleted
- *
- * @param vAppId
- * vApp to stop
- */
- void stop(URI vAppId);
+ int... portsToOpen);
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/VCloudExpressComputeClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/VCloudExpressComputeClient.java
new file mode 100644
index 0000000000..e58d4da07a
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/VCloudExpressComputeClient.java
@@ -0,0 +1,69 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.compute;
+
+import java.net.URI;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+import org.jclouds.vcloud.compute.internal.VCloudExpressComputeClientImpl;
+import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
+
+import com.google.inject.ImplementedBy;
+
+/**
+ *
+ * @author Adrian Cole
+ */
+@ImplementedBy(VCloudExpressComputeClientImpl.class)
+public interface VCloudExpressComputeClient extends CommonVCloudComputeClient {
+ /**
+ * Runs through all commands necessary to startup a vApp, opening at least one ip address to the
+ * public network. These are the steps:
+ *
+ * instantiate -> deploy -> powerOn
+ *
+ * This command blocks until the vApp is in state {@code VAppStatus#ON}
+ *
+ * @param VDC
+ * id of the virtual datacenter {@code VCloudClient#getDefaultVDC}
+ * @param templateId
+ * id of the vAppTemplate you wish to instantiate
+ * @param name
+ * name of the vApp
+ * @param cores
+ * amount of virtual cpu cores
+ * @param megs
+ * amount of ram in megabytes
+ * @param options
+ * options for instantiating the vApp; null is ok
+ * @param portsToOpen
+ * opens the following ports on the public ip address
+ * @return map contains at least the following properties
+ *
+ *
id - vApp id
username - console login user
password - console
+ * login password
+ *
+ */
+ Map start(@Nullable URI VDC, URI templateId, String name, InstantiateVAppTemplateOptions options,
+ int... portsToOpen);
+
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/CommonVCloudComputeServiceContextModule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/CommonVCloudComputeServiceContextModule.java
new file mode 100644
index 0000000000..c1b926d71a
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/CommonVCloudComputeServiceContextModule.java
@@ -0,0 +1,110 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.compute.config;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Singleton;
+
+import org.jclouds.compute.LoadBalancerService;
+import org.jclouds.compute.config.BaseComputeServiceContextModule;
+import org.jclouds.compute.config.ComputeServiceTimeoutsModule;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.NodeState;
+import org.jclouds.compute.domain.Size;
+import org.jclouds.compute.strategy.DestroyNodeStrategy;
+import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
+import org.jclouds.compute.strategy.ListNodesStrategy;
+import org.jclouds.compute.strategy.RebootNodeStrategy;
+import org.jclouds.compute.strategy.RunNodesAndAddToSetStrategy;
+import org.jclouds.compute.strategy.impl.EncodeTagIntoNameRunNodesAndAddToSetStrategy;
+import org.jclouds.domain.Location;
+import org.jclouds.vcloud.compute.internal.VCloudComputeClientImpl;
+import org.jclouds.vcloud.compute.strategy.VCloudDestroyNodeStrategy;
+import org.jclouds.vcloud.compute.strategy.VCloudGetNodeMetadataStrategy;
+import org.jclouds.vcloud.compute.strategy.VCloudListNodesStrategy;
+import org.jclouds.vcloud.compute.strategy.VCloudRebootNodeStrategy;
+import org.jclouds.vcloud.compute.suppliers.OrgAndVDCToLocationSupplier;
+import org.jclouds.vcloud.compute.suppliers.StaticSizeSupplier;
+import org.jclouds.vcloud.compute.suppliers.VCloudImageSupplier;
+import org.jclouds.vcloud.domain.Status;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMap;
+import com.google.inject.Injector;
+import com.google.inject.Provides;
+import com.google.inject.util.Providers;
+
+/**
+ * Configures the {@link VCloudComputeServiceContext}; requires {@link VCloudComputeClientImpl}
+ * bound.
+ *
+ * @author Adrian Cole
+ */
+public abstract class CommonVCloudComputeServiceContextModule extends BaseComputeServiceContextModule {
+
+ @VisibleForTesting
+ static final Map vAppStatusToNodeState = ImmutableMap. builder().put(
+ Status.OFF, NodeState.SUSPENDED).put(Status.ON, NodeState.RUNNING).put(Status.RESOLVED, NodeState.PENDING)
+ .put(Status.ERROR, NodeState.ERROR).put(Status.UNRECOGNIZED, NodeState.UNKNOWN).put(Status.DEPLOYED,
+ NodeState.PENDING).put(Status.INCONSISTENT, NodeState.PENDING).put(Status.UNKNOWN,
+ NodeState.UNKNOWN).put(Status.MIXED, NodeState.PENDING).put(Status.WAITING_FOR_INPUT,
+ NodeState.PENDING).put(Status.SUSPENDED, NodeState.SUSPENDED).put(Status.UNRESOLVED,
+ NodeState.PENDING).build();
+
+ @Singleton
+ @Provides
+ Map provideVAppStatusToNodeState() {
+ return vAppStatusToNodeState;
+ }
+
+ @Override
+ protected void configure() {
+ install(new ComputeServiceTimeoutsModule());
+ bind(DestroyNodeStrategy.class).to(VCloudDestroyNodeStrategy.class);
+ bind(RunNodesAndAddToSetStrategy.class).to(EncodeTagIntoNameRunNodesAndAddToSetStrategy.class);
+ bind(ListNodesStrategy.class).to(VCloudListNodesStrategy.class);
+ bind(GetNodeMetadataStrategy.class).to(VCloudGetNodeMetadataStrategy.class);
+ bind(RebootNodeStrategy.class).to(VCloudRebootNodeStrategy.class);
+ bindLoadBalancer();
+ }
+
+ protected void bindLoadBalancer() {
+ bind(LoadBalancerService.class).toProvider(Providers. of(null));
+ }
+
+ @Override
+ protected Supplier> getSourceSizeSupplier(Injector injector) {
+ return injector.getInstance(StaticSizeSupplier.class);
+ }
+
+ @Override
+ protected Supplier> getSourceLocationSupplier(Injector injector) {
+ return injector.getInstance(OrgAndVDCToLocationSupplier.class);
+ }
+
+ @Override
+ protected Supplier> getSourceImageSupplier(Injector injector) {
+ return injector.getInstance(VCloudImageSupplier.class);
+ }
+
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/VCloudComputeServiceContextModule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/VCloudComputeServiceContextModule.java
old mode 100755
new mode 100644
index 8f800bcf91..6c663faf4c
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/VCloudComputeServiceContextModule.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/VCloudComputeServiceContextModule.java
@@ -19,106 +19,46 @@
package org.jclouds.vcloud.compute.config;
-import java.util.Map;
-import java.util.Set;
-
import javax.inject.Singleton;
import org.jclouds.compute.ComputeServiceContext;
-import org.jclouds.compute.LoadBalancerService;
-import org.jclouds.compute.config.BaseComputeServiceContextModule;
-import org.jclouds.compute.config.ComputeServiceTimeoutsModule;
-import org.jclouds.compute.domain.Image;
-import org.jclouds.compute.domain.NodeState;
-import org.jclouds.compute.domain.Size;
import org.jclouds.compute.internal.ComputeServiceContextImpl;
import org.jclouds.compute.strategy.AddNodeWithTagStrategy;
-import org.jclouds.compute.strategy.DestroyNodeStrategy;
-import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
-import org.jclouds.compute.strategy.ListNodesStrategy;
-import org.jclouds.compute.strategy.RebootNodeStrategy;
-import org.jclouds.compute.strategy.RunNodesAndAddToSetStrategy;
-import org.jclouds.compute.strategy.impl.EncodeTagIntoNameRunNodesAndAddToSetStrategy;
-import org.jclouds.domain.Location;
import org.jclouds.rest.RestContext;
import org.jclouds.rest.internal.RestContextImpl;
-import org.jclouds.vcloud.VCloudAsyncClient;
import org.jclouds.vcloud.VCloudClient;
-import org.jclouds.vcloud.compute.BaseVCloudComputeClient;
+import org.jclouds.vcloud.compute.CommonVCloudComputeClient;
+import org.jclouds.vcloud.compute.VCloudComputeClient;
+import org.jclouds.vcloud.compute.internal.VCloudComputeClientImpl;
import org.jclouds.vcloud.compute.strategy.VCloudAddNodeWithTagStrategy;
-import org.jclouds.vcloud.compute.strategy.VCloudDestroyNodeStrategy;
-import org.jclouds.vcloud.compute.strategy.VCloudGetNodeMetadataStrategy;
-import org.jclouds.vcloud.compute.strategy.VCloudListNodesStrategy;
-import org.jclouds.vcloud.compute.strategy.VCloudRebootNodeStrategy;
-import org.jclouds.vcloud.compute.suppliers.OrgAndVDCToLocationSupplier;
-import org.jclouds.vcloud.compute.suppliers.StaticSizeSupplier;
-import org.jclouds.vcloud.compute.suppliers.VCloudImageSupplier;
-import org.jclouds.vcloud.domain.VAppStatus;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableMap;
-import com.google.inject.Injector;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.TypeLiteral;
-import com.google.inject.util.Providers;
/**
- * Configures the {@link VCloudComputeServiceContext}; requires {@link BaseVCloudComputeClient}
+ * Configures the {@link VCloudComputeServiceContext}; requires {@link VCloudComputeClientImpl}
* bound.
*
* @author Adrian Cole
*/
-public class VCloudComputeServiceContextModule extends BaseComputeServiceContextModule {
-
- @VisibleForTesting
- static final Map vAppStatusToNodeState = ImmutableMap. builder().put(
- VAppStatus.OFF, NodeState.SUSPENDED).put(VAppStatus.ON, NodeState.RUNNING).put(VAppStatus.RESOLVED,
- NodeState.PENDING).put(VAppStatus.SUSPENDED, NodeState.SUSPENDED).put(VAppStatus.UNRESOLVED,
- NodeState.PENDING).build();
-
- @Singleton
- @Provides
- Map provideVAppStatusToNodeState() {
- return vAppStatusToNodeState;
- }
+public class VCloudComputeServiceContextModule extends CommonVCloudComputeServiceContextModule {
@Override
protected void configure() {
- install(new ComputeServiceTimeoutsModule());
- bind(AddNodeWithTagStrategy.class).to(VCloudAddNodeWithTagStrategy.class);
+ super.configure();
bind(new TypeLiteral() {
- }).to(new TypeLiteral>() {
+ }).to(new TypeLiteral>() {
}).in(Scopes.SINGLETON);
- bind(new TypeLiteral>() {
- }).to(new TypeLiteral>() {
+ bind(new TypeLiteral>() {
+ }).to(new TypeLiteral>() {
}).in(Scopes.SINGLETON);
- bind(RunNodesAndAddToSetStrategy.class).to(EncodeTagIntoNameRunNodesAndAddToSetStrategy.class);
- bind(ListNodesStrategy.class).to(VCloudListNodesStrategy.class);
- bind(GetNodeMetadataStrategy.class).to(VCloudGetNodeMetadataStrategy.class);
- bind(RebootNodeStrategy.class).to(VCloudRebootNodeStrategy.class);
- bind(DestroyNodeStrategy.class).to(VCloudDestroyNodeStrategy.class);
- bindLoadBalancer();
+ bind(AddNodeWithTagStrategy.class).to(VCloudAddNodeWithTagStrategy.class);
}
- protected void bindLoadBalancer() {
- bind(LoadBalancerService.class).toProvider(Providers. of(null));
+ @Provides
+ @Singleton
+ CommonVCloudComputeClient provideCommonVCloudComputeClient(VCloudComputeClient in) {
+ return in;
}
-
- @Override
- protected Supplier> getSourceImageSupplier(Injector injector) {
- return injector.getInstance(VCloudImageSupplier.class);
- }
-
- @Override
- protected Supplier> getSourceLocationSupplier(Injector injector) {
- return injector.getInstance(OrgAndVDCToLocationSupplier.class);
- }
-
- @Override
- protected Supplier> getSourceSizeSupplier(Injector injector) {
- return injector.getInstance(StaticSizeSupplier.class);
- }
-
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/VCloudExpressComputeServiceContextModule.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/VCloudExpressComputeServiceContextModule.java
new file mode 100755
index 0000000000..f1818694cf
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/config/VCloudExpressComputeServiceContextModule.java
@@ -0,0 +1,64 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.compute.config;
+
+import javax.inject.Singleton;
+
+import org.jclouds.compute.ComputeServiceContext;
+import org.jclouds.compute.internal.ComputeServiceContextImpl;
+import org.jclouds.compute.strategy.AddNodeWithTagStrategy;
+import org.jclouds.rest.RestContext;
+import org.jclouds.rest.internal.RestContextImpl;
+import org.jclouds.vcloud.VCloudExpressClient;
+import org.jclouds.vcloud.compute.CommonVCloudComputeClient;
+import org.jclouds.vcloud.compute.VCloudExpressComputeClient;
+import org.jclouds.vcloud.compute.internal.VCloudExpressComputeClientImpl;
+import org.jclouds.vcloud.compute.strategy.VCloudExpressAddNodeWithTagStrategy;
+
+import com.google.inject.Provides;
+import com.google.inject.Scopes;
+import com.google.inject.TypeLiteral;
+
+/**
+ * Configures the {@link VCloudComputeServiceContext}; requires
+ * {@link VCloudExpressComputeClientImpl} bound.
+ *
+ * @author Adrian Cole
+ */
+public class VCloudExpressComputeServiceContextModule extends CommonVCloudComputeServiceContextModule {
+
+ @Override
+ protected void configure() {
+ super.configure();
+ bind(new TypeLiteral() {
+ }).to(new TypeLiteral>() {
+ }).in(Scopes.SINGLETON);
+ bind(new TypeLiteral>() {
+ }).to(new TypeLiteral>() {
+ }).in(Scopes.SINGLETON);
+ bind(AddNodeWithTagStrategy.class).to(VCloudExpressAddNodeWithTagStrategy.class);
+ }
+
+ @Provides
+ @Singleton
+ CommonVCloudComputeClient provideCommonVCloudComputeClient(VCloudExpressComputeClient in) {
+ return in;
+ }
+}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/GetExtra.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/GetExtra.java
index 3661c0ae9d..87ea870f6a 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/GetExtra.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/GetExtra.java
@@ -31,7 +31,7 @@ import javax.annotation.Resource;
import javax.inject.Singleton;
import org.jclouds.logging.Logger;
-import org.jclouds.vcloud.compute.BaseVCloudComputeClient;
+import org.jclouds.vcloud.compute.internal.VCloudExpressComputeClientImpl;
import org.jclouds.vcloud.domain.ResourceAllocation;
import org.jclouds.vcloud.domain.ResourceType;
import org.jclouds.vcloud.domain.VApp;
@@ -40,7 +40,7 @@ import com.google.common.base.Function;
/**
* Configures the {@link VCloudComputeServiceContext}; requires
- * {@link BaseVCloudComputeClient} bound.
+ * {@link VCloudExpressComputeClientImpl} bound.
*
* @author Adrian Cole
*/
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/ImagesInOrganization.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/ImagesInOrg.java
similarity index 70%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/ImagesInOrganization.java
rename to vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/ImagesInOrg.java
index fa865f7d6c..82afba6ffc 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/ImagesInOrganization.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/ImagesInOrg.java
@@ -25,10 +25,9 @@ import javax.inject.Singleton;
import org.jclouds.compute.domain.Image;
import org.jclouds.vcloud.domain.CatalogItem;
-import org.jclouds.vcloud.domain.Organization;
+import org.jclouds.vcloud.domain.Org;
import org.jclouds.vcloud.domain.VAppTemplate;
-import org.jclouds.vcloud.functions.AllCatalogItemsInOrganization;
-import org.jclouds.vcloud.functions.VAppTemplatesForCatalogItems;
+import org.jclouds.vcloud.functions.AllCatalogItemsInOrg;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
@@ -37,24 +36,24 @@ import com.google.common.collect.Iterables;
* @author Adrian Cole
*/
@Singleton
-public class ImagesInOrganization implements Function> {
+public class ImagesInOrg implements Function> {
- private final AllCatalogItemsInOrganization allCatalogItemsInOrganization;
- private final VAppTemplatesForCatalogItems vAppTemplatesForCatalogItems;
+ private final AllCatalogItemsInOrg allCatalogItemsInOrg;
+ private final Function, Iterable extends VAppTemplate>> vAppTemplatesForCatalogItems;
private final Provider imageForVAppTemplateProvider;
@Inject
- ImagesInOrganization(AllCatalogItemsInOrganization allCatalogItemsInOrganization,
+ ImagesInOrg(AllCatalogItemsInOrg allCatalogItemsInOrg,
Provider imageForVAppTemplateProvider,
- VAppTemplatesForCatalogItems vAppTemplatesForCatalogItems) {
+ Function, Iterable extends VAppTemplate>> vAppTemplatesForCatalogItems) {
this.imageForVAppTemplateProvider = imageForVAppTemplateProvider;
- this.allCatalogItemsInOrganization = allCatalogItemsInOrganization;
+ this.allCatalogItemsInOrg = allCatalogItemsInOrg;
this.vAppTemplatesForCatalogItems = vAppTemplatesForCatalogItems;
}
@Override
- public Iterable extends Image> apply(Organization from) {
- Iterable extends CatalogItem> catalogs = allCatalogItemsInOrganization.apply(from);
+ public Iterable extends Image> apply(Org from) {
+ Iterable extends CatalogItem> catalogs = allCatalogItemsInOrg.apply(from);
Iterable extends VAppTemplate> vAppTemplates = vAppTemplatesForCatalogItems.apply(catalogs);
return Iterables.transform(vAppTemplates, imageForVAppTemplateProvider.get().withParent(from));
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/VCloudGetNodeMetadata.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/VCloudGetNodeMetadata.java
deleted file mode 100644
index 131698ec59..0000000000
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/functions/VCloudGetNodeMetadata.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- *
- * Copyright (C) 2010 Cloud Conscious, LLC.
- *
- * ====================================================================
- * Licensed 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.compute.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.compute.util.ComputeServiceUtils.parseTagFromName;
-
-import java.net.URI;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.compute.domain.Image;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.NodeState;
-import org.jclouds.compute.domain.internal.NodeMetadataImpl;
-import org.jclouds.compute.domain.os.CIMOperatingSystem;
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.domain.Location;
-import org.jclouds.logging.Logger;
-import org.jclouds.vcloud.VCloudClient;
-import org.jclouds.vcloud.compute.BaseVCloudComputeClient;
-import org.jclouds.vcloud.compute.VCloudComputeClient;
-import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.domain.VAppStatus;
-
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableMap;
-
-/**
- * Configures the {@link VCloudComputeServiceContext}; requires {@link BaseVCloudComputeClient}
- * bound.
- *
- * @author Adrian Cole
- */
-@Singleton
-public class VCloudGetNodeMetadata {
-
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- public Logger logger = Logger.NULL;
- protected final VCloudClient client;
- protected final VCloudComputeClient computeClient;
- protected final Supplier> images;
- protected final FindLocationForResource findLocationForResourceInVDC;
- protected final GetExtra getExtra;
- protected final Map vAppStatusToNodeState;
-
- @Inject
- VCloudGetNodeMetadata(VCloudClient client, VCloudComputeClient computeClient,
- Map vAppStatusToNodeState, GetExtra getExtra,
- FindLocationForResource findLocationForResourceInVDC, Supplier> images) {
- this.client = checkNotNull(client, "client");
- this.images = checkNotNull(images, "images");
- this.getExtra = checkNotNull(getExtra, "getExtra");
- this.findLocationForResourceInVDC = checkNotNull(findLocationForResourceInVDC, "findLocationForResourceInVDC");
- this.computeClient = checkNotNull(computeClient, "computeClient");
- this.vAppStatusToNodeState = checkNotNull(vAppStatusToNodeState, "vAppStatusToNodeState");
- }
-
- public NodeMetadata execute(String in) {
- URI id = URI.create(in);
- VApp from = client.getVApp(id);
- if (from == null)
- return null;
- String tag = parseTagFromName(from.getName());
- Location location = findLocationForResourceInVDC.apply(from.getVDC());
- return new NodeMetadataImpl(in, from.getName(), in, location, from.getId(), ImmutableMap. of(),
- tag, null, from.getOsType() != null ? new CIMOperatingSystem(CIMOperatingSystem.OSType.fromValue(from
- .getOsType()), null, null, from.getOperatingSystemDescription()) : null, vAppStatusToNodeState
- .get(from.getStatus()), computeClient.getPublicAddresses(id), computeClient
- .getPrivateAddresses(id), getExtra.apply(from), null);
- }
-
-}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/BaseVCloudComputeClient.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/CommonVCloudComputeClientImpl.java
similarity index 69%
rename from vcloud/core/src/main/java/org/jclouds/vcloud/compute/BaseVCloudComputeClient.java
rename to vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/CommonVCloudComputeClientImpl.java
index 61e5ad1c89..9f34d2c50c 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/BaseVCloudComputeClient.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/CommonVCloudComputeClientImpl.java
@@ -17,30 +17,26 @@
* ====================================================================
*/
-package org.jclouds.vcloud.compute;
+package org.jclouds.vcloud.compute.internal;
-import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import java.net.URI;
import java.util.Map;
import java.util.Set;
-import javax.annotation.Nullable;
import javax.annotation.Resource;
import javax.inject.Named;
import javax.inject.Singleton;
-import org.jclouds.compute.domain.NodeState;
import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.logging.Logger;
-import org.jclouds.vcloud.VCloudClient;
+import org.jclouds.vcloud.CommonVCloudClient;
+import org.jclouds.vcloud.compute.CommonVCloudComputeClient;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.domain.VAppStatus;
+import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.domain.VAppTemplate;
-import org.jclouds.vcloud.domain.VDC;
-import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
@@ -52,52 +48,18 @@ import com.google.inject.Inject;
* @author Adrian Cole
*/
@Singleton
-public class BaseVCloudComputeClient implements VCloudComputeClient {
+public class CommonVCloudComputeClientImpl implements CommonVCloudComputeClient {
@Resource
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
protected Logger logger = Logger.NULL;
- protected final VCloudClient client;
+ protected final CommonVCloudClient client;
protected final Predicate taskTester;
- protected final Map vAppStatusToNodeState;
@Inject
- public BaseVCloudComputeClient(VCloudClient client, Predicate successTester,
- Map vAppStatusToNodeState) {
+ public CommonVCloudComputeClientImpl(CommonVCloudClient client, Predicate successTester) {
this.client = client;
this.taskTester = successTester;
- this.vAppStatusToNodeState = vAppStatusToNodeState;
- }
-
- @Override
- public Map start(@Nullable URI VDC, URI templateId, String name,
- InstantiateVAppTemplateOptions options, int... portsToOpen) {
- checkNotNull(options, "options");
- logger.debug(">> instantiating vApp vDC(%s) template(%s) name(%s) options(%s) ", VDC, templateId, name, options);
-
- VDC vdc = client.getVDC(VDC);
- VAppTemplate template = client.getVAppTemplate(templateId);
-
- VApp vAppResponse = client.instantiateVAppTemplateInVDC(vdc.getId(), template.getId(), name, options);
- logger.debug("<< instantiated VApp(%s)", vAppResponse.getName());
-
- logger.debug(">> deploying vApp(%s)", vAppResponse.getName());
-
- Task task = client.deployVApp(vAppResponse.getId());
- if (options.shouldBlockOnDeploy()) {
- if (!taskTester.apply(task.getLocation())) {
- throw new TaskException("deploy", vAppResponse, task);
- }
- logger.debug("<< deployed vApp(%s)", vAppResponse.getName());
-
- logger.debug(">> powering vApp(%s)", vAppResponse.getName());
- task = client.powerOnVApp(vAppResponse.getId());
- if (!taskTester.apply(task.getLocation())) {
- throw new TaskException("powerOn", vAppResponse, task);
- }
- logger.debug("<< on vApp(%s)", vAppResponse.getName());
- }
- return parseAndValidateResponse(template, vAppResponse);
}
protected Map parseAndValidateResponse(VAppTemplate template, VApp vAppResponse) {
@@ -142,7 +104,7 @@ public class BaseVCloudComputeClient implements VCloudComputeClient {
}
private VApp undeployVAppIfDeployed(VApp vApp) {
- if (vApp.getStatus().compareTo(VAppStatus.RESOLVED) > 0) {
+ if (vApp.getStatus().compareTo(Status.RESOLVED) > 0) {
logger.debug(">> undeploying vApp(%s), current status: %s", vApp.getName(), vApp.getStatus());
Task task = client.undeployVApp(vApp.getId());
if (!taskTester.apply(task.getLocation())) {
@@ -155,7 +117,7 @@ public class BaseVCloudComputeClient implements VCloudComputeClient {
}
private VApp powerOffVAppIfDeployed(VApp vApp) {
- if (vApp.getStatus().compareTo(VAppStatus.OFF) > 0) {
+ if (vApp.getStatus().compareTo(Status.OFF) > 0) {
logger.debug(">> powering off vApp(%s), current status: %s", vApp.getName(), vApp.getStatus());
Task task = client.powerOffVApp(vApp.getId());
if (!taskTester.apply(task.getLocation())) {
@@ -175,7 +137,7 @@ public class BaseVCloudComputeClient implements VCloudComputeClient {
public TaskException(String type, VApp vApp, Task task) {
super(String.format("failed to %s vApp %s status %s;task %s status %s", type, vApp.getName(),
- vApp.getStatus(), task.getLocation(), task.getStatus()), vApp);
+ vApp.getStatus(), task.getLocation(), task.getStatus()), vApp);
this.task = task;
}
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/VCloudComputeClientImpl.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/VCloudComputeClientImpl.java
new file mode 100644
index 0000000000..452af905f3
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/VCloudComputeClientImpl.java
@@ -0,0 +1,89 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.compute.internal;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.net.URI;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.domain.NodeState;
+import org.jclouds.vcloud.VCloudClient;
+import org.jclouds.vcloud.compute.VCloudComputeClient;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.Status;
+import org.jclouds.vcloud.domain.VAppTemplate;
+import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
+
+import com.google.common.base.Predicate;
+import com.google.inject.Inject;
+
+/**
+ * @author Adrian Cole
+ */
+@Singleton
+public class VCloudComputeClientImpl extends CommonVCloudComputeClientImpl implements VCloudComputeClient {
+
+ protected final Map vAppStatusToNodeState;
+
+ @Inject
+ public VCloudComputeClientImpl(VCloudClient client, Predicate successTester,
+ Map vAppStatusToNodeState) {
+ super(client, successTester);
+ this.vAppStatusToNodeState = vAppStatusToNodeState;
+ }
+
+ @Override
+ public Map start(@Nullable URI VDC, URI templateId, String name,
+ InstantiateVAppTemplateOptions options, int... portsToOpen) {
+ checkNotNull(options, "options");
+ logger.debug(">> instantiating vApp vDC(%s) template(%s) name(%s) options(%s) ", VDC, templateId, name, options);
+
+ VDC vdc = client.getVDC(VDC);
+ VAppTemplate template = client.getVAppTemplate(templateId);
+
+ VApp vAppResponse = VCloudClient.class.cast(client).instantiateVAppTemplateInVDC(vdc.getId(), template.getId(),
+ name, options);
+ logger.debug("<< instantiated VApp(%s)", vAppResponse.getName());
+
+ logger.debug(">> deploying vApp(%s)", vAppResponse.getName());
+
+ Task task = client.deployVApp(vAppResponse.getId());
+ if (options.shouldBlockOnDeploy()) {
+ if (!taskTester.apply(task.getLocation())) {
+ throw new TaskException("deploy", vAppResponse, task);
+ }
+ logger.debug("<< deployed vApp(%s)", vAppResponse.getName());
+
+ logger.debug(">> powering vApp(%s)", vAppResponse.getName());
+ task = client.powerOnVApp(vAppResponse.getId());
+ if (!taskTester.apply(task.getLocation())) {
+ throw new TaskException("powerOn", vAppResponse, task);
+ }
+ logger.debug("<< on vApp(%s)", vAppResponse.getName());
+ }
+ return parseAndValidateResponse(template, vAppResponse);
+ }
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/VCloudExpressComputeClientImpl.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/VCloudExpressComputeClientImpl.java
new file mode 100644
index 0000000000..5809b77c91
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/internal/VCloudExpressComputeClientImpl.java
@@ -0,0 +1,90 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.compute.internal;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.net.URI;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.domain.NodeState;
+import org.jclouds.vcloud.VCloudExpressClient;
+import org.jclouds.vcloud.compute.VCloudExpressComputeClient;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.Status;
+import org.jclouds.vcloud.domain.VAppTemplate;
+import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
+
+import com.google.common.base.Predicate;
+import com.google.inject.Inject;
+
+/**
+ * @author Adrian Cole
+ */
+@Singleton
+public class VCloudExpressComputeClientImpl extends CommonVCloudComputeClientImpl implements VCloudExpressComputeClient {
+
+ protected final Map vAppStatusToNodeState;
+
+ @Inject
+ public VCloudExpressComputeClientImpl(VCloudExpressClient client, Predicate successTester,
+ Map vAppStatusToNodeState) {
+ super(client, successTester);
+ this.vAppStatusToNodeState = vAppStatusToNodeState;
+ }
+
+ @Override
+ public Map start(@Nullable URI VDC, URI templateId, String name,
+ InstantiateVAppTemplateOptions options, int... portsToOpen) {
+ checkNotNull(options, "options");
+ logger.debug(">> instantiating vApp vDC(%s) template(%s) name(%s) options(%s) ", VDC, templateId, name, options);
+
+ VDC vdc = client.getVDC(VDC);
+ VAppTemplate template = client.getVAppTemplate(templateId);
+
+ VApp vAppResponse = VCloudExpressClient.class.cast(client).instantiateVAppTemplateInVDC(vdc.getId(),
+ template.getId(), name, options);
+ logger.debug("<< instantiated VApp(%s)", vAppResponse.getName());
+
+ logger.debug(">> deploying vApp(%s)", vAppResponse.getName());
+
+ Task task = client.deployVApp(vAppResponse.getId());
+ if (options.shouldBlockOnDeploy()) {
+ if (!taskTester.apply(task.getLocation())) {
+ throw new TaskException("deploy", vAppResponse, task);
+ }
+ logger.debug("<< deployed vApp(%s)", vAppResponse.getName());
+
+ logger.debug(">> powering vApp(%s)", vAppResponse.getName());
+ task = client.powerOnVApp(vAppResponse.getId());
+ if (!taskTester.apply(task.getLocation())) {
+ throw new TaskException("powerOn", vAppResponse, task);
+ }
+ logger.debug("<< on vApp(%s)", vAppResponse.getName());
+ }
+ return parseAndValidateResponse(template, vAppResponse);
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudAddNodeWithTagStrategy.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudAddNodeWithTagStrategy.java
index d33ad7dfb5..b496ce1d7c 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudAddNodeWithTagStrategy.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudAddNodeWithTagStrategy.java
@@ -38,7 +38,7 @@ import org.jclouds.domain.Credentials;
import org.jclouds.vcloud.VCloudClient;
import org.jclouds.vcloud.compute.VCloudComputeClient;
import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.domain.VAppStatus;
+import org.jclouds.vcloud.domain.Status;
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
import com.google.common.collect.ImmutableMap;
@@ -50,11 +50,11 @@ import com.google.common.collect.ImmutableMap;
public class VCloudAddNodeWithTagStrategy implements AddNodeWithTagStrategy {
protected final VCloudClient client;
protected final VCloudComputeClient computeClient;
- protected final Map vAppStatusToNodeState;
+ protected final Map vAppStatusToNodeState;
@Inject
protected VCloudAddNodeWithTagStrategy(VCloudClient client, VCloudComputeClient computeClient,
- Map vAppStatusToNodeState) {
+ Map vAppStatusToNodeState) {
this.client = client;
this.computeClient = computeClient;
this.vAppStatusToNodeState = vAppStatusToNodeState;
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudDestroyNodeStrategy.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudDestroyNodeStrategy.java
index 3f0f59ced2..5ebfe793cf 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudDestroyNodeStrategy.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudDestroyNodeStrategy.java
@@ -29,18 +29,18 @@ import javax.inject.Singleton;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.strategy.DestroyNodeStrategy;
import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
-import org.jclouds.vcloud.compute.VCloudComputeClient;
+import org.jclouds.vcloud.compute.CommonVCloudComputeClient;
/**
* @author Adrian Cole
*/
@Singleton
public class VCloudDestroyNodeStrategy implements DestroyNodeStrategy {
- protected final VCloudComputeClient computeClient;
+ protected final CommonVCloudComputeClient computeClient;
protected final GetNodeMetadataStrategy getNode;
@Inject
- protected VCloudDestroyNodeStrategy(VCloudComputeClient computeClient, GetNodeMetadataStrategy getNode) {
+ protected VCloudDestroyNodeStrategy(CommonVCloudComputeClient computeClient, GetNodeMetadataStrategy getNode) {
this.computeClient = computeClient;
this.getNode = getNode;
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudExpressAddNodeWithTagStrategy.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudExpressAddNodeWithTagStrategy.java
new file mode 100644
index 0000000000..154a7a33ff
--- /dev/null
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudExpressAddNodeWithTagStrategy.java
@@ -0,0 +1,89 @@
+/**
+ *
+ * Copyright (C) 2010 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.compute.strategy;
+
+import static org.jclouds.vcloud.options.InstantiateVAppTemplateOptions.Builder.processorCount;
+
+import java.net.URI;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeState;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.domain.internal.NodeMetadataImpl;
+import org.jclouds.compute.domain.os.CIMOperatingSystem;
+import org.jclouds.compute.strategy.AddNodeWithTagStrategy;
+import org.jclouds.domain.Credentials;
+import org.jclouds.vcloud.VCloudExpressClient;
+import org.jclouds.vcloud.compute.VCloudExpressComputeClient;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.Status;
+import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * @author Adrian Cole
+ */
+@Singleton
+public class VCloudExpressAddNodeWithTagStrategy implements AddNodeWithTagStrategy {
+ protected final VCloudExpressClient client;
+ protected final VCloudExpressComputeClient computeClient;
+ protected final Map vAppStatusToNodeState;
+
+ @Inject
+ protected VCloudExpressAddNodeWithTagStrategy(VCloudExpressClient client, VCloudExpressComputeClient computeClient,
+ Map vAppStatusToNodeState) {
+ this.client = client;
+ this.computeClient = computeClient;
+ this.vAppStatusToNodeState = vAppStatusToNodeState;
+ }
+
+ @Override
+ public NodeMetadata execute(String tag, String name, Template template) {
+ InstantiateVAppTemplateOptions options = processorCount(Double.valueOf(template.getSize().getCores()).intValue())
+ .memory(template.getSize().getRam()).disk(template.getSize().getDisk() * 1024 * 1024l);
+ if (!template.getOptions().shouldBlockUntilRunning())
+ options.blockOnDeploy(false);
+ Map metaMap = computeClient.start(URI.create(template.getLocation().getId()), URI.create(template
+ .getImage().getId()), name, options, template.getOptions().getInboundPorts());
+ VApp vApp = client.getVApp(URI.create(metaMap.get("id")));
+ return newCreateNodeResponse(tag, template, metaMap, vApp);
+ }
+
+ protected NodeMetadata newCreateNodeResponse(String tag, Template template, Map metaMap, VApp vApp) {
+ return new NodeMetadataImpl(vApp.getId().toASCIIString(), vApp.getName(), vApp.getId().toASCIIString(), template
+ .getLocation(), vApp.getId(), ImmutableMap. of(), tag, template.getImage().getId(),
+ getOperatingSystemForVAppOrDefaultTo(vApp, template.getImage().getOperatingSystem()),
+ vAppStatusToNodeState.get(vApp.getStatus()), computeClient.getPublicAddresses(vApp.getId()),
+ computeClient.getPrivateAddresses(vApp.getId()), ImmutableMap. of(), new Credentials(
+ metaMap.get("username"), metaMap.get("password")));
+ }
+
+ private OperatingSystem getOperatingSystemForVAppOrDefaultTo(VApp vApp, OperatingSystem operatingSystem) {
+ return vApp.getOsType() != null ? new CIMOperatingSystem(CIMOperatingSystem.OSType.fromValue(vApp.getOsType()),
+ null, null, vApp.getOperatingSystemDescription()) : operatingSystem;
+ }
+
+}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudGetNodeMetadataStrategy.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudGetNodeMetadataStrategy.java
index 8bfa0b70eb..28f9d0ad4f 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudGetNodeMetadataStrategy.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudGetNodeMetadataStrategy.java
@@ -20,30 +20,75 @@
package org.jclouds.vcloud.compute.strategy;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.compute.util.ComputeServiceUtils.parseTagFromName;
+import java.net.URI;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Resource;
import javax.inject.Inject;
+import javax.inject.Named;
import javax.inject.Singleton;
+import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeState;
+import org.jclouds.compute.domain.internal.NodeMetadataImpl;
+import org.jclouds.compute.domain.os.CIMOperatingSystem;
+import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
-import org.jclouds.vcloud.compute.functions.VCloudGetNodeMetadata;
+import org.jclouds.domain.Location;
+import org.jclouds.logging.Logger;
+import org.jclouds.vcloud.CommonVCloudClient;
+import org.jclouds.vcloud.compute.CommonVCloudComputeClient;
+import org.jclouds.vcloud.compute.functions.FindLocationForResource;
+import org.jclouds.vcloud.compute.functions.GetExtra;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.Status;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMap;
/**
* @author Adrian Cole
*/
@Singleton
public class VCloudGetNodeMetadataStrategy implements GetNodeMetadataStrategy {
-
- protected final VCloudGetNodeMetadata getNodeMetadata;
+ @Resource
+ @Named(ComputeServiceConstants.COMPUTE_LOGGER)
+ public Logger logger = Logger.NULL;
+ protected final CommonVCloudClient client;
+ protected final CommonVCloudComputeClient computeClient;
+ protected final Supplier> images;
+ protected final FindLocationForResource findLocationForResourceInVDC;
+ protected final GetExtra getExtra;
+ protected final Map vAppStatusToNodeState;
@Inject
- protected VCloudGetNodeMetadataStrategy(VCloudGetNodeMetadata getNodeMetadata) {
- this.getNodeMetadata = getNodeMetadata;
+ protected VCloudGetNodeMetadataStrategy(CommonVCloudClient client, CommonVCloudComputeClient computeClient,
+ Map vAppStatusToNodeState, GetExtra getExtra,
+ FindLocationForResource findLocationForResourceInVDC, Supplier> images) {
+ this.client = checkNotNull(client, "client");
+ this.images = checkNotNull(images, "images");
+ this.getExtra = checkNotNull(getExtra, "getExtra");
+ this.findLocationForResourceInVDC = checkNotNull(findLocationForResourceInVDC, "findLocationForResourceInVDC");
+ this.computeClient = checkNotNull(computeClient, "computeClient");
+ this.vAppStatusToNodeState = checkNotNull(vAppStatusToNodeState, "vAppStatusToNodeState");
}
- @Override
- public NodeMetadata execute(String id) {
- return getNodeMetadata.execute(checkNotNull(id, "node.id"));
+ public NodeMetadata execute(String in) {
+ URI id = URI.create(in);
+ VApp from = client.getVApp(id);
+ if (from == null)
+ return null;
+ String tag = parseTagFromName(from.getName());
+ Location location = findLocationForResourceInVDC.apply(from.getVDC());
+ return new NodeMetadataImpl(in, from.getName(), in, location, from.getId(), ImmutableMap. of(),
+ tag, null, from.getOsType() != null ? new CIMOperatingSystem(CIMOperatingSystem.OSType.fromValue(from
+ .getOsType()), null, null, from.getOperatingSystemDescription()) : null, vAppStatusToNodeState
+ .get(from.getStatus()), computeClient.getPublicAddresses(id), computeClient
+ .getPrivateAddresses(id), getExtra.apply(from), null);
}
}
\ No newline at end of file
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudListNodesStrategy.java b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudListNodesStrategy.java
index 661d965f2e..e002e09d04 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudListNodesStrategy.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudListNodesStrategy.java
@@ -36,10 +36,9 @@ import org.jclouds.compute.domain.internal.ComputeMetadataImpl;
import org.jclouds.compute.strategy.ListNodesStrategy;
import org.jclouds.domain.Location;
import org.jclouds.logging.Logger;
-import org.jclouds.vcloud.VCloudClient;
+import org.jclouds.vcloud.CommonVCloudClient;
import org.jclouds.vcloud.VCloudMediaType;
import org.jclouds.vcloud.compute.functions.FindLocationForResource;
-import org.jclouds.vcloud.compute.functions.VCloudGetNodeMetadata;
import org.jclouds.vcloud.domain.NamedResource;
import org.jclouds.vcloud.endpoints.Org;
@@ -55,14 +54,14 @@ import com.google.inject.internal.util.ImmutableSet;
/**
* @author Adrian Cole
*/
-//TODO REFACTOR!!! needs to be parallel
+// TODO REFACTOR!!! needs to be parallel
@Singleton
public class VCloudListNodesStrategy implements ListNodesStrategy {
@Resource
@Named(COMPUTE_LOGGER)
public Logger logger = Logger.NULL;
- protected final VCloudGetNodeMetadata getNodeMetadata;
- protected final VCloudClient client;
+ protected final VCloudGetNodeMetadataStrategy getNodeMetadata;
+ protected final CommonVCloudClient client;
protected final FindLocationForResource findLocationForResourceInVDC;
Set blackListVAppNames = ImmutableSet. of();
@@ -75,8 +74,9 @@ public class VCloudListNodesStrategy implements ListNodesStrategy {
private final Supplier