autopep8
[sfa.git] / sfa / rspecs / elements / versions / ofeliav1datapath.py
1 from sfa.util.sfalogging import logger
2 from sfa.util.xml import XpathFilter
3 from sfa.util.xrn import Xrn, get_leaf
4
5 from sfa.rspecs.elements.element import Element
6 from sfa.rspecs.elements.datapath import Datapath
7 from sfa.rspecs.elements.node import NodeElement
8 from sfa.rspecs.elements.sliver import Sliver
9 from sfa.rspecs.elements.location import Location
10 from sfa.rspecs.elements.hardware_type import HardwareType
11 from sfa.rspecs.elements.disk_image import DiskImage
12 from sfa.rspecs.elements.interface import Interface
13 from sfa.rspecs.elements.bwlimit import BWlimit
14 from sfa.rspecs.elements.pltag import PLTag
15 from sfa.rspecs.elements.versions.sfav1Sliver import SFAv1Sliver
16 from sfa.rspecs.elements.versions.sfav1PLTag import SFAv1PLTag
17 from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
18 from sfa.rspecs.elements.versions.ofeliav1Port import Ofeliav1Port
19
20
21 class Ofeliav1Datapath:
22
23     @staticmethod
24     def get_datapaths(xml, filter=None):
25         if filter is None:
26             filter = {}
27         #xpath = '//datapath%s | //default:datapath%s' % (XpathFilter.xpath(filter), XpathFilter.xpath(filter))
28         xpath = '//datapath%s | //openflow:datapath%s' % (
29             XpathFilter.xpath(filter), XpathFilter.xpath(filter))
30         datapath_elems = xml.xpath(xpath)
31         return Ofeliav1Datapath.get_datapath_objs(datapath_elems)
32
33     @staticmethod
34     def get_datapath_objs(datapath_elems):
35         datapaths = []
36         for datapath_elem in datapath_elems:
37             datapath = Datapath(datapath_elem.attrib, datapath_elem)
38             # get ports
39             datapath['ports'] = Ofeliav1Port.get_ports(datapath_elem)
40             datapaths.append(datapath)
41         return datapaths
42
43 #    @staticmethod
44 #    def add_nodes(xml, nodes, rspec_content_type=None):
45 #        network_elems = xml.xpath('//network')
46 #        if len(network_elems) > 0:
47 #            network_elem = network_elems[0]
48 #        elif len(nodes) > 0 and nodes[0].get('component_manager_id'):
49 #            network_urn = nodes[0]['component_manager_id']
50 #            network_elem = xml.add_element('network', name = Xrn(network_urn).get_hrn())
51 #        else:
52 #            network_elem = xml
53 #
54 #        node_elems = []
55 #        for node in nodes:
56 #            node_fields = ['component_manager_id', 'component_id', 'boot_state']
57 #            node_elem = network_elem.add_instance('node', node, node_fields)
58 #            node_elems.append(node_elem)
59 #
60 #            # determine network hrn
61 #            network_hrn = None
62 #            if 'component_manager_id' in node and node['component_manager_id']:
63 #                network_hrn = Xrn(node['component_manager_id']).get_hrn()
64 #
65 #            # set component_name attribute and  hostname element
66 #            if 'component_id' in node and node['component_id']:
67 #                component_name = Xrn.unescape(get_leaf(Xrn(node['component_id']).get_hrn()))
68 #                node_elem.set('component_name', component_name)
69 #                hostname_elem = node_elem.add_element('hostname')
70 #                hostname_elem.set_text(component_name)
71 #
72 #            # set site id
73 #            if 'authority_id' in node and node['authority_id']:
74 #                node_elem.set('site_id', node['authority_id'])
75 #
76 #            # add locaiton
77 #            location = node.get('location')
78 #            if location:
79 #                node_elem.add_instance('location', location, Location.fields)
80 #
81 #            # add exclusive tag to distinguish between Reservable and Shared nodes
82 #            exclusive_elem = node_elem.add_element('exclusive')
83 #            if node.get('exclusive') and node.get('exclusive') == 'true':
84 #                exclusive_elem.set_text('TRUE')
85 #                # add granularity of the reservation system
86 #                granularity = node.get('granularity')
87 #                if granularity:
88 #                    node_elem.add_instance('granularity', granularity, granularity.fields)
89 #            else:
90 #                exclusive_elem.set_text('FALSE')
91 #
92 #
93 #            if isinstance(node.get('interfaces'), list):
94 #                for interface in node.get('interfaces', []):
95 #                    node_elem.add_instance('interface', interface, ['component_id', 'client_id', 'ipv4'])
96 #
97 #            #if 'bw_unallocated' in node and node['bw_unallocated']:
98 #            #    bw_unallocated = etree.SubElement(node_elem, 'bw_unallocated', units='kbps').text = str(int(node['bw_unallocated'])/1000)
99 #
100 #            PGv2Services.add_services(node_elem, node.get('services', []))
101 #            tags = node.get('tags', [])
102 #            if tags:
103 #                for tag in tags:
104 #                    # backdoor for FITeagle
105 #                    # Alexander Willner <alexander.willner@tu-berlin.de>
106 #                    if tag['tagname']=="fiteagle_settings":
107 #                        tag_elem = node_elem.add_element(tag['tagname'])
108 #                        for subtag in tag['value']:
109 #                            subtag_elem = tag_elem.add_element('setting')
110 #                            subtag_elem.set('name', str(subtag['tagname']))
111 #                            subtag_elem.set('description', str(subtag['description']))
112 #                            subtag_elem.set_text(subtag['value'])
113 #                    else:
114 #                        tag_elem = node_elem.add_element(tag['tagname'])
115 #                        tag_elem.set_text(tag['value'])
116 #            SFAv1Sliver.add_slivers(node_elem, node.get('slivers', []))
117 #
118 #            # add sliver tag in Request Rspec
119 #            if rspec_content_type == "request":
120 #                node_elem.add_instance('sliver', '', [])
121 #
122 #    @staticmethod
123 #    def add_slivers(xml, slivers):
124 #        component_ids = []
125 #        for sliver in slivers:
126 #            filter = {}
127 #            if isinstance(sliver, str):
128 #                filter['component_id'] = '*%s*' % sliver
129 #                sliver = {}
130 #            elif 'component_id' in sliver and sliver['component_id']:
131 #                filter['component_id'] = '*%s*' % sliver['component_id']
132 #            if not filter:
133 #                continue
134 #            nodes = SFAv1Node.get_nodes(xml, filter)
135 #            if not nodes:
136 #                continue
137 #            node = nodes[0]
138 #            SFAv1Sliver.add_slivers(node, sliver)
139 #
140 #    @staticmethod
141 #    def remove_slivers(xml, hostnames):
142 #        for hostname in hostnames:
143 #            nodes = SFAv1Node.get_nodes(xml, {'component_id': '*%s*' % hostname})
144 #            for node in nodes:
145 #                slivers = SFAv1Sliver.get_slivers(node.element)
146 #                for sliver in slivers:
147 #                    node.element.remove(sliver.element)
148 #
149 #    @staticmethod
150 #    def get_nodes(xml, filter={}):
151 #        xpath = '//node%s | //default:node%s' % (XpathFilter.xpath(filter), XpathFilter.xpath(filter))
152 #        node_elems = xml.xpath(xpath)
153 #        return SFAv1Node.get_node_objs(node_elems)
154 #
155 #    @staticmethod
156 #    def get_nodes_with_slivers(xml):
157 #        xpath = '//node[count(sliver)>0] | //default:node[count(default:sliver)>0]'
158 #        node_elems = xml.xpath(xpath)
159 #        return SFAv1Node.get_node_objs(node_elems)
160 #