1 from manage
import OpenstackManage
2 from openstack_dummies
import *
11 class OpenstackApiEndpoint():
13 Base class for an OpenStack datacenter.
14 It holds information about all connected endpoints.
18 def __init__(self
, listenip
, port
):
21 self
.compute
= compute
.OpenstackCompute()
22 self
.openstack_endpoints
= dict()
23 self
.openstack_endpoints
['keystone'] = KeystoneDummyApi(self
.ip
, self
.port
)
24 self
.openstack_endpoints
['neutron'] = NeutronDummyApi(self
.ip
, self
.port
+ 4696, self
.compute
)
25 self
.openstack_endpoints
['nova'] = NovaDummyApi(self
.ip
, self
.port
+ 3774, self
.compute
)
26 self
.openstack_endpoints
['heat'] = HeatDummyApi(self
.ip
, self
.port
+ 3004, self
.compute
)
27 self
.openstack_endpoints
['glance'] = GlanceDummyApi(self
.ip
, self
.port
+ 4242, self
.compute
)
29 self
.rest_threads
= list()
30 self
.manage
= OpenstackManage()
31 self
.manage
.add_endpoint(self
)
32 OpenstackApiEndpoint
.dc_apis
.append(self
)
34 def connect_datacenter(self
, dc
):
36 Connect a datacenter to this endpoint.
37 An endpoint can only be connected to a single datacenter.
39 :param dc: Datacenter object
43 for ep
in self
.openstack_endpoints
.values():
44 ep
.manage
= self
.manage
46 ("Connected DC(%s) to API endpoint %s(%s:%d)" % (dc
.label
, self
.__class
__.__name
__, self
.ip
, self
.port
))
48 def connect_dc_network(self
, dc_network
):
50 Connect the datacenter network to the endpoint.
52 :param dc_network: Datacenter network reference
53 :type dc_network: :class:`.net`
55 self
.manage
.net
= dc_network
56 self
.compute
.nets
[self
.manage
.floating_network
.id] = self
.manage
.floating_network
57 logging
.info("Connected DCNetwork to API endpoint %s(%s:%d)" % (
58 self
.__class
__.__name
__, self
.ip
, self
.port
))
60 def start(self
, wait_for_port
=False):
62 Start all connected OpenStack endpoints that are connected to this API endpoint.
64 for component
in self
.openstack_endpoints
.values():
65 component
.compute
= self
.compute
66 component
.manage
= self
.manage
67 thread
= threading
.Thread(target
=component
._start
_flask
, args
=())
69 thread
.name
= component
.__class
__
72 self
._wait
_for
_port
(component
.ip
, component
.port
)
77 Stop all connected OpenStack endpoints that are connected to this API endpoint.
79 for component
in self
.openstack_endpoints
.values():
80 url
= "http://" + component
.ip
+ ":" + str(component
.port
) + "/shutdown"
87 def _wait_for_port(self
, ip
, port
):
88 for i
in range(0, 10):
89 s
= socket
.socket(socket
.AF_INET
, socket
.SOCK_STREAM
)
90 s
.settimeout(1) # 1 Second Timeout
91 r
= s
.connect_ex((ip
, port
))
93 break # port is open proceed
95 logging
.warning("Waiting for {}:{} ... ({}/10)".format(ip
, port
, i
+ 1))