1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
import json
from OpenstackManager import OpenstackManager
from OpenstackContext import OpenstackContext
from AAIManager import AAIManager
class HeatBridge:
def __init__(self):
pass
def init_bridge(self, openstack_identity_url, username, password, tenant, region, owner, domain_id=None, project_name=None):
self.om = OpenstackManager(openstack_identity_url, OpenstackContext(username, password, tenant, region, owner, domain_id, project_name))
self.am = AAIManager(OpenstackContext(username, password, tenant, region, owner, domain_id, project_name))
def filterbyvalue(self, seq, key, value):
for el in seq:
if el[key] == value:
yield el
def build_request(self, heat_stack_id):
resources = self.om.get_stack_resources(heat_stack_id)
servers = list(self.filterbyvalue(resources, "resource_type", "OS::Nova::Server"))
# networks = list(self.filterbyvalue(resources, "resource_type", "OS::Neutron::Net"))
# subnets = list(self.filterbyvalue(resources, "resource_type", "OS::Neutron::Subnet"))
ports = list(self.filterbyvalue(resources, "resource_type", "OS::Neutron::Port"))
# keys = list(self.filterbyvalue(resources, "resource_type", "OS::Nova::KeyPair"))
put_blocks = []
# build the servers and attach them to vnf
server_put_blocks = []
image_put_blocks = []
flavor_put_blocks = []
for item in servers:
server_info = self.om.get_server_info(item['physical_resource_id'])
server_volumes = self.om.get_server_volumes(item['physical_resource_id'])
volumes = []
for vols in server_volumes:
volumes.append(self.om.get_volume_info(vols['id']))
aai_vserver = self.am.create_vserver_put(server_info, volumes)
flavor_info = self.om.get_flavor_info(server_info['flavor']['id'])
aai_flavor = self.am.create_flavor_put(flavor_info)
image_info = self.om.get_image_info(server_info['image']['id'])
aai_image = self.am.create_image_put(image_info, server_info)
server_put_blocks.append(self.am.create_put(aai_vserver))
image_put_blocks.append(self.am.create_put(aai_image))
flavor_put_blocks.append(self.am.create_put(aai_flavor))
put_blocks.extend(image_put_blocks)
put_blocks.extend(flavor_put_blocks)
put_blocks.extend(server_put_blocks)
# build the ports and attach them to servers
linterface_put_blocks = []
# all servers have same vnf id
random_server_info = self.om.get_server_info(servers[0]['physical_resource_id'])
for item in ports:
# todo: pass in the networks from above
port_info = self.om.get_port_info(item['physical_resource_id'])
aai_linterface = self.am.create_l_interface_put(port_info, random_server_info)
linterface_put_blocks.append(self.am.create_put(aai_linterface))
put_blocks.extend(linterface_put_blocks)
return json.dumps(self.am.create_transactions(put_blocks))
def bridge_data(self, heat_stack_id):
request = self.build_request(heat_stack_id)
print(request)
return request
|