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
|
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):
self.om = OpenstackManager(openstack_identity_url, OpenstackContext(username, password, tenant, region, owner));
self.am = AAIManager(OpenstackContext(username, password, tenant, region, owner));
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;
|