From 72c2e70653b589c54dbc9b137da024025e57e63e Mon Sep 17 00:00:00 2001
From: Scott Baker <smbaker@gmail.com>
Date: Mon, 11 Aug 2014 18:58:52 -0700
Subject: [PATCH] fix ips not set in sliver.ip

---
 .../steps/sync_sliver_ips.py                  | 30 ++++++++++++++-----
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/planetstack/openstack_observer/steps/sync_sliver_ips.py b/planetstack/openstack_observer/steps/sync_sliver_ips.py
index bd1d572..8ce78f0 100644
--- a/planetstack/openstack_observer/steps/sync_sliver_ips.py
+++ b/planetstack/openstack_observer/steps/sync_sliver_ips.py
@@ -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")
+        if ext_net_addrs:
+            ip = ext_net_addrs[0]["addr"]
+
+        # If there was no public address, then grab the first address in the
+        # list.
+        if not ip:
+            if server.addresses:
+                addrs = server.addresses.values()[0]
+                if addrs:
+                    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))
-- 
2.47.0