blob: 8e50cf375d3a05e63792f1350d3d4863549e9ac4 [file] [log] [blame]
Tony Mackcafd0b02013-04-17 10:45:12 -04001import os
Tony Mack951dab42013-05-02 19:51:45 -04002import sys
Scott Baker86e132c2015-02-11 21:38:09 -08003#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
Tony Mackcafd0b02013-04-17 10:45:12 -04004import time
Tony Mackd8515472015-08-19 11:58:18 -04005from core.models.instance import Instance
Siobhan Tully30fd4292013-05-10 08:59:56 -04006from openstack.manager import OpenStackManager
Tony Mackcafd0b02013-04-17 10:45:12 -04007
Tony Mackd8515472015-08-19 11:58:18 -04008class InstanceAgent:
Tony Mackcafd0b02013-04-17 10:45:12 -04009
10 def run(self):
Tony Mack951dab42013-05-02 19:51:45 -040011 manager = OpenStackManager()
12 # exit if openstack is disable or unavailable
13 if not manager.enabled or not manager.has_openstack:
14 sys.exit()
15
16 while True :
Tony Mackcafd0b02013-04-17 10:45:12 -040017 # fill in null ip addresses
Tony Mackd8515472015-08-19 11:58:18 -040018 instances = Instance.objects.filter(ip=None)
19 for instance in instances:
Tony Mackffab0f22013-04-29 19:42:20 -040020 # update connection
Tony Mack951dab42013-05-02 19:51:45 -040021 manager.client.connect(username=manager.client.keystone.username,
22 password=manager.client.keystone.password,
Tony Mackd8515472015-08-19 11:58:18 -040023 tenant=instance.slice.name)
24 instance.os_manager = manager
25 servers = manager.client.nova.servers.findall(id=instance.instance_id)
Tony Mackcafd0b02013-04-17 10:45:12 -040026 if not servers:
27 continue
28 server = servers[0]
Tony Mackd8515472015-08-19 11:58:18 -040029 ips = server.addresses.get(instance.slice.name, [])
Tony Mackcafd0b02013-04-17 10:45:12 -040030 if not ips:
31 continue
Tony Mackd8515472015-08-19 11:58:18 -040032 instance.ip = ips[0]['addr']
33 instance.save()
Tony Mackcafd0b02013-04-17 10:45:12 -040034 time.sleep(7)
35
36
37if __name__ == '__main__':
Tony Mackd8515472015-08-19 11:58:18 -040038 InstanceAgent().run()
Tony Mackcafd0b02013-04-17 10:45:12 -040039