bd1d572149ea907bd333a7b3585013e8eb66e180
[plstackapi.git] / planetstack / openstack_observer / steps / sync_sliver_ips.py
1 import os
2 import base64
3 from django.db.models import F, Q
4 from planetstack.config import Config
5 from observer.openstacksyncstep import OpenStackSyncStep
6 from core.models.sliver import Sliver
7
8 class SyncSliverIps(OpenStackSyncStep):
9     provides=[Sliver]
10     requested_interval=0
11
12     def fetch_pending(self, deleted):
13         # Not supported yet
14         if (deleted):
15             return []
16         slivers = Sliver.objects.filter(ip=None)
17         return slivers
18
19     def sync_record(self, sliver):
20         driver = self.driver.client_driver(tenant=sliver.slice.name, 
21                                            deployment=sliver.node.deployment.name)  
22         servers = driver.shell.nova.servers.findall(id=sliver.instance_id)
23         if not servers:
24             return
25         server = servers[0]
26         ips = server.addresses.get(sliver.slice.name, [])
27         if not ips:
28             return
29         sliver.ip = ips[0]['addr']
30         if sliver.ip:
31             sliver.save()
32             logger.info("saved sliver ip: %s %s" % (sliver, ips[0]))