diff --git a/labs/hpcloud-compute/src/test/java/org/jclouds/hpcloud/compute/features/HPCloudComputeFloatingIPClientLiveTest.java b/labs/hpcloud-compute/src/test/java/org/jclouds/hpcloud/compute/features/HPCloudComputeFloatingIPClientLiveTest.java
index 81856da6b1..0135c44035 100644
--- a/labs/hpcloud-compute/src/test/java/org/jclouds/hpcloud/compute/features/HPCloudComputeFloatingIPClientLiveTest.java
+++ b/labs/hpcloud-compute/src/test/java/org/jclouds/hpcloud/compute/features/HPCloudComputeFloatingIPClientLiveTest.java
@@ -18,7 +18,7 @@
*/
package org.jclouds.hpcloud.compute.features;
-import org.jclouds.openstack.nova.v1_1.features.FloatingIPClientLiveTest;
+import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPClientLiveTest;
import org.testng.annotations.Test;
/**
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/NovaAsyncClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/NovaAsyncClient.java
index 5c99d5bd83..1c24c998ef 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/NovaAsyncClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/NovaAsyncClient.java
@@ -23,11 +23,11 @@ import java.util.Set;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.location.Region;
import org.jclouds.location.functions.RegionToEndpointOrProviderIfNull;
+import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPAsyncClient;
+import org.jclouds.openstack.nova.v1_1.extensions.KeyPairAsyncClient;
+import org.jclouds.openstack.nova.v1_1.extensions.SecurityGroupAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.FlavorAsyncClient;
-import org.jclouds.openstack.nova.v1_1.features.FloatingIPAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.ImageAsyncClient;
-import org.jclouds.openstack.nova.v1_1.features.KeyPairAsyncClient;
-import org.jclouds.openstack.nova.v1_1.features.SecurityGroupAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.ServerAsyncClient;
import org.jclouds.rest.annotations.Delegate;
import org.jclouds.rest.annotations.EndpointParam;
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/NovaClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/NovaClient.java
index 3f2dab31d3..cb9cdd07b0 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/NovaClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/NovaClient.java
@@ -25,11 +25,11 @@ import org.jclouds.concurrent.Timeout;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.location.Region;
import org.jclouds.location.functions.RegionToEndpointOrProviderIfNull;
+import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPClient;
+import org.jclouds.openstack.nova.v1_1.extensions.KeyPairClient;
+import org.jclouds.openstack.nova.v1_1.extensions.SecurityGroupClient;
import org.jclouds.openstack.nova.v1_1.features.FlavorClient;
-import org.jclouds.openstack.nova.v1_1.features.FloatingIPClient;
import org.jclouds.openstack.nova.v1_1.features.ImageClient;
-import org.jclouds.openstack.nova.v1_1.features.KeyPairClient;
-import org.jclouds.openstack.nova.v1_1.features.SecurityGroupClient;
import org.jclouds.openstack.nova.v1_1.features.ServerClient;
import org.jclouds.rest.annotations.Delegate;
import org.jclouds.rest.annotations.EndpointParam;
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java
index 3e9ea93bac..7f5cda266a 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java
@@ -28,16 +28,16 @@ import org.jclouds.http.annotation.ServerError;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule;
import org.jclouds.openstack.nova.v1_1.NovaAsyncClient;
import org.jclouds.openstack.nova.v1_1.NovaClient;
+import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPAsyncClient;
+import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPClient;
+import org.jclouds.openstack.nova.v1_1.extensions.KeyPairAsyncClient;
+import org.jclouds.openstack.nova.v1_1.extensions.KeyPairClient;
+import org.jclouds.openstack.nova.v1_1.extensions.SecurityGroupAsyncClient;
+import org.jclouds.openstack.nova.v1_1.extensions.SecurityGroupClient;
import org.jclouds.openstack.nova.v1_1.features.FlavorAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.FlavorClient;
-import org.jclouds.openstack.nova.v1_1.features.FloatingIPAsyncClient;
-import org.jclouds.openstack.nova.v1_1.features.FloatingIPClient;
import org.jclouds.openstack.nova.v1_1.features.ImageAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.ImageClient;
-import org.jclouds.openstack.nova.v1_1.features.KeyPairAsyncClient;
-import org.jclouds.openstack.nova.v1_1.features.KeyPairClient;
-import org.jclouds.openstack.nova.v1_1.features.SecurityGroupAsyncClient;
-import org.jclouds.openstack.nova.v1_1.features.SecurityGroupClient;
import org.jclouds.openstack.nova.v1_1.features.ServerAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.ServerClient;
import org.jclouds.openstack.nova.v1_1.handlers.NovaErrorHandler;
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPAsyncClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPAsyncClient.java
similarity index 97%
rename from labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPAsyncClient.java
rename to labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPAsyncClient.java
index f70a68f12b..3fc4d16046 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPAsyncClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPAsyncClient.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Set;
@@ -48,6 +48,7 @@ import com.google.common.util.concurrent.ListenableFuture;
*
* @see FloatingIPClient
* @author Jeremy Daggett
+ * @see
*/
@SkipEncoding({ '/', '=' })
@RequestFilters(AuthenticateRequest.class)
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClient.java
similarity index 97%
rename from labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClient.java
rename to labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClient.java
index 7c1e72681e..59934d94f3 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClient.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Set;
import java.util.concurrent.TimeUnit;
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/KeyPairAsyncClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairAsyncClient.java
similarity index 96%
rename from labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/KeyPairAsyncClient.java
rename to labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairAsyncClient.java
index 0827db62fa..4dd69cb597 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/KeyPairAsyncClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairAsyncClient.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Map;
import java.util.Set;
@@ -49,6 +49,7 @@ import com.google.common.util.concurrent.ListenableFuture;
*
* @see KeyPairClient
* @author Jeremy Daggett
+ * @see
*/
@SkipEncoding({ '/', '=' })
@RequestFilters(AuthenticateRequest.class)
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClient.java
similarity index 97%
rename from labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClient.java
rename to labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClient.java
index 7c4cc70094..075272b3a8 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClient.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Map;
import java.util.Set;
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/SecurityGroupAsyncClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/SecurityGroupAsyncClient.java
similarity index 97%
rename from labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/SecurityGroupAsyncClient.java
rename to labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/SecurityGroupAsyncClient.java
index 9ce69670cb..3eb027efc1 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/SecurityGroupAsyncClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/SecurityGroupAsyncClient.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Set;
@@ -50,6 +50,7 @@ import com.google.common.util.concurrent.ListenableFuture;
*
* @see SecurityGroupClient
* @author Jeremy Daggett
+ * @see
*/
@SkipEncoding({ '/', '=' })
@RequestFilters(AuthenticateRequest.class)
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/SecurityGroupClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/SecurityGroupClient.java
similarity index 97%
rename from labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/SecurityGroupClient.java
rename to labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/SecurityGroupClient.java
index afe97e09f2..8b78950119 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/SecurityGroupClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/extensions/SecurityGroupClient.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Set;
import java.util.concurrent.TimeUnit;
diff --git a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FlavorClient.java b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FlavorClient.java
index ffad009fb4..12780ce772 100644
--- a/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FlavorClient.java
+++ b/labs/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/features/FlavorClient.java
@@ -35,7 +35,7 @@ import org.jclouds.openstack.nova.v1_1.domain.Flavor;
* />
* @author Jeremy Daggett
*/
-@Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
+@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface FlavorClient {
/**
diff --git a/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClientExpectTest.java b/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClientExpectTest.java
similarity index 99%
rename from labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClientExpectTest.java
rename to labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClientExpectTest.java
index ba637b22f4..e373ed1295 100644
--- a/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClientExpectTest.java
+++ b/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClientExpectTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
diff --git a/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClientLiveTest.java b/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClientLiveTest.java
similarity index 95%
rename from labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClientLiveTest.java
rename to labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClientLiveTest.java
index fbfdd941a1..da46fdff87 100644
--- a/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/FloatingIPClientLiveTest.java
+++ b/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/FloatingIPClientLiveTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
@@ -30,6 +30,10 @@ import org.jclouds.openstack.nova.v1_1.domain.Address;
import org.jclouds.openstack.nova.v1_1.domain.FloatingIP;
import org.jclouds.openstack.nova.v1_1.domain.Server;
import org.jclouds.openstack.nova.v1_1.domain.ServerStatus;
+import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPClient;
+import org.jclouds.openstack.nova.v1_1.features.FlavorClient;
+import org.jclouds.openstack.nova.v1_1.features.ImageClient;
+import org.jclouds.openstack.nova.v1_1.features.ServerClient;
import org.jclouds.openstack.nova.v1_1.internal.BaseNovaClientLiveTest;
import org.testng.annotations.Test;
diff --git a/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClientExpectTest.java b/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClientExpectTest.java
similarity index 99%
rename from labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClientExpectTest.java
rename to labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClientExpectTest.java
index 9aec691625..c9a7b70d43 100644
--- a/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClientExpectTest.java
+++ b/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClientExpectTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
diff --git a/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClientLiveTest.java b/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClientLiveTest.java
similarity index 96%
rename from labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClientLiveTest.java
rename to labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClientLiveTest.java
index 937acebc44..be1797c75c 100644
--- a/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/features/KeyPairClientLiveTest.java
+++ b/labs/openstack-nova/src/test/java/org/jclouds/openstack/nova/v1_1/extensions/KeyPairClientLiveTest.java
@@ -16,9 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.openstack.nova.v1_1.features;
+package org.jclouds.openstack.nova.v1_1.extensions;
import org.jclouds.openstack.nova.v1_1.domain.KeyPair;
+import org.jclouds.openstack.nova.v1_1.extensions.KeyPairClient;
import org.jclouds.openstack.nova.v1_1.internal.BaseNovaClientLiveTest;
import org.testng.annotations.Test;
diff --git a/labs/openstack-nova/src/test/resources/logback.xml b/labs/openstack-nova/src/test/resources/logback.xml
index c1bb1b78c4..d7d07e9668 100644
--- a/labs/openstack-nova/src/test/resources/logback.xml
+++ b/labs/openstack-nova/src/test/resources/logback.xml
@@ -4,7 +4,7 @@
target/test-data/jclouds.log
- %d %-5p [%c] (%t) %m%n
+ %d %-5p [%c] [%thread] %m%n
@@ -12,7 +12,7 @@
target/test-data/jclouds-wire.log
- %d %-5p [%c] (%t) %m%n
+ %d %-5p [%c] [%thread] %m%n
@@ -20,7 +20,7 @@
target/test-data/jclouds-compute.log
- %d %-5p [%c] (%t) %m%n
+ %d %-5p [%c] [%thread] %m%n
@@ -28,7 +28,7 @@
target/test-data/jclouds-ssh.log
- %d %-5p [%c] (%t) %m%n
+ %d %-5p [%c] [%thread] %m%n
diff --git a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/IMachineToNodeMetadata.java b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/IMachineToNodeMetadata.java
index 16fa75c6a4..5b9f4086d8 100644
--- a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/IMachineToNodeMetadata.java
+++ b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/IMachineToNodeMetadata.java
@@ -19,6 +19,8 @@
package org.jclouds.virtualbox.functions;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
import static org.jclouds.virtualbox.config.VirtualBoxComputeServiceContextModule.machineToNodeState;
import java.util.HashSet;
@@ -41,6 +43,7 @@ import org.jclouds.logging.Logger;
import org.virtualbox_4_1.IMachine;
import org.virtualbox_4_1.INetworkAdapter;
import org.virtualbox_4_1.MachineState;
+import org.virtualbox_4_1.NetworkAttachmentType;
import com.google.common.base.Function;
import com.google.common.base.Splitter;
@@ -66,22 +69,7 @@ public class IMachineToNodeMetadata implements Function
locationBuilder.scope(LocationScope.HOST);
nodeMetadataBuilder.location(locationBuilder.build());
- HardwareBuilder hardwareBuilder = new HardwareBuilder();
- hardwareBuilder.ram(vm.getMemorySize().intValue());
-
- // TODO: Get more processor information
- Set processors = new HashSet();
- for (int i = 0; i < vm.getCPUCount(); i++) {
- Processor processor = new Processor(1, 0);
- processors.add(processor);
- }
- hardwareBuilder.processors(processors);
-
- // TODO: How to get this?
- hardwareBuilder.is64Bit(false);
-
nodeMetadataBuilder.hostname(vm.getName());
-
MachineState vmState = vm.getState();
NodeState nodeState = machineToNodeState.get(vmState);
@@ -91,23 +79,35 @@ public class IMachineToNodeMetadata implements Function
logger.debug("Setting virtualbox node to: " + nodeState + " from machine state: " + vmState);
- INetworkAdapter networkAdapter = vm.getNetworkAdapter(0l);
- if (networkAdapter != null) {
- nodeMetadataBuilder.privateAddresses(ImmutableSet.of(networkAdapter.getNatDriver().getHostIP()));
- for (String nameProtocolnumberAddressInboudportGuestTargetport : networkAdapter.getNatDriver().getRedirects()){
- Iterable stuff = Splitter.on(',').split(nameProtocolnumberAddressInboudportGuestTargetport);
- String protocolNumber = Iterables.get(stuff, 1);
- String hostAddress= Iterables.get(stuff, 2);
- String inboundPort= Iterables.get(stuff, 3);
- String targetPort= Iterables.get(stuff, 5);
- if ("1".equals(protocolNumber) && "22".equals(targetPort))
- nodeMetadataBuilder.privateAddresses(ImmutableSet.of(hostAddress)).loginPort(Integer.parseInt(inboundPort));
+ // hardcoded set-up that works only for nat+host-only
+
+ // nat adapter
+ INetworkAdapter natAdapter = vm.getNetworkAdapter(0l);
+ checkNotNull(natAdapter, "slot 0 networkadapter");
+ checkState(natAdapter.getAttachmentType() == NetworkAttachmentType.NAT,
+ "expecting slot 0 to be a NAT attachment type (was: " + natAdapter.getAttachmentType() + ")");
+
+ int ipTermination = 0;
+
+ nodeMetadataBuilder.publicAddresses(ImmutableSet.of(natAdapter.getNatDriver().getHostIP()));
+ for (String nameProtocolnumberAddressInboudportGuestTargetport : natAdapter.getNatDriver().getRedirects()) {
+ Iterable stuff = Splitter.on(',').split(nameProtocolnumberAddressInboudportGuestTargetport);
+ String protocolNumber = Iterables.get(stuff, 1);
+ String hostAddress = Iterables.get(stuff, 2);
+ String inboundPort = Iterables.get(stuff, 3);
+ String targetPort = Iterables.get(stuff, 5);
+ if ("1".equals(protocolNumber) && "22".equals(targetPort)) {
+ int inPort = Integer.parseInt(inboundPort);
+ ipTermination = inPort % NodeCreator.NODE_PORT_INIT;
+ nodeMetadataBuilder.publicAddresses(ImmutableSet.of(hostAddress)).loginPort(inPort);
}
}
+ nodeMetadataBuilder.privateAddresses(ImmutableSet.of((NodeCreator.VMS_NETWORK + ipTermination) + ""));
+
LoginCredentials loginCredentials = new LoginCredentials("toor", "password", null, true);
nodeMetadataBuilder.credentials(loginCredentials);
-
+
return nodeMetadataBuilder.build();
}
diff --git a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/NodeCreator.java b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/NodeCreator.java
index 900118dc89..3270c5a894 100644
--- a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/NodeCreator.java
+++ b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/NodeCreator.java
@@ -68,8 +68,7 @@ public class NodeCreator implements Function manager;
private final Function cloner;
- private final AtomicInteger nodePorts;
- private final AtomicInteger nodeIps;
+ private final AtomicInteger nodes;
private MachineUtils machineUtils;
private Function imachineToNodeMetadata;
@@ -78,8 +77,7 @@ public class NodeCreator implements Function imachineToNodeMetadata) {
this.manager = manager;
this.cloner = cloner;
- this.nodePorts = new AtomicInteger(NODE_PORT_INIT);
- this.nodeIps = new AtomicInteger(1);
+ this.nodes = new AtomicInteger(0);
this.machineUtils = machineUtils;
this.imachineToNodeMetadata = imachineToNodeMetadata;
}
@@ -117,12 +115,12 @@ public class NodeCreator implements Function machineToNodeState = VirtualBoxComputeServiceContextModule.machineToNodeState;
- Set images = ImmutableSet.of();
- Set hardwares = ImmutableSet.of();
+ expect(vm.getName()).andReturn("mocked-vm").anyTimes();
+ expect(vm.getState()).andReturn(MachineState.PoweredOff).once();
- VirtualBox virtualBox = new VirtualBox();
- IMachineToNodeMetadata parser = new IMachineToNodeMetadata();
- IMachineToHardware hwParser = new IMachineToHardware(Suppliers.ofInstance(manager));
+ INetworkAdapter nat = createNiceMock(INetworkAdapter.class);
+ INATEngine natEng = createNiceMock(INATEngine.class);
- // hwParser.apply()
+ expect(vm.getNetworkAdapter(eq(0l))).andReturn(nat).once();
+ expect(nat.getAttachmentType()).andReturn(NetworkAttachmentType.NAT).once();
+ expect(nat.getNatDriver()).andReturn(natEng).anyTimes();
+ expect(natEng.getHostIP()).andReturn("127.0.0.1").once();
+ expect(natEng.getRedirects()).andReturn(ImmutableList.of("0,1,127.0.0.1,3001,,22"));
+ INetworkAdapter hostOnly = createNiceMock(INetworkAdapter.class);
+
+ replay(vm, nat, natEng, hostOnly);
+
+ NodeMetadata node = new IMachineToNodeMetadata().apply(vm);
+
+ assertEquals("mocked-vm", node.getName());
+ assertEquals(1, node.getPrivateAddresses().size());
+ assertEquals((NodeCreator.VMS_NETWORK + 1), Iterables.get(node.getPrivateAddresses(), 0));
+ assertEquals(1, node.getPublicAddresses().size());
+ assertEquals("127.0.0.1", Iterables.get(node.getPublicAddresses(), 0));
+ assertEquals(3001, node.getLoginPort());
}
}