def test_update_switch(self): switch.update_switch(1, user=self.user_object, vendor='test_update') update_switch = switch.get_switch( 1, user=self.user_object, ) expected = 'test_update' self.assertEqual(expected, update_switch['vendor'])
def poll_switch(poller_email, ip_addr, credentials, req_obj='mac', oper="SCAN"): """Query switch and update switch machines. .. note:: When polling switch succeeds, for each mac it got from polling switch, A Machine record associated with the switch is added to the database. :param ip_addr: switch ip address. :type ip_addr: str :param credentials: switch crednetials. :type credentials: dict :param req_obj: the object requested to query from switch. :type req_obj: str :param oper: the operation to query the switch. :type oper: str, should be one of ['SCAN', 'GET', 'SET'] .. note:: The function should be called out of database session scope. """ poller = user_api.get_user_object(poller_email) ip_int = long(netaddr.IPAddress(ip_addr)) with util.lock('poll switch %s' % ip_addr, timeout=120) as lock: if not lock: raise Exception('failed to acquire lock to poll switch %s' % ip_addr) # TODO(grace): before repoll the switch, set the state to repolling. # and when the poll switch is timeout, set the state to error. # the frontend should only consider some main state like INTIALIZED, # ERROR and SUCCESSFUL, REPOLLING is as an intermediate state to # indicate the switch is in learning the mac of the machines connected # to it. logging.debug('poll switch: %s', ip_addr) switch_dict, machine_dicts = _poll_switch(ip_addr, credentials, req_obj=req_obj, oper=oper) switches = switch_api.list_switches(ip_int=ip_int, user=poller) if not switches: logging.error('no switch found for %s', ip_addr) return for switch in switches: for machine_dict in machine_dicts: logging.info('add machine: %s', machine_dict) machine_dict['owner_id'] = poller.id switch_api.add_switch_machine(switch['id'], False, user=poller, **machine_dict) switch_api.update_switch(switch['id'], user=poller, **switch_dict)
def poll_switch(poller_email, ip_addr, credentials, req_obj='mac', oper="SCAN"): """Query switch and update switch machines. .. note:: When polling switch succeeds, for each mac it got from polling switch, A Machine record associated with the switch is added to the database. :param ip_addr: switch ip address. :type ip_addr: str :param credentials: switch crednetials. :type credentials: dict :param req_obj: the object requested to query from switch. :type req_obj: str :param oper: the operation to query the switch. :type oper: str, should be one of ['SCAN', 'GET', 'SET'] .. note:: The function should be called out of database session scope. """ poller = user_api.get_user_object(poller_email) ip_int = long(netaddr.IPAddress(ip_addr)) with util.lock('poll switch %s' % ip_addr, timeout=120) as lock: if not lock: raise Exception( 'failed to acquire lock to poll switch %s' % ip_addr ) # TODO(grace): before repoll the switch, set the state to repolling. # and when the poll switch is timeout, set the state to error. # the frontend should only consider some main state like INTIALIZED, # ERROR and SUCCESSFUL, REPOLLING is as an intermediate state to # indicate the switch is in learning the mac of the machines connected # to it. logging.debug('poll switch: %s', ip_addr) switch_dict, machine_dicts = _poll_switch( ip_addr, credentials, req_obj=req_obj, oper=oper ) switches = switch_api.list_switches(ip_int=ip_int, user=poller) if not switches: logging.error('no switch found for %s', ip_addr) return for switch in switches: for machine_dict in machine_dicts: logging.debug('add machine: %s', machine_dict) switch_api.add_switch_machine( switch['id'], False, user=poller, **machine_dict ) switch_api.update_switch( switch['id'], user=poller, **switch_dict )
def test_update_switch(self): switch.update_switch( 1, user=self.user_object, vendor='test_update' ) update_switch = switch.get_switch( 1, user=self.user_object, ) expected = 'test_update' self.assertEqual(expected, update_switch['vendor'])
def poll_switch(poller_email, ip_addr, credentials, req_obj='mac', oper="SCAN"): """Query switch and update switch machines. .. note:: When polling switch succeeds, for each mac it got from polling switch, A Machine record associated with the switch is added to the database. :param ip_addr: switch ip address. :type ip_addr: str :param credentials: switch crednetials. :type credentials: dict :param req_obj: the object requested to query from switch. :type req_obj: str :param oper: the operation to query the switch. :type oper: str, should be one of ['SCAN', 'GET', 'SET'] .. note:: The function should be called out of database session scope. """ poller = user_api.get_user_object(poller_email) ip_int = long(netaddr.IPAddress(ip_addr)) with util.lock('poll switch %s' % ip_addr, timeout=120) as lock: if not lock: raise Exception( 'failed to acquire lock to poll switch %s' % ip_addr ) logging.debug('poll switch: %s', ip_addr) switch_dict, machine_dicts = _poll_switch( ip_addr, credentials, req_obj=req_obj, oper=oper ) switches = switch_api.list_switches(ip_int=ip_int, user=poller) if not switches: logging.error('no switch found for %s', ip_addr) return for switch in switches: for machine_dict in machine_dicts: logging.debug('add machine: %s', machine_dict) switch_api.add_switch_machine( switch['id'], False, user=poller, **machine_dict ) switch_api.update_switch( switch['id'], user=poller, **switch_dict )
def update_switch(switch_id): """update switch.""" data = _get_request_data() return utils.make_json_response( 200, switch_api.update_switch(current_user, switch_id, **data) )