diff options
Diffstat (limited to 'heatbridge/heatbridge/AAIManager.py')
-rw-r--r-- | heatbridge/heatbridge/AAIManager.py | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/heatbridge/heatbridge/AAIManager.py b/heatbridge/heatbridge/AAIManager.py new file mode 100644 index 0000000..70f974b --- /dev/null +++ b/heatbridge/heatbridge/AAIManager.py @@ -0,0 +1,219 @@ +from collections import defaultdict + +class AAIManager: + """AAIManager manages the connection state and interaction between an aai instance and the heatbridge.""" + + def __init__(self, context): + self.openstack_context = context; + + def get_link(self, links, link_type): + for link in links: + if link['rel'] == link_type: + return link['href']; + + def create_transactions(self, *args): + transactions = defaultdict(list); + for arg in args: + transactions['transactions'].extend(arg); + return transactions; + + def create_put(self, *args): + put = defaultdict(list); + put['put'].extend(args); + return put; + + def create_vserver_put(self, server_info_dict, volumes_dict): + #setup + put = dict(); + body = dict(); + put['body'] = body; + + #required fields + put['uri'] = "/cloud-infrastructure/cloud-regions/cloud-region/" + self.openstack_context.owner \ + + "/" + self.openstack_context.region + "/tenants/tenant/" + self.openstack_context.tenant \ + + "/vservers/vserver/" + server_info_dict['id']; + body['vserver-id'] = server_info_dict['id']; + body['vserver-name'] = server_info_dict['name']; + body['vserver-name2'] = server_info_dict['name']; + body['prov-status'] = server_info_dict['status']; + body['vserver-selflink'] = self.get_link(server_info_dict['links'], "self"); + #body['in-maint']; + #body['is-closed-loop-disabled']; + #body['resource-version']; + + #optional fields + volumes = [] + body['volumes'] = volumes + for volume in volumes_dict: + volumes['volume'] = self.create_volume(volume); + + relations = []; + if self.__exists(server_info_dict['metadata'], 'vnf_id'): + data = self.__create_relationship_data("generic-vnf", "vnf-id", server_info_dict['metadata']['vnf_id']); + list = self.__create_relationship_data_list(data); + relations.append(self.__create_relationship("generic-vnf", list)); + if self.__exists(server_info_dict['flavor'], 'id'): + data = self.__create_relationship_data("flavor", "flavor-id", server_info_dict['flavor']['id']); + data2 = self.__create_relationship_data("cloud-region", "cloud-owner", self.openstack_context.owner); + data3 = self.__create_relationship_data("cloud-region", "cloud-region-id", self.openstack_context.region); + list = self.__create_relationship_data_list(data, data2, data3); + relations.append(self.__create_relationship("flavor", list)); + if self.__exists(server_info_dict['image'], 'id'): + data = self.__create_relationship_data("image", "image-id", server_info_dict['image']['id']); + data2 = self.__create_relationship_data("cloud-region", "cloud-owner", self.openstack_context.owner); + data3 = self.__create_relationship_data("cloud-region", "cloud-region-id", self.openstack_context.region); + list = self.__create_relationship_data_list(data, data2, data3); + relations.append(self.__create_relationship("image", list)); + body['relationship-list'] = self.__create_relationship_list(relations); + return put + + def __create_relationship_list(self, items): + rel_list = dict() + relationship = [] + rel_list['relationship'] = relationship; + relationship.extend(items); + return rel_list; + + def __create_relationship_data_list(self, *relationship_data): + relationship_data_list = []; + relationship_data_list.extend(relationship_data); + return relationship_data_list; + + def __create_relationship(self, related_to, relationship_data_list): + relationship = dict(); + relationship['related-to'] = related_to; + relationship['relationship-data'] = relationship_data_list + return relationship; + + def __create_relationship_data(self, parent, key, value): + relationship_data = dict(); + relationship_data['relationship-key'] = parent + "." + key; + relationship_data['relationship-value'] = value; + return relationship_data; + + def create_volume(self, volume_dict): + #setup + volume = dict() + volume['volume-id'] = volume_dict['volume']['id'] + #volume['volume-selflink'] + #volume['resource-version'] + #volume['relationship-list'] + return volume; + + def create_flavor_put(self, flavor_dict): + #setup + put = dict(); + body = dict() + put['body'] = body + + #required fields + put['uri'] = "/cloud-infrastructure/cloud-regions/cloud-region/" + self.openstack_context.owner \ + + "/" + self.openstack_context.region + "/flavors/flavor/" + flavor_dict['id'] + body['flavor-id'] = flavor_dict['id'] + body['flavor-name'] = flavor_dict['name'] + body['flavor-vcpus'] = flavor_dict['vcpus'] + body['flavor-ram'] = flavor_dict['ram'] + body['flavor-disk'] = flavor_dict['disk'] + if flavor_dict['OS-FLV-EXT-DATA:ephemeral'] != "": + body['flavor-ephemeral'] = flavor_dict['OS-FLV-EXT-DATA:ephemeral'] + if flavor_dict['swap'] != "": + body['flavor-swap'] = flavor_dict['swap'] + body['flavor-selflink'] = self.get_link(flavor_dict['links'], "self"); + #body['flavor-is-public''] + #body['flavor-disabled'] + #body['relationship-list'] + return put + + def create_image_put(self, image_dict, server_info): + #setup + put = dict(); + body = dict() + put['body'] = body + put['uri'] = "/cloud-infrastructure/cloud-regions/cloud-region/" + self.openstack_context.owner \ + + "/" + self.openstack_context.region + "/images/image/" + image_dict['id'] + body['image-id'] = image_dict['id'] + body['image-name'] = image_dict['name'] + body['image-selflink'] = self.get_link(server_info['image']['links'], "bookmark"); + if self.__exists(image_dict, 'org.openstack__1__architecture'): + body['image-architecture'] = image_dict['org.openstack__1__architecture'] + if self.__exists(image_dict, 'org.openstack__1__os_distro'): + body['image-name'] = image_dict['org.openstack__1__os_distro'] + if self.__exists(image_dict, 'org.openstack__1__os_version'): + body['image-os-version'] = image_dict['org.openstack__1__os_version'] + if self.__exists(image_dict, 'org.openstack__1__application_version'): + body['application-version'] = image_dict['org.openstack__1__application_version'] + if self.__exists(image_dict, 'org.openstack__1__application_vendor'): + body['application-vendor'] = image_dict['org.openstack__1__application_vendor'] + if self.__exists(image_dict, 'org.openstack__1__application'): + body['application'] = image_dict['org.openstack__1__application'] + if self.__exists(image_dict, 'os_distro'): + body['image-os-distro'] = image_dict['os_distro'] + #body['metadata'] + #body['relationship-list']; + return put + + def __exists(self, the_dict, key): + if key in the_dict and the_dict[key] != "": + return True; + else: + return False; + + def create_l_interface_put(self, port_dict, server_info_dict): + #setup + port = port_dict['port'] + put = dict(); + body = dict() + put['body'] = body + put['uri'] = "/cloud-infrastructure/cloud-regions/cloud-region/" + self.openstack_context.owner \ + + "/" + self.openstack_context.region + "/tenants/tenant/" + self.openstack_context.tenant \ + + "/vservers/vserver/" + port['device_id'] + "/l-interfaces/l-interface/" + port['name'] + body['interface-id'] = port['id'] + body['interface-name'] = port['name'] + body['macaddr'] = port['mac_address'] + #optional fields + v4list = [] + v6list = [] + body['l3-interface-ipv4-address-list'] = v4list + body['l3-interface-ipv6-address-list'] = v6list + for ips in port['fixed_ips']: + if '.' in ips['ip_address']: + v4list.append(self.create_l3_interface_ipv4_address(port, ips)); + if ':' in ips['ip_address']: + v6list.append(self.create_l3_interface_ipv6_address(port, ips)); + body['network-name'] = port['network_id'] + #body['selflink'] + #body['interface-role'] + #body['v6-wan-link-ip'] + #body['management-option'] + + #optional fields + return put + + def create_l3_interface_ipv4_address(self, port_dict, fixed_ip): + #setup + address = dict() + address['l3-interface-ipv4-address'] = fixed_ip['ip_address'] + address['l3-interface-ipv4-prefix-length'] = '32' + address['neutron-network-id'] = port_dict['network_id'] + address['neutron-subnet-id'] = fixed_ip['subnet_id'] + #address['vlan-id-inner'] + #address['vlan-id-outer'] + #address['is-floating'] + #address['relationship-list'] + return address; + + def create_l3_interface_ipv6_address(self, port_dict, fixed_ip): + #setup + address = dict() + address['l3-interface-ipv6-address'] = fixed_ip['ip_address'] + address['l3-interface-ipv6-prefix-length'] = '128' + address['neutron-network-id'] = port_dict['network_id'] + address['neutron-subnet-id'] = fixed_ip['subnet_id'] + #address['vlan-id-inner'] + #address['vlan-id-outer'] + #address['is-floating'] + #address['relationship-list'] + return address; + + def load_aai_data(self, request): + return True;
\ No newline at end of file |