Manually added OpenStack API code
[osm/vim-emu.git] / src / emuvim / api / openstack / openstack_api_endpoint.py
1 from manage import OpenstackManage
2 from openstack_dummies import *
3 import logging
4 import threading
5 import compute
6 import requests
7
8
9 class OpenstackApiEndpoint():
10 """
11 Base class for an OpenStack datacenter.
12 It holds information about all connected endpoints.
13 """
14 dc_apis = []
15
16 def __init__(self, listenip, port):
17 self.ip = listenip
18 self.port = port
19 self.compute = compute.OpenstackCompute()
20 self.openstack_endpoints = dict()
21 self.openstack_endpoints['keystone'] = KeystoneDummyApi(self.ip, self.port)
22 self.openstack_endpoints['neutron'] = NeutronDummyApi(self.ip, self.port + 4696, self.compute)
23 self.openstack_endpoints['nova'] = NovaDummyApi(self.ip, self.port + 3774, self.compute)
24 self.openstack_endpoints['heat'] = HeatDummyApi(self.ip, self.port + 3004, self.compute)
25 self.openstack_endpoints['glance'] = GlanceDummyApi(self.ip, self.port + 4242, self.compute)
26
27 self.rest_threads = list()
28 self.manage = OpenstackManage()
29 self.manage.add_endpoint(self)
30 OpenstackApiEndpoint.dc_apis.append(self)
31
32 def connect_datacenter(self, dc):
33 """
34 Connect a datacenter to this endpoint.
35 An endpoint can only be connected to a single datacenter.
36
37 :param dc: Datacenter object
38 :type dc: :class:`dc`
39 """
40 self.compute.dc = dc
41 for ep in self.openstack_endpoints.values():
42 ep.manage = self.manage
43 logging.info \
44 ("Connected DC(%s) to API endpoint %s(%s:%d)" % (dc.label, self.__class__.__name__, self.ip, self.port))
45
46 def connect_dc_network(self, dc_network):
47 """
48 Connect the datacenter network to the endpoint.
49
50 :param dc_network: Datacenter network reference
51 :type dc_network: :class:`.net`
52 """
53 self.manage.net = dc_network
54 self.compute.nets[self.manage.floating_network.id] = self.manage.floating_network
55 logging.info("Connected DCNetwork to API endpoint %s(%s:%d)" % (
56 self.__class__.__name__, self.ip, self.port))
57
58 def start(self):
59 """
60 Start all connected OpenStack endpoints that are connected to this API endpoint.
61 """
62 for component in self.openstack_endpoints.values():
63 component.compute = self.compute
64 component.manage = self.manage
65 thread = threading.Thread(target=component._start_flask, args=())
66 thread.daemon = True
67 thread.name = component.__class__
68 thread.start()
69
70 def stop(self):
71 """
72 Stop all connected OpenStack endpoints that are connected to this API endpoint.
73 """
74 for component in self.openstack_endpoints.values():
75 url = "http://" + component.ip + ":" + str(component.port) + "/shutdown"
76 requests.get(url)