aboutsummaryrefslogtreecommitdiffstats
path: root/heatbridge/heatbridge/HeatBridge.py
diff options
context:
space:
mode:
Diffstat (limited to 'heatbridge/heatbridge/HeatBridge.py')
-rw-r--r--heatbridge/heatbridge/HeatBridge.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/heatbridge/heatbridge/HeatBridge.py b/heatbridge/heatbridge/HeatBridge.py
new file mode 100644
index 0000000..f9b9580
--- /dev/null
+++ b/heatbridge/heatbridge/HeatBridge.py
@@ -0,0 +1,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; \ No newline at end of file