in Openstack you need to make a blocking call to IaaS in order to retrieve private IP addresses
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/8102ac90 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/8102ac90 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/8102ac90 Branch: refs/heads/master Commit: 8102ac90f16e9e94f37b07f5a1ddbe5a87a8d0cd Parents: 9c4e89c Author: Nirmal Fernando <[email protected]> Authored: Tue Apr 1 15:49:39 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Tue Apr 1 15:49:39 2014 +0530 ---------------------------------------------------------------------- .../controller/iaases/OpenstackNovaIaas.java | 24 ++++++++------------ .../cloud/controller/interfaces/Iaas.java | 10 ++++---- .../util/CloudControllerConstants.java | 1 + 3 files changed, 14 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8102ac90/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java index 6a5d221..dccbb2e 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java @@ -37,16 +37,12 @@ import org.apache.stratos.cloud.controller.util.CloudControllerConstants; import org.apache.stratos.cloud.controller.util.CloudControllerUtil; import org.apache.stratos.cloud.controller.validate.OpenstackNovaPartitionValidator; import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator; -import org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadataBuilder; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.options.TemplateOptions; -import org.jclouds.domain.Location; -import org.jclouds.domain.LocationBuilder; -import org.jclouds.domain.LocationScope; import org.jclouds.openstack.nova.v2_0.NovaApi; import org.jclouds.openstack.nova.v2_0.NovaApiMetadata; import org.jclouds.openstack.nova.v2_0.NovaAsyncApi; @@ -72,6 +68,7 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; +@SuppressWarnings("deprecation") public class OpenstackNovaIaas extends Iaas { private static final Log log = LogFactory.getLog(OpenstackNovaIaas.class); @@ -124,12 +121,13 @@ public class OpenstackNovaIaas extends Iaas { Template template = templateBuilder.build(); - // if you wish to auto assign IPs, instance spawning call should be - // blocking, but if you - // wish to assign IPs manually, it can be non-blocking. - // is auto-assign-ip mode or manual-assign-ip mode? - boolean blockUntilRunning = Boolean.parseBoolean(iaasInfo - .getProperty(CloudControllerConstants.AUTO_ASSIGN_IP)); + // In Openstack the call to IaaS should be blocking, in order to retrieve + // IP addresses. + boolean blockUntilRunning = true; + if(iaasInfo.getProperty(CloudControllerConstants.BLOCK_UNTIL_RUNNING) != null) { + blockUntilRunning = Boolean.parseBoolean(iaasInfo.getProperty( + CloudControllerConstants.BLOCK_UNTIL_RUNNING)); + } template.getOptions().as(TemplateOptions.class) .blockUntilRunning(blockUntilRunning); @@ -265,7 +263,6 @@ public class OpenstackNovaIaas extends Iaas { // wait till the fixed IP address gets assigned - this is needed before // we associate a public IP - while (node.getPrivateAddresses() == null) { CloudControllerUtil.sleep(1000); } @@ -289,9 +286,6 @@ public class OpenstackNovaIaas extends Iaas { retries++; } - NodeMetadataBuilder.fromNodeMetadata(node) - .publicAddresses(ImmutableSet.of(ip)).build(); - log.info("Successfully associated an IP address " + ip + " for node with id: " + node.getId()); @@ -336,7 +330,7 @@ public class OpenstackNovaIaas extends Iaas { boolean isAvailable = false; for (FloatingIP fip : unassignedIps) { if(log.isDebugEnabled()) { - log.debug("penstackNovaIaas:associatePredefinedAddress:iterating over available floatingip:" + fip); + log.debug("OpenstackNovaIaas:associatePredefinedAddress:iterating over available floatingip:" + fip); } if (ip.equals(fip.getIp())) { if(log.isDebugEnabled()) { http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8102ac90/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java index 56be59c..492171d 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java @@ -77,8 +77,7 @@ public abstract class Iaas { * @ip preallocated floating Ip * @return associated public IP. */ - - abstract public String associatePredefinedAddress(NodeMetadata node, String ip); + public abstract String associatePredefinedAddress(NodeMetadata node, String ip); /** * This will deallocate/release the given IP address back to pool. @@ -166,10 +165,9 @@ public abstract class Iaas { */ public abstract void deleteVolume(String volumeId); - /* - This returns the device of the volume specified by the user. This is depends on IAAS. - For an instance /dev/sdf maps to /dev/xvdf in EC2 + /** + * This returns the device of the volume specified by the user. This is depends on IAAS. + * For an instance /dev/sdf maps to /dev/xvdf in EC2. */ - public abstract String getIaasDevice(String device); } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8102ac90/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java index c7c77a2..eaa4d60 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java @@ -249,6 +249,7 @@ public final class CloudControllerConstants { public static final String SUBNET_ID = "subnetId"; public static final String TAGS = "tags"; public static final String AUTO_ASSIGN_IP = "autoAssignIp"; + public static final String BLOCK_UNTIL_RUNNING = "blockUntilRunning"; public static final String INSTANCE_TYPE = "instanceType"; public static final String ASSOCIATE_PUBLIC_IP_ADDRESS = "associatePublicIpAddress"; public static final String LB_CLUSTER_ID_COL = "lbclusterId";
