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()); } }