From ba0a7828f9056f71a84dc910b58999d4157c1aeb Mon Sep 17 00:00:00 2001 From: Ilya Etingof Date: Tue, 26 Jun 2018 13:28:18 +0200 Subject: [PATCH] Add BayTech MRP27 snmp driver type Change-Id: I07feec6d1ddeffeb4d2abbe2081f3ca824f169e1 --- doc/source/admin/drivers/snmp.rst | 1 + ironic/drivers/modules/snmp.py | 18 +++++++++++- .../tests/unit/drivers/modules/test_snmp.py | 28 +++++++++++++++++++ ...r-type-baytech-mrp27-5007d1d7e0a52162.yaml | 5 ++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/add-snmp-pdu-driver-type-baytech-mrp27-5007d1d7e0a52162.yaml diff --git a/doc/source/admin/drivers/snmp.rst b/doc/source/admin/drivers/snmp.rst index 92a730f406..a57e29dd74 100644 --- a/doc/source/admin/drivers/snmp.rst +++ b/doc/source/admin/drivers/snmp.rst @@ -53,6 +53,7 @@ Aten all? Yes aten CyberPower all? Untested cyberpower EatonPower all? Untested eatonpower Teltronix all? Yes teltronix +BayTech MRP27 Yes baytech_mrp27 ============== ========== ========== ===================== diff --git a/ironic/drivers/modules/snmp.py b/ironic/drivers/modules/snmp.py index 8708aeafce..f66e2ea175 100644 --- a/ironic/drivers/modules/snmp.py +++ b/ironic/drivers/modules/snmp.py @@ -695,6 +695,21 @@ class SNMPDriverEatonPower(SNMPDriverBase): self.client.set(oid, value) +class SNMPDriverBaytechMRP27(SNMPDriverSimple): + """SNMP driver class for Baytech MRP27 PDU devices. + + SNMP objects for Baytech MRP27 PDU: + 4779, 1, 3, 5, 3, 1, 3, {unit_id} Outlet Power + Values: 0=Off, 1=On, 2=Reboot + """ + + # TODO(srobert): Add support for dynamically allocated unit_id when needed + unit_id = 1 + oid_device = (4779, 1, 3, 5, 3, 1, 3) + (unit_id,) + value_power_off = 0 + value_power_on = 1 + + class SNMPDriverAuto(SNMPDriverBase): SYS_OBJ_OID = (1, 3, 6, 1, 2, 1, 1, 2) @@ -765,7 +780,8 @@ DRIVER_CLASSES = { 'cyberpower': SNMPDriverCyberPower, 'eatonpower': SNMPDriverEatonPower, 'teltronix': SNMPDriverTeltronix, - 'auto': SNMPDriverAuto + 'baytech_mrp27': SNMPDriverBaytechMRP27, + 'auto': SNMPDriverAuto, } diff --git a/ironic/tests/unit/drivers/modules/test_snmp.py b/ironic/tests/unit/drivers/modules/test_snmp.py index e31f2e15ee..eb500927ec 100644 --- a/ironic/tests/unit/drivers/modules/test_snmp.py +++ b/ironic/tests/unit/drivers/modules/test_snmp.py @@ -1496,6 +1496,34 @@ class SNMPDeviceDriverTestCase(db_base.DbTestCase): mock_client.get.assert_has_calls(calls) self.assertEqual(states.POWER_ON, pstate) + def test_baytech_mrp27_power_snmp_objects(self, mock_get_client): + # Ensure the correct SNMP object OIDs and values are used by the + # Baytech MRP 27 Power driver + self._update_driver_info(snmp_driver="baytech_mrp27", snmp_outlet="3") + driver = snmp._get_driver(self.node) + + oid = (1, 3, 6, 1, 4, 1, 4779, 1, 3, 5, 3, 1, 3, 1, 3) + self.assertEqual(oid, driver._snmp_oid()) + self.assertEqual(1, driver.value_power_on) + self.assertEqual(0, driver.value_power_off) + + def test_baytech_mrp27_power_state_on(self, mock_get_client): + self._test_simple_device_power_state_on('baytech_mrp27', + mock_get_client) + + def test_baytech_mrp27_power_state_off(self, mock_get_client): + self._test_simple_device_power_state_off('baytech_mrp27', + mock_get_client) + + def test_baytech_mrp27_power_on(self, mock_get_client): + self._test_simple_device_power_on('baytech_mrp27', mock_get_client) + + def test_baytech_mrp27_power_off(self, mock_get_client): + self._test_simple_device_power_off('baytech_mrp27', mock_get_client) + + def test_baytech_mrp27_power_reset(self, mock_get_client): + self._test_simple_device_power_reset('baytech_mrp27', mock_get_client) + @mock.patch.object(snmp, '_get_driver', autospec=True) class SNMPDriverTestCase(db_base.DbTestCase): diff --git a/releasenotes/notes/add-snmp-pdu-driver-type-baytech-mrp27-5007d1d7e0a52162.yaml b/releasenotes/notes/add-snmp-pdu-driver-type-baytech-mrp27-5007d1d7e0a52162.yaml new file mode 100644 index 0000000000..bc14534336 --- /dev/null +++ b/releasenotes/notes/add-snmp-pdu-driver-type-baytech-mrp27-5007d1d7e0a52162.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Adds new Power Distribution Unit (PDU) ``snmp`` driver type - BayTech + MRP27.