fix ips not set in sliver.ip
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 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 @@
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))