blob: 8ce78f0a09b69e9ba94e069da8fe3b5b859e386b [file] [log] [blame]
Sapan Bhatia24836f12013-08-27 10:16:05 -04001import os
2import base64
Tony Mackae7f30c2013-09-25 12:46:50 -04003from django.db.models import F, Q
Sapan Bhatia24836f12013-08-27 10:16:05 -04004from planetstack.config import Config
Sapan Bhatia04c94ad2013-09-02 18:00:28 -04005from observer.openstacksyncstep import OpenStackSyncStep
6from core.models.sliver import Sliver
Scott Baker72c2e702014-08-11 18:58:52 -07007from util.logger import Logger, logging
Sapan Bhatia24836f12013-08-27 10:16:05 -04008
9class SyncSliverIps(OpenStackSyncStep):
Tony Mackce79de02013-09-24 10:12:33 -040010 provides=[Sliver]
11 requested_interval=0
Tony Mack66646d52013-09-24 21:47:12 -040012
Sapan Bhatiab83643c2014-07-23 09:59:32 -040013 def fetch_pending(self, deleted):
14 # Not supported yet
15 if (deleted):
16 return []
Tony Mackce79de02013-09-24 10:12:33 -040017 slivers = Sliver.objects.filter(ip=None)
18 return slivers
Sapan Bhatia24836f12013-08-27 10:16:05 -040019
Tony Mackce79de02013-09-24 10:12:33 -040020 def sync_record(self, sliver):
Scott Baker72c2e702014-08-11 18:58:52 -070021 driver = self.driver.client_driver(tenant=sliver.slice.name,
22 deployment=sliver.node.deployment.name)
Tony Mackce79de02013-09-24 10:12:33 -040023 servers = driver.shell.nova.servers.findall(id=sliver.instance_id)
24 if not servers:
25 return
26 server = servers[0]
Scott Baker72c2e702014-08-11 18:58:52 -070027
28 # First try to grab the dedicated public address
29 # NOTE: "ext-net" is hardcoded here.
30 ip = None
31 ext_net_addrs = server.addresses.get("ext-net")
32 if ext_net_addrs:
33 ip = ext_net_addrs[0]["addr"]
34
35 # If there was no public address, then grab the first address in the
36 # list.
37 if not ip:
38 if server.addresses:
39 addrs = server.addresses.values()[0]
40 if addrs:
41 ip = addrs[0]["addr"]
42
43 if ip and ip!=sliver.ip:
44 sliver.ip = ip
Tony Mack261f8582014-04-21 17:08:31 -040045 sliver.save()
Scott Baker72c2e702014-08-11 18:58:52 -070046 logger.info("saved sliver ip: %s %s" % (sliver, ip))