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]
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))