diff --git a/ironic/drivers/snmp.py b/ironic/drivers/snmp.py new file mode 100644 index 0000000000..d5728f5876 --- /dev/null +++ b/ironic/drivers/snmp.py @@ -0,0 +1,35 @@ +# Copyright 2017 Hewlett-Packard Enterprise Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +SNMP hardware types. +""" + +from ironic.drivers import generic +from ironic.drivers.modules import fake +from ironic.drivers.modules import snmp + + +class SNMPHardware(generic.GenericHardware): + """SNMP Hardware type """ + + @property + def supported_power_interfaces(self): + """List of supported power interfaces.""" + return [snmp.SNMPPower] + + @property + def supported_management_interfaces(self): + """List of supported management interfaces.""" + return [fake.FakeManagement] diff --git a/ironic/tests/unit/drivers/test_snmp.py b/ironic/tests/unit/drivers/test_snmp.py new file mode 100644 index 0000000000..5d542fa667 --- /dev/null +++ b/ironic/tests/unit/drivers/test_snmp.py @@ -0,0 +1,43 @@ +# Copyright 2017 Red Hat, Inc. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from ironic.conductor import task_manager +from ironic.drivers.modules import fake +from ironic.drivers.modules import iscsi_deploy +from ironic.drivers.modules import noop +from ironic.drivers.modules import pxe +from ironic.drivers.modules import snmp +from ironic.tests.unit.db import base as db_base +from ironic.tests.unit.objects import utils as obj_utils + + +class SNMPHardwareTestCase(db_base.DbTestCase): + + def setUp(self): + super(SNMPHardwareTestCase, self).setUp() + self.config(enabled_hardware_types=['snmp'], + enabled_management_interfaces=['fake'], + enabled_power_interfaces=['snmp']) + + def test_default_interfaces(self): + node = obj_utils.create_test_node(self.context, driver='snmp') + with task_manager.acquire(self.context, node.id) as task: + self.assertIsInstance(task.driver.power, snmp.SNMPPower) + self.assertIsInstance(task.driver.boot, pxe.PXEBoot) + self.assertIsInstance(task.driver.deploy, iscsi_deploy.ISCSIDeploy) + self.assertIsInstance(task.driver.management, + fake.FakeManagement) + self.assertIsInstance(task.driver.console, noop.NoConsole) + self.assertIsInstance(task.driver.raid, noop.NoRAID) diff --git a/releasenotes/notes/snmp-hardware-type-ee3d471cf5c596f4.yaml b/releasenotes/notes/snmp-hardware-type-ee3d471cf5c596f4.yaml new file mode 100644 index 0000000000..7643b792f7 --- /dev/null +++ b/releasenotes/notes/snmp-hardware-type-ee3d471cf5c596f4.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + Adds a new hardware type ``snmp`` for SNMP powered systems. + It supports the following driver interfaces: + + * boot: ``pxe`` + * deploy: ``iscsi``, ``direct`` + * power: ``snmp`` + * management: ``fake`` diff --git a/setup.cfg b/setup.cfg index 4c4e7a40a0..b84fb4b7a6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -129,6 +129,7 @@ ironic.hardware.interfaces.power = irmc = ironic.drivers.modules.irmc.power:IRMCPower oneview = ironic.drivers.modules.oneview.power:OneViewPower redfish = ironic.drivers.modules.redfish.power:RedfishPower + snmp = ironic.drivers.modules.snmp:SNMPPower ironic.hardware.interfaces.raid = agent = ironic.drivers.modules.agent:AgentRAID @@ -156,6 +157,7 @@ ironic.hardware.types = manual-management = ironic.drivers.generic:ManualManagementHardware oneview = ironic.drivers.oneview:OneViewHardware redfish = ironic.drivers.redfish:RedfishHardware + snmp = ironic.drivers.snmp:SNMPHardware ironic.database.migration_backend = sqlalchemy = ironic.db.sqlalchemy.migration