| import os |
| import sys |
| #os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings") |
| import time |
| from core.models.sliver import Sliver |
| from openstack.manager import OpenStackManager |
| |
| class SliverAgent: |
| |
| def run(self): |
| manager = OpenStackManager() |
| # exit if openstack is disable or unavailable |
| if not manager.enabled or not manager.has_openstack: |
| sys.exit() |
| |
| while True : |
| # fill in null ip addresses |
| slivers = Sliver.objects.filter(ip=None) |
| for sliver in slivers: |
| # update connection |
| manager.client.connect(username=manager.client.keystone.username, |
| password=manager.client.keystone.password, |
| tenant=sliver.slice.name) |
| sliver.os_manager = manager |
| servers = manager.client.nova.servers.findall(id=sliver.instance_id) |
| if not servers: |
| continue |
| server = servers[0] |
| ips = server.addresses.get(sliver.slice.name, []) |
| if not ips: |
| continue |
| sliver.ip = ips[0]['addr'] |
| sliver.save() |
| time.sleep(7) |
| |
| |
| if __name__ == '__main__': |
| SliverAgent().run() |
| |