fix ips not set in sliver.ip
authorScott Baker <smbaker@gmail.com>
Tue, 12 Aug 2014 01:58:52 +0000 (18:58 -0700)
committerScott Baker <smbaker@gmail.com>
Tue, 12 Aug 2014 01:58:52 +0000 (18:58 -0700)
planetstack/openstack_observer/steps/sync_sliver_ips.py

index bd1d572..8ce78f0 100644 (file)
@@ -4,6 +4,7 @@ from django.db.models import F, Q
 from planetstack.config import Config
 from observer.openstacksyncstep import OpenStackSyncStep
 from core.models.sliver import Sliver
+from util.logger import Logger, logging
 
 class SyncSliverIps(OpenStackSyncStep):
     provides=[Sliver]
@@ -17,16 +18,29 @@ class SyncSliverIps(OpenStackSyncStep):
         return slivers
 
     def sync_record(self, sliver):
-        driver = self.driver.client_driver(tenant=sliver.slice.name, 
-                                           deployment=sliver.node.deployment.name)  
+        driver = self.driver.client_driver(tenant=sliver.slice.name,
+                                           deployment=sliver.node.deployment.name)
         servers = driver.shell.nova.servers.findall(id=sliver.instance_id)
         if not servers:
             return
         server = servers[0]
-        ips = server.addresses.get(sliver.slice.name, [])
-        if not ips:
-            return
-        sliver.ip = ips[0]['addr']
-        if sliver.ip:
+
+        # First try to grab the dedicated public address
+        # NOTE: "ext-net" is hardcoded here.
+        ip = None
+        ext_net_addrs = server.addresses.get("ext-net")\r
+        if ext_net_addrs:\r
+            ip = ext_net_addrs[0]["addr"]\r
+\r
+        # If there was no public address, then grab the first address in the\r
+        # list.\r
+        if not ip:\r
+            if server.addresses:\r
+                addrs = server.addresses.values()[0]\r
+                if addrs:\r
+                    ip = addrs[0]["addr"]
+
+        if ip and ip!=sliver.ip:
+            sliver.ip = ip
             sliver.save()
-            logger.info("saved sliver ip: %s %s" % (sliver, ips[0]))
+            logger.info("saved sliver ip: %s %s" % (sliver, ip))