aboutsummaryrefslogtreecommitdiffstats
path: root/heatbridge/heatbridge/HeatBridge.py
blob: f9b95801f8766c028ca7b7a081f8ff095c8ffd9d (plain)
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;