def set(self, oid, value): """Use PySNMP to perform an SNMP SET operation on a single object. :param oid: The OID of the object to set. :param value: The value of the object to set. :raises: SNMPFailure if an SNMP request fails. """ try: snmp_gen = snmp.setCmd(self.snmp_engine, self._get_auth(write_mode=True), self._get_transport(), self._get_context(), snmp.ObjectType( snmp.ObjectIdentity(oid), value)) except snmp_error.PySnmpError as e: raise exception.SNMPFailure(operation="SET", error=e) error_indication, error_status, error_index, var_binds = next(snmp_gen) if error_indication: # SNMP engine-level error. raise exception.SNMPFailure(operation="SET", error=error_indication) if error_status: # SNMP PDU error. raise exception.SNMPFailure(operation="SET", error=error_status.prettyPrint())
def get(self, oid): """Use PySNMP to perform an SNMP GET operation on a single object. :param oid: The OID of the object to get. :raises: SNMPFailure if an SNMP request fails. :returns: The value of the requested object. """ try: snmp_gen = snmp.getCmd(self.snmp_engine, self._get_auth(), self._get_transport(), self._get_context(), snmp.ObjectType(snmp.ObjectIdentity(oid))) except snmp_error.PySnmpError as e: raise exception.SNMPFailure(operation="GET", error=e) error_indication, error_status, error_index, var_binds = next(snmp_gen) if error_indication: # SNMP engine-level error. raise exception.SNMPFailure(operation="GET", error=error_indication) if error_status: # SNMP PDU error. raise exception.SNMPFailure(operation="GET", error=error_status.prettyPrint()) # We only expect a single value back name, val = var_binds[0] return val
def set(self, oid, value): """Use PySNMP to perform an SNMP SET operation on a single object. :param oid: The OID of the object to set. :param value: The value of the object to set. :raises: SNMPFailure if an SNMP request fails. """ try: results = self.cmd_gen.setCmd(self._get_auth(), self._get_transport(), (oid, value)) except snmp_error.PySnmpError as e: raise exception.SNMPFailure(operation="SET", error=e) error_indication, error_status, error_index, var_binds = results if error_indication: # SNMP engine-level error. raise exception.SNMPFailure(operation="SET", error=error_indication) if error_status: # SNMP PDU error. raise exception.SNMPFailure(operation="SET", error=error_status.prettyPrint())
def get_next(self, oid): """Use PySNMP to perform an SNMP GET NEXT operation on a table object. :param oid: The OID of the object to get. :raises: SNMPFailure if an SNMP request fails. :returns: A list of values of the requested table object. """ try: results = self.cmd_gen.nextCmd(self._get_auth(), self._get_transport(), oid) except snmp_error.PySnmpError as e: raise exception.SNMPFailure(operation="GET_NEXT", error=e) error_indication, error_status, error_index, var_bind_table = results if error_indication: # SNMP engine-level error. raise exception.SNMPFailure(operation="GET_NEXT", error=error_indication) if error_status: # SNMP PDU error. raise exception.SNMPFailure(operation="GET_NEXT", error=error_status.prettyPrint()) return [val for row in var_bind_table for name, val in row]
def get_next(self, oid): """Use PySNMP to perform an SNMP GET NEXT operation on a table object. :param oid: The OID of the object to get. :raises: SNMPFailure if an SNMP request fails. :returns: A list of values of the requested table object. """ try: snmp_gen = snmp.nextCmd(self.snmp_engine, self._get_auth(), self._get_transport(), self._get_context(), snmp.ObjectType(snmp.ObjectIdentity(oid)), lexicographicMode=False) except snmp_error.PySnmpError as e: raise exception.SNMPFailure(operation="GET_NEXT", error=e) vals = [] for (error_indication, error_status, error_index, var_binds) in snmp_gen: if error_indication: # SNMP engine-level error. raise exception.SNMPFailure(operation="GET_NEXT", error=error_indication) if error_status: # SNMP PDU error. raise exception.SNMPFailure(operation="GET_NEXT", error=error_status.prettyPrint()) # this is not a table, but a table row # e.g. 1-D array of tuples _name, value = var_binds[0] vals.append(value) return vals
def test__inspect_hardware_exception(self, get_irmc_report_mock, scci_mock, _get_mac_addresses_mock): report = 'fake_report' get_irmc_report_mock.return_value = report side_effect = exception.SNMPFailure("fake exception") scci_mock.get_essential_properties.side_effect = side_effect irmc_inspect.scci.SCCIInvalidInputError = Exception irmc_inspect.scci.SCCIClientError = Exception with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: self.assertRaises(exception.HardwareInspectionFailure, irmc_inspect._inspect_hardware, task.node) get_irmc_report_mock.assert_called_once_with(task.node) self.assertFalse(_get_mac_addresses_mock.called)
def get(self, oid): """Use PySNMP to perform an SNMP GET operation on a single object. :param oid: The OID of the object to get. :raises: SNMPFailure if an SNMP request fails. :returns: The value of the requested object. """ results = self.cmd_gen.getCmd(self._get_auth(), self._get_transport(), oid) error_indication, error_status, error_index, var_binds = results if error_indication: # SNMP engine-level error. raise exception.SNMPFailure(operation="GET", error=error_indication) if error_status: # SNMP PDU error. raise exception.SNMPFailure(operation="GET", error=error_status.prettyPrint()) # We only expect a single value back name, val = var_binds[0] return val
def test__set_power_state_snmp_exception(self, attach_boot_iso_if_needed_mock, get_irmc_client_mock, _wait_power_state_mock): target_state = states.SOFT_REBOOT _wait_power_state_mock.side_effect = exception.SNMPFailure( "fake exception") with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: self.assertRaises(exception.IRMCOperationError, irmc_power._set_power_state, task, target_state) attach_boot_iso_if_needed_mock.assert_called_once_with(task) get_irmc_client_mock.return_value.assert_called_once_with( irmc_power.STATES_MAP[target_state]) _wait_power_state_mock.assert_called_once_with( task, states.SOFT_POWER_OFF, timeout=None)