def nas_vlan_op(op, data_dict): if op == 'get': obj = cps_object.CPSObject(nas_if.get_if_key(), data=data_dict) else: if op in intf_rpc_op_type_map: data_dict[intf_rpc_op_attr_id] = intf_rpc_op_type_map[op] obj = cps_object.CPSObject(intf_rpc_key_id, data=data_dict) op = 'rpc' nas_common.get_cb_method(op)(obj)
def nas_vlan_op(op, data_dict): if op == 'get': obj = cps_object.CPSObject(nas_if.get_if_key(), data=data_dict) else: if op in intf_rpc_op_type_map: data_dict[intf_rpc_op_attr_id] = intf_rpc_op_type_map[op] else: print 'Unknown operation type %s' % op return False obj = cps_object.CPSObject(intf_rpc_key_id, data=data_dict) op = 'rpc' nas_common.get_cb_method(op)(obj)
def set_intf_rpc_cb(methods, params): if params['operation'] != 'rpc': nas_if.log_err('Operation '+str(params['operation'])+' not supported') return False cps_obj = cps_object.CPSObject(obj = params['change']) try: if def_vlan_mode_attr_name in params['change']['data']: return _handle_global_vlan_config(cps_obj) except: pass if_type = if_config.get_intf_type(cps_obj) if if_type == 'loopback': return _handle_loopback_intf(cps_obj, params) elif if_type == 'management': return False elif if_type == 'macvlan': return _handle_macvlan_intf(cps_obj, params) op = _get_op_id(cps_obj) if op is None: return False member_port = None try: member_port = cps_obj.get_attr_data('dell-if/if/interfaces/interface/member-ports/name') except ValueError: member_port = None have_fp_attr = True front_panel_port = None try: front_panel_port = cps_obj.get_attr_data(fp_port_attr_name) except ValueError: have_fp_attr = False if_name = nas_if.get_cps_attr(cps_obj, ifname_attr_name) nas_if.log_info('Logical interface configuration: op %s if_name %s if_type %s' % ( op, if_name if if_name != None else '-', if_type)) if ((op == 'create' or (op == 'set' and have_fp_attr == True and front_panel_port is not None)) and member_port is None): if op == 'set' and if_type is None: # For set operation, if front_panel_port is given, if_type should be front-panel if_type = 'front-panel' nas_if.log_info('Interface MAC address setup for type %s' % if_type) try: mac_addr = cps_obj.get_attr_data(mac_attr_name) except ValueError: mac_addr = None if mac_addr is None: nas_if.log_info('No mac address given in input object, get assigned mac address') try: param_list = get_alloc_mac_addr_params(if_type, cps_obj) except Exception: logging.exception('Failed to get params') return False if param_list != None: try: mac_addr = ma.if_get_mac_addr(**param_list) except: logging.exception('Failed to get mac address') return False if mac_addr is None: nas_if.log_err('Failed to get mac address') return False if len(mac_addr) > 0: nas_if.log_info('Assigned mac address: %s' % mac_addr) cps_obj.add_attr(mac_attr_name, mac_addr) if op == 'set' or op == 'create': if have_fp_attr == True: subport_id = 0 try: subport_id = cps_obj.get_attr_data(subport_attr_name) except ValueError: # use default value if no attribute found in object pass if front_panel_port is None: npu_id = None port_id = None else: try: (npu_id, port_id, hw_port) = fp_utils.get_npu_port_from_fp( front_panel_port, subport_id) except ValueError as inst: nas_if.log_info(inst.args[0]) return False nas_if.log_info('Front panel port %d, NPU port %d' % (front_panel_port, port_id)) in_phy_mode = if_config.get_intf_phy_mode(cps_obj) if in_phy_mode != None: phy_mode = port_utils.hw_port_to_phy_mode(port_list, npu_id, hw_port) if in_phy_mode != phy_mode: nas_if.log_err('Input PHY mode %d mis-match with physical port mode %d' % ( in_phy_mode, phy_mode)) return False cps_obj.add_attr(npu_attr_name, npu_id) cps_obj.add_attr(port_attr_name, port_id) try: if _if_update_config(op, cps_obj) == False: params['change'] = cps_obj.get() nas_if.log_err( "Interface update config failed during set or create ") return False except Exception: nas_if.log_err( "Interface update config failed during set or create ") logging.exception('Error:') module_name = nas_if.get_if_key() in_obj = copy.deepcopy(cps_obj) in_obj.set_key(cps.key_from_name('target', module_name)) in_obj.root_path = module_name + '/' obj = in_obj.get() if op_attr_name in obj['data']: del obj['data'][op_attr_name] upd = (op, obj) trans = cps_utils.CPSTransaction([upd]) ret_data = trans.commit() if ret_data == False: nas_if.log_err('Failed to commit request') ret_data = trans.get_objects() if len(ret_data) > 0 and 'change' in ret_data[0]: ret_obj = cps_object.CPSObject(obj = ret_data[0]['change']) try: ret_code = ret_obj.get_attr_data(retcode_attr_name) ret_str = ret_obj.get_attr_data(retstr_attr_name) except ValueError: nas_if.log_info('Return code and string not found from returned object') return False cps_obj.add_attr(retcode_attr_name, ret_code) cps_obj.add_attr(retstr_attr_name, ret_str) params['change'] = cps_obj.get() return False if op == 'delete': try: _if_update_config(op, in_obj) except: nas_if.log_err('update config failed for delete operation') logging.exception('Error:') return True if len(ret_data) == 0 or not 'change' in ret_data[0]: nas_if.log_err('Invalid return object from cps request') return False if (op == 'create' and member_port is None): ret_obj = cps_object.CPSObject(obj = ret_data[0]['change']) try: ifindex = ret_obj.get_attr_data(ifindex_attr_name) except ValueError: nas_if.log_err('Ifindex not found from returned object') return False cps_obj.add_attr(ifindex_attr_name, ifindex) params['change'] = cps_obj.get() return True
def set_intf_cb(methods, params): if params['operation'] != 'rpc': nas_if.log_err('Operation ' + str(params['operation']) + ' not supported') return False cps_obj = cps_object.CPSObject(obj=params['change']) if_type = _get_intf_type(cps_obj) if if_type == 'loopback': return _handle_loopback_intf(cps_obj, params) elif if_type == 'management': return False op = _get_op_id(cps_obj) if op == None: return False member_port = None try: member_port = cps_obj.get_attr_data( 'dell-if/if/interfaces/interface/member-ports/name') except ValueError: member_port = None if (op == 'create' and member_port == None): nas_if.log_info('Create interface, type: %s' % if_type) mac_addr = None try: mac_addr = cps_obj.get_attr_data(mac_attr_name) except ValueError: pass if mac_addr == None: nas_if.log_info( 'No mac address given in input object, get assigned mac address' ) param_list = get_alloc_mac_addr_params(if_type, cps_obj) if param_list != None: mac_addr = ma.if_get_mac_addr(**param_list) if mac_addr == None: nas_if.log_err('Failed to get mac address') return False if len(mac_addr) > 0: nas_if.log_info('Assigned mac address: %s' % mac_addr) cps_obj.add_attr(mac_attr_name, mac_addr) if op == 'set' or op == 'create': try: _if_update_config(op, cps_obj) except: nas_if.log_err("update config failed during set or create ") pass module_name = nas_if.get_if_key() in_obj = copy.deepcopy(cps_obj) in_obj.set_key(cps.key_from_name('target', module_name)) in_obj.root_path = module_name + '/' obj = in_obj.get() if op_attr_name in obj['data']: del obj['data'][op_attr_name] upd = (op, obj) ret_data = cps_utils.CPSTransaction([upd]).commit() if ret_data == False: nas_if.log_err('Failed to commit request') return False if op == 'delete': try: _if_update_config(op, in_obj) except: nas_if.log_err('update config failed for delete operation') pass return True if len(ret_data) == 0 or not 'change' in ret_data[0]: nas_if.log_err('Invalid return object from cps request') return False if (op == 'create' and member_port == None): ret_obj = cps_object.CPSObject(obj=ret_data[0]['change']) try: ifindex = ret_obj.get_attr_data(ifindex_attr_name) except ValueError: nas_if.log_err('Ifindex not found from returned object') return False cps_obj.add_attr(ifindex_attr_name, ifindex) params['change'] = cps_obj.get() return True
def nas_vlan_op(op, data_dict): obj = cps_object.CPSObject(nas_if.get_if_key(), data=data_dict) nas_ut.get_cb_method(op)(obj)
def nas_vlan_op(op, data_dict): obj = cps_object.CPSObject( nas_if.get_if_key(), data=data_dict) nas_ut.get_cb_method(op)(obj)
def set_intf_cb(methods, params): op_id_to_name_map = {1: 'create', 2: 'delete', 3: 'set'} if params['operation'] != 'rpc': print 'Operation %s not supported' % params['operation'] return False op_attr_name = 'dell-base-if-cmn/set-interface/input/operation' cps_obj = cps_object.CPSObject(obj=params['change']) try: op_id = cps_obj.get_attr_data(op_attr_name) except ValueError: print 'No operation attribute in object' return False if not op_id in op_id_to_name_map: print 'Invalid operation type %d' % op_id return False op = op_id_to_name_map[op_id] if op == 'create': if_type_map = { 'ianaift:ethernetCsmacd': 'front-panel', 'ianaift:l2vlan': 'vlan', 'ianaift:ieee8023adLag': 'lag', 'base-if:management': 'management' } try: obj_if_type = cps_obj.get_attr_data('if/interfaces/interface/type') except: print 'No type attribute in object' return False if not obj_if_type in if_type_map: print 'Unknown if type: %s' % obj_if_type return False if_type = if_type_map[obj_if_type] print 'Create interface, type: %s' % if_type hw_port = None vlan_id = None lag_id = None npu_id = None if if_type == 'front-panel': id_tuple = get_npu_hwport_id_from_fp_obj(cps_obj) if id_tuple == None: return False (npu_id, hw_port) = id_tuple elif if_type == 'vlan': vlan_id = cps_obj.get_attr_data( 'base-if-vlan/if/interfaces/interface/id') elif if_type == 'lag': lag_name = cps_obj.get_attr_data('if/interfaces/interface/name') lag_id = get_lag_id_from_name(lag_name) elif if_type == 'management': pass mac_attr_name = 'dell-if/if/interfaces/interface/phys-address' mac_addr = None try: mac_addr = cps_obj.get_attr_data(mac_attr_name) except ValueError: pass if mac_addr == None: mac_addr = if_get_mac_addr(if_type, npu_id=npu_id, hw_port=hw_port, vlan_id=vlan_id, lag_id=lag_id) if mac_addr == None: print 'Failed to get mac address' return False print 'Assigned mac address: %s' % mac_addr cps_obj.add_attr(mac_attr_name, mac_addr) module_name = nas_if.get_if_key() in_obj = copy.deepcopy(cps_obj) in_obj.set_key(cps.key_from_name('target', module_name)) in_obj.root_path = module_name + '/' obj = in_obj.get() if op_attr_name in obj['data']: del obj['data'][op_attr_name] upd = (op, obj) ret_data = cps_utils.CPSTransaction([upd]).commit() if ret_data == False: print 'Failed to commit request' return False if op == 'delete': return True if len(ret_data) == 0 or not 'change' in ret_data[0]: print 'Invalid return object from cps request' return False ret_obj = cps_object.CPSObject(obj=ret_data[0]['change']) try: ifindex = ret_obj.get_attr_data(ifindex_attr_name) except ValueError: print 'Ifindex not found from returned object' return False try: mac_addr = cps_obj.get_attr_data(mac_attr_name) except ValueError: print 'MAC address not found from returned object' return False cps_obj = cps_object.CPSObject(obj=params['change']) cps_obj.add_attr(ifindex_attr_name, ifindex) cps_obj.add_attr(mac_attr_name, mac_addr) params['change'] = cps_obj.get() return True