def _delete_node_conversion(self, network_id, node): logging.debug(">> %s", stack()[0][3]) resp_list = {} if network_id is None or node is None: return resp_list dst_nodes = self._conversion_table.get_node(network_id, node.node_id) for dst_node in dst_nodes: node_id = dst_node.split("::") if node_id[0] not in self._network_interfaces: continue network_if = self._network_interfaces[node_id[0]] resp = network_if.del_node(node_id[1]) resp_node = None if resp.body is not None: try: resp_node = Node.create_from_packed(resp.body) except KeyError, err: logging.error("DELETE Node Invalid Response Message" + " KeyError: " + str(err)) return None resp_list[dst_node] = resp_node
def test_create_from_packed(self): packed = self.target.packed_object() result = Node.create_from_packed(packed) self.assertEqual(result.type, 'Node') self.assertEqual(result.version, '1') self.assertEqual(result.node_id, 'NodeId') self.assertEqual(len(result.ports), 1) self.assertEqual(result.ports['PortId'].port_id, 'PortId') self.assertEqual(result.attributes['NodeKey'], 'NodeVal')
def create_from_packed(cls, packed): action = packed[cls.ACTION] version = "" prev = None curr = None if action == cls.Action.ADD: version = packed[cls.VERSION] curr = Node.create_from_packed(packed[cls.CURR]) elif action == cls.Action.DELETE: prev = Node.create_from_packed(packed[cls.PREV]) elif action == cls.Action.UPDATE: version = packed[cls.VERSION] prev = Node.create_from_packed(packed[cls.PREV]) curr = Node.create_from_packed(packed[cls.CURR]) return cls(packed[cls.ID], action, version, prev, curr)
def _update_node_conversion(self, network_id, node_prev, node_curr, attributes): logging.debug(">> %s", stack()[0][3]) resp_list = {} if network_id is None or node_curr is None: return resp_list attributes_list = [] if attributes is None: attributes_list = [] else: attributes_list = attributes # get ignore list node_ignore_attributes = self.__get_ignore_keys(self.attributes_node, attributes_list) for dst_node in self._conversion_table.get_node(network_id, node_curr.node_id): node_id = dst_node.split("::") if node_id[0] not in self._network_interfaces: continue network_if = self._network_interfaces[node_id[0]] # get node node = network_if.get_node(node_id[1]) if node is None: continue # attr copy (curr -> body) updated = False curr_attr = node_curr.attributes for attr_key in curr_attr: if (attr_key in node_ignore_attributes or (attr_key in node.attributes and node.attributes[attr_key] == curr_attr[attr_key])): continue updated = True node.attributes[attr_key] = \ node_curr.attributes[attr_key] # put node if updated: resp = network_if.put_node(node) try: resp_node = Node.create_from_packed(resp.body) resp_list[dst_node] = resp_node except KeyError, err: logging.error("PUT Node Invalid Response Message" + " KeyError: " + str(err))
def create_from_packed(cls, packed): version = None if cls.VERSION in packed: version = packed[cls.VERSION] nodes = {} for node_id, node in packed[cls.NODES].items(): nodes[node_id] = Node.create_from_packed(node) links = {} for link_id, link in packed[cls.LINKS].items(): links[link_id] = Link.create_from_packed(link) return cls(packed[cls.TYPE], version, nodes, links)
def get_nodes(self): logging.debug("GET Nodes NetworkID:" + self.network_id) resp = self._get_object_to_remote_object(self.NODES_PATH) if resp.is_error(Request.Method.GET): return None nodes = {} try: for node_id, node in resp.body.items(): nodes[node_id] = Node.create_from_packed(node) except KeyError, err: logging.error("GET Nodes Invalid Response Message" + " KeyError: " + str(err)) return None
def get_nodes(self): logging.debug("GET Nodes NetworkID:" + self.network_id) resp = self._get_object_to_remote_object(self.NODES_PATH) if resp.is_error(Request.Method.GET): return None nodes = {} try: for node_id, node in resp.body.items(): nodes[node_id] = Node.create_from_packed(node) except KeyError, err: logging.error("GET Nodes Invalid Response Message" + " KeyError: " + str(err)) return None
def get_physical_node(self, physical_id): logging.debug("GET PhysicalNode NetworkID:" + self.network_id + " PhysicalID:" + physical_id) path = self.PHYSICAL_NODES_PATH % physical_id resp = self._get_object_to_remote_object(path) if resp.is_error(Request.Method.GET): return None node = None try: node = Node.create_from_packed(resp.body) except KeyError, err: logging.error("GET PhysicalNode Invalid Response Message" + " KeyError: " + str(err)) return None
def get_physical_node(self, physical_id): logging.debug("GET PhysicalNode NetworkID:" + self.network_id + " PhysicalID:" + physical_id) path = self.PHYSICAL_NODES_PATH % physical_id resp = self._get_object_to_remote_object(path) if resp.is_error(Request.Method.GET): return None node = None try: node = Node.create_from_packed(resp.body) except KeyError, err: logging.error("GET PhysicalNode Invalid Response Message" + " KeyError: " + str(err)) return None
def create_from_packed(cls, packed): version = None if cls.VERSION in packed: version = packed[cls.VERSION] nodes = {} for node_id, node in packed[cls.NODES].items(): nodes[node_id] = Node.create_from_packed(node) links = {} for link_id, link in packed[cls.LINKS].items(): links[link_id] = Link.create_from_packed(link) return cls(packed[cls.TYPE], version, nodes, links)
def test_create_from_packed_without_version(self): packed = {'type': 'Node', 'node_id': 'NodeId', 'attributes': {'NodeKey': 'NodeVal'}, 'ports': {'PortId': {'type': 'Port', 'version': '1', 'port_id': 'PortId', 'node_id': 'NodeId', 'out_link': 'OutLink', 'in_link': 'InLink', 'attributes': {'PortKey': 'PortVal'}}}} result = Node.create_from_packed(packed) self.assertEqual(result.type, 'Node') self.assertEqual(result.version, None) self.assertEqual(result.node_id, 'NodeId') self.assertEqual(len(result.ports), 1) self.assertEqual(result.ports['PortId'].port_id, 'PortId') self.assertEqual(result.attributes['NodeKey'], 'NodeVal')
def _add_node_conversion(self, network_id, node): logging.debug(">> %s", stack()[0][3]) resp_list = {} for nw_id in self._conversion_table.get_network(network_id): if nw_id not in self._network_interfaces: continue network_if = self._network_interfaces[nw_id] resp = network_if.put_node(node) resp_list[nw_id] = resp try: resp_node = Node.create_from_packed(resp.body) self._conversion_table.add_entry_node(network_id, node.node_id, nw_id, resp_node.node_id) except KeyError, err: logging.error("PUT Node Invalid Response Message" + " KeyError: " + str(err))