diff options
author | Julien Danjou <julien@danjou.info> | 2018-05-02 16:51:57 +0200 |
---|---|---|
committer | Julien Danjou <julien@danjou.info> | 2018-05-04 13:33:18 +0000 |
commit | 51d4ea0a1544db06159a8d8037131428a42cc651 (patch) | |
tree | 762fd4ef90bd5523fee6d88665da75ad3568cdf1 | |
parent | a6bed1fd49a60fe3a5b39df424f7966d8c0fb461 (diff) | |
download | ceilometer-51d4ea0a1544db06159a8d8037131428a42cc651.tar.gz |
snmp: ignore rfc1905.NoSuchInstance result9.0.6
If the SNMP polling return such a value, it should be ignored.
Change-Id: I275f43f8800d9477fedd100db68b48c93e7ad75d
(cherry picked from commit 93eca81e588465da9900202b32bdcd8ddad0d866)
-rw-r--r-- | ceilometer/hardware/inspector/snmp.py | 2 | ||||
-rw-r--r-- | ceilometer/tests/unit/hardware/inspector/test_snmp.py | 34 |
2 files changed, 30 insertions, 6 deletions
diff --git a/ceilometer/hardware/inspector/snmp.py b/ceilometer/hardware/inspector/snmp.py index b5264a4f..cf098f22 100644 --- a/ceilometer/hardware/inspector/snmp.py +++ b/ceilometer/hardware/inspector/snmp.py @@ -195,7 +195,7 @@ class SNMPInspector(base.Inspector): def get_oid_value(oid_cache, oid_def, suffix='', host=None): oid, converter = oid_def value = oid_cache[oid + suffix] - if isinstance(value, rfc1905.NoSuchObject): + if isinstance(value, (rfc1905.NoSuchObject, rfc1905.NoSuchInstance)): LOG.debug("OID %s%s has no value" % ( oid, " on %s" % host.hostname if host else "")) return None diff --git a/ceilometer/tests/unit/hardware/inspector/test_snmp.py b/ceilometer/tests/unit/hardware/inspector/test_snmp.py index fa4d969f..53319c6e 100644 --- a/ceilometer/tests/unit/hardware/inspector/test_snmp.py +++ b/ceilometer/tests/unit/hardware/inspector/test_snmp.py @@ -17,7 +17,8 @@ import fixtures import mock from oslo_utils import netutils -from pysnmp.proto.rfc1905 import noSuchObject +from pysnmp.proto import rfc1905 +import six from ceilometer.hardware.inspector import snmp from ceilometer.tests import base as test_base @@ -35,14 +36,18 @@ class FakeObjectName(object): class FakeCommandGenerator(object): def getCmd(self, authData, transportTarget, *oids, **kwargs): - emptyOID = '1.3.6.1.4.1.2021.4.14.0' + emptyOIDs = { + '1.3.6.1.4.1.2021.4.14.0': rfc1905.noSuchObject, + '1.3.6.1.4.1.2021.4.14.1': rfc1905.noSuchInstance, + } varBinds = [ (FakeObjectName(oid), int(oid.split('.')[-1])) for oid in oids - if oid != emptyOID + if oid not in emptyOIDs ] - if emptyOID in oids: - varBinds += [(FakeObjectName(emptyOID), noSuchObject)] + for emptyOID, exc in six.iteritems(emptyOIDs): + if emptyOID in oids: + varBinds += [(FakeObjectName(emptyOID), exc)] return (None, None, 0, varBinds) def bulkCmd(authData, transportTarget, nonRepeaters, maxRepetitions, @@ -78,6 +83,13 @@ class TestSNMPInspector(test_base.BaseTestCase): 'metadata': {}, 'post_op': None, }, + 'test_nosuch_instance': { + 'matching_type': snmp.EXACT, + 'metric_oid': ('1.3.6.1.4.1.2021.4.14.1', int), + 'metadata': {}, + 'post_op': None, + }, + } def setUp(self): @@ -124,6 +136,18 @@ class TestSNMPInspector(test_base.BaseTestCase): except ValueError: self.fail("got ValueError when interpreting NoSuchObject return") + def test_inspect_no_such_instance(self): + cache = {} + try: + # inspect_generic() is a generator, so we explicitly need to + # iterate through it in order to trigger the exception. + list(self.inspector.inspect_generic(self.host, + cache, + {}, + self.mapping['test_nosuch'])) + except ValueError: + self.fail("got ValueError when interpreting NoSuchInstance return") + def test_inspect_generic_exact(self): self.inspector._fake_post_op = self._fake_post_op cache = {} |