From 8bdb89320994a051f47c56b502bd5233ca77467f Mon Sep 17 00:00:00 2001 From: Ilya Shakhat Date: Tue, 5 Sep 2017 11:06:38 +0200 Subject: [PATCH] Group drivers modules by type Change-Id: Id5fab5efa5dfbe155e559256faf465b7d0b76706 --- os_faults/api/human.py | 4 ++-- os_faults/api/node_collection.py | 2 +- os_faults/api/service.py | 2 +- os_faults/api/{util.py => utils.py} | 13 +++++++++--- .../{common => drivers/cloud}/__init__.py | 0 os_faults/drivers/{ => cloud}/devstack.py | 2 +- .../drivers/{ => cloud}/devstack_systemd.py | 2 +- os_faults/drivers/{ => cloud}/fuel.py | 2 +- os_faults/drivers/{ => cloud}/tcpcloud.py | 2 +- os_faults/drivers/nodes/__init__.py | 0 os_faults/drivers/{ => nodes}/node_list.py | 0 os_faults/drivers/power/__init__.py | 0 os_faults/drivers/{ => power}/ipmi.py | 0 .../{libvirt_driver.py => power/libvirt.py} | 9 +++++---- os_faults/{common => drivers}/service.py | 0 .../tests/unit/drivers/cloud/__init__.py | 0 .../unit/drivers/{ => cloud}/test_devstack.py | 2 +- .../{ => cloud}/test_devstack_systemd.py | 4 ++-- .../{ => cloud}/test_fuel_management.py | 2 +- .../{ => cloud}/test_fuel_node_collection.py | 2 +- .../drivers/{ => cloud}/test_fuel_service.py | 2 +- .../unit/drivers/{ => cloud}/test_tcpcloud.py | 2 +- .../tests/unit/drivers/nodes/__init__.py | 0 .../drivers/{ => nodes}/test_node_list.py | 2 +- .../tests/unit/drivers/power/__init__.py | 0 .../unit/drivers/{ => power}/test_ipmi.py | 4 ++-- .../test_libvirt.py} | 6 +++--- os_faults/tests/unit/test_os_faults.py | 20 +++++++++---------- 28 files changed, 46 insertions(+), 38 deletions(-) rename os_faults/api/{util.py => utils.py} (72%) rename os_faults/{common => drivers/cloud}/__init__.py (100%) rename os_faults/drivers/{ => cloud}/devstack.py (99%) rename os_faults/drivers/{ => cloud}/devstack_systemd.py (98%) rename os_faults/drivers/{ => cloud}/fuel.py (99%) rename os_faults/drivers/{ => cloud}/tcpcloud.py (99%) create mode 100644 os_faults/drivers/nodes/__init__.py rename os_faults/drivers/{ => nodes}/node_list.py (100%) create mode 100644 os_faults/drivers/power/__init__.py rename os_faults/drivers/{ => power}/ipmi.py (100%) rename os_faults/drivers/{libvirt_driver.py => power/libvirt.py} (95%) rename os_faults/{common => drivers}/service.py (100%) create mode 100644 os_faults/tests/unit/drivers/cloud/__init__.py rename os_faults/tests/unit/drivers/{ => cloud}/test_devstack.py (99%) rename os_faults/tests/unit/drivers/{ => cloud}/test_devstack_systemd.py (97%) rename os_faults/tests/unit/drivers/{ => cloud}/test_fuel_management.py (99%) rename os_faults/tests/unit/drivers/{ => cloud}/test_fuel_node_collection.py (98%) rename os_faults/tests/unit/drivers/{ => cloud}/test_fuel_service.py (99%) rename os_faults/tests/unit/drivers/{ => cloud}/test_tcpcloud.py (99%) create mode 100644 os_faults/tests/unit/drivers/nodes/__init__.py rename os_faults/tests/unit/drivers/{ => nodes}/test_node_list.py (96%) create mode 100644 os_faults/tests/unit/drivers/power/__init__.py rename os_faults/tests/unit/drivers/{ => power}/test_ipmi.py (97%) rename os_faults/tests/unit/drivers/{test_libvirt_driver.py => power/test_libvirt.py} (97%) diff --git a/os_faults/api/human.py b/os_faults/api/human.py index 0ea35c8..d6ca6b0 100644 --- a/os_faults/api/human.py +++ b/os_faults/api/human.py @@ -16,6 +16,7 @@ import re from os_faults.api import error from os_faults.api import node_collection as node_collection_pkg from os_faults.api import service as service_pkg +from os_faults.api import utils """ Human API understands commands like these (examples): @@ -42,8 +43,7 @@ Human API understands commands like these (examples): def list_actions(klazz): return set(m[0].replace('_', ' ') for m in inspect.getmembers( klazz, - predicate=lambda o: ((inspect.isfunction(o) or inspect.ismethod(o)) and - hasattr(o, '__public__')))) + predicate=utils.is_public)) RANDOMNESS = {'one', 'random', 'some', 'single'} ANYTHING = {'all'} diff --git a/os_faults/api/node_collection.py b/os_faults/api/node_collection.py index 116d021..6d12fcf 100644 --- a/os_faults/api/node_collection.py +++ b/os_faults/api/node_collection.py @@ -16,7 +16,7 @@ import random import warnings from os_faults.api import error -from os_faults.api.util import public +from os_faults.api.utils import public from os_faults import utils LOG = logging.getLogger(__name__) diff --git a/os_faults/api/service.py b/os_faults/api/service.py index 09d11d4..610902e 100644 --- a/os_faults/api/service.py +++ b/os_faults/api/service.py @@ -16,7 +16,7 @@ import abc import six from os_faults.api import base_driver -from os_faults.api.util import public +from os_faults.api.utils import public @six.add_metaclass(abc.ABCMeta) diff --git a/os_faults/api/util.py b/os_faults/api/utils.py similarity index 72% rename from os_faults/api/util.py rename to os_faults/api/utils.py index 5b0f5db..ca47f36 100644 --- a/os_faults/api/util.py +++ b/os_faults/api/utils.py @@ -11,7 +11,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +import inspect -def public(funcobj): - funcobj.__public__ = True - return funcobj + +def public(func): + func.__public__ = True + return func + + +def is_public(obj): + return ((inspect.isfunction(obj) or inspect.ismethod(obj)) + and hasattr(obj, '__public__')) diff --git a/os_faults/common/__init__.py b/os_faults/drivers/cloud/__init__.py similarity index 100% rename from os_faults/common/__init__.py rename to os_faults/drivers/cloud/__init__.py diff --git a/os_faults/drivers/devstack.py b/os_faults/drivers/cloud/devstack.py similarity index 99% rename from os_faults/drivers/devstack.py rename to os_faults/drivers/cloud/devstack.py index bb97a92..c2f1b51 100644 --- a/os_faults/drivers/devstack.py +++ b/os_faults/drivers/cloud/devstack.py @@ -17,7 +17,7 @@ from os_faults.ansible import executor from os_faults.api import cloud_management from os_faults.api import node_collection from os_faults.api import node_discover -from os_faults.common import service +from os_faults.drivers import service LOG = logging.getLogger(__name__) diff --git a/os_faults/drivers/devstack_systemd.py b/os_faults/drivers/cloud/devstack_systemd.py similarity index 98% rename from os_faults/drivers/devstack_systemd.py rename to os_faults/drivers/cloud/devstack_systemd.py index 6319d97..3b4391a 100644 --- a/os_faults/drivers/devstack_systemd.py +++ b/os_faults/drivers/cloud/devstack_systemd.py @@ -13,7 +13,7 @@ import logging -from os_faults.drivers import devstack +from os_faults.drivers.cloud import devstack LOG = logging.getLogger(__name__) diff --git a/os_faults/drivers/fuel.py b/os_faults/drivers/cloud/fuel.py similarity index 99% rename from os_faults/drivers/fuel.py rename to os_faults/drivers/cloud/fuel.py index e9bc280..3c64eb2 100644 --- a/os_faults/drivers/fuel.py +++ b/os_faults/drivers/cloud/fuel.py @@ -18,7 +18,7 @@ from os_faults.ansible import executor from os_faults.api import cloud_management from os_faults.api import node_collection from os_faults.api import node_discover -from os_faults.common import service +from os_faults.drivers import service LOG = logging.getLogger(__name__) diff --git a/os_faults/drivers/tcpcloud.py b/os_faults/drivers/cloud/tcpcloud.py similarity index 99% rename from os_faults/drivers/tcpcloud.py rename to os_faults/drivers/cloud/tcpcloud.py index 897dbc0..a7d961f 100644 --- a/os_faults/drivers/tcpcloud.py +++ b/os_faults/drivers/cloud/tcpcloud.py @@ -19,7 +19,7 @@ from os_faults.ansible import executor from os_faults.api import cloud_management from os_faults.api import node_collection from os_faults.api import node_discover -from os_faults.common import service +from os_faults.drivers import service from os_faults import error LOG = logging.getLogger(__name__) diff --git a/os_faults/drivers/nodes/__init__.py b/os_faults/drivers/nodes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/os_faults/drivers/node_list.py b/os_faults/drivers/nodes/node_list.py similarity index 100% rename from os_faults/drivers/node_list.py rename to os_faults/drivers/nodes/node_list.py diff --git a/os_faults/drivers/power/__init__.py b/os_faults/drivers/power/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/os_faults/drivers/ipmi.py b/os_faults/drivers/power/ipmi.py similarity index 100% rename from os_faults/drivers/ipmi.py rename to os_faults/drivers/power/ipmi.py diff --git a/os_faults/drivers/libvirt_driver.py b/os_faults/drivers/power/libvirt.py similarity index 95% rename from os_faults/drivers/libvirt_driver.py rename to os_faults/drivers/power/libvirt.py index af2cf63..545bb8c 100644 --- a/os_faults/drivers/libvirt_driver.py +++ b/os_faults/drivers/power/libvirt.py @@ -13,6 +13,8 @@ import logging +from oslo_utils import importutils + from os_faults.api import error from os_faults.api import power_management @@ -59,12 +61,11 @@ class LibvirtDriver(power_management.PowerDriver): def _get_connection(self): if self._cached_conn is None: - try: - import libvirt - except ImportError: + libvirt_module = importutils.try_import('libvirt') + if not libvirt_module: raise error.OSFError('libvirt-python is required ' 'to use LibvirtDriver') - self._cached_conn = libvirt.open(self.connection_uri) + self._cached_conn = libvirt_module.open(self.connection_uri) return self._cached_conn diff --git a/os_faults/common/service.py b/os_faults/drivers/service.py similarity index 100% rename from os_faults/common/service.py rename to os_faults/drivers/service.py diff --git a/os_faults/tests/unit/drivers/cloud/__init__.py b/os_faults/tests/unit/drivers/cloud/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/os_faults/tests/unit/drivers/test_devstack.py b/os_faults/tests/unit/drivers/cloud/test_devstack.py similarity index 99% rename from os_faults/tests/unit/drivers/test_devstack.py rename to os_faults/tests/unit/drivers/cloud/test_devstack.py index a916e1e..fa5fdc0 100644 --- a/os_faults/tests/unit/drivers/test_devstack.py +++ b/os_faults/tests/unit/drivers/cloud/test_devstack.py @@ -17,7 +17,7 @@ import ddt import mock from os_faults.api import node_collection -from os_faults.drivers import devstack +from os_faults.drivers.cloud import devstack from os_faults.tests.unit import fakes from os_faults.tests.unit import test diff --git a/os_faults/tests/unit/drivers/test_devstack_systemd.py b/os_faults/tests/unit/drivers/cloud/test_devstack_systemd.py similarity index 97% rename from os_faults/tests/unit/drivers/test_devstack_systemd.py rename to os_faults/tests/unit/drivers/cloud/test_devstack_systemd.py index 857e99c..5700d41 100644 --- a/os_faults/tests/unit/drivers/test_devstack_systemd.py +++ b/os_faults/tests/unit/drivers/cloud/test_devstack_systemd.py @@ -15,8 +15,8 @@ import ddt import mock from os_faults.api import node_collection -from os_faults.drivers import devstack_systemd -from os_faults.tests.unit.drivers import test_devstack +from os_faults.drivers.cloud import devstack_systemd +from os_faults.tests.unit.drivers.cloud import test_devstack from os_faults.tests.unit import fakes from os_faults.tests.unit import test diff --git a/os_faults/tests/unit/drivers/test_fuel_management.py b/os_faults/tests/unit/drivers/cloud/test_fuel_management.py similarity index 99% rename from os_faults/tests/unit/drivers/test_fuel_management.py rename to os_faults/tests/unit/drivers/cloud/test_fuel_management.py index cd01ae1..977dc5e 100644 --- a/os_faults/tests/unit/drivers/test_fuel_management.py +++ b/os_faults/tests/unit/drivers/cloud/test_fuel_management.py @@ -17,7 +17,7 @@ import mock from os_faults.ansible import executor from os_faults.api import error from os_faults.api import node_collection -from os_faults.drivers import fuel +from os_faults.drivers.cloud import fuel from os_faults.tests.unit import fakes from os_faults.tests.unit import test diff --git a/os_faults/tests/unit/drivers/test_fuel_node_collection.py b/os_faults/tests/unit/drivers/cloud/test_fuel_node_collection.py similarity index 98% rename from os_faults/tests/unit/drivers/test_fuel_node_collection.py rename to os_faults/tests/unit/drivers/cloud/test_fuel_node_collection.py index 5c34c33..337f188 100644 --- a/os_faults/tests/unit/drivers/test_fuel_node_collection.py +++ b/os_faults/tests/unit/drivers/cloud/test_fuel_node_collection.py @@ -16,7 +16,7 @@ import copy import mock from os_faults.api import node_collection -from os_faults.drivers import fuel +from os_faults.drivers.cloud import fuel from os_faults.tests.unit import test diff --git a/os_faults/tests/unit/drivers/test_fuel_service.py b/os_faults/tests/unit/drivers/cloud/test_fuel_service.py similarity index 99% rename from os_faults/tests/unit/drivers/test_fuel_service.py rename to os_faults/tests/unit/drivers/cloud/test_fuel_service.py index 309dd5b..f7f0f4d 100644 --- a/os_faults/tests/unit/drivers/test_fuel_service.py +++ b/os_faults/tests/unit/drivers/cloud/test_fuel_service.py @@ -17,7 +17,7 @@ import mock from os_faults.ansible import executor from os_faults.api import error from os_faults.api import node_collection -from os_faults.drivers import fuel +from os_faults.drivers.cloud import fuel from os_faults.tests.unit import fakes from os_faults.tests.unit import test diff --git a/os_faults/tests/unit/drivers/test_tcpcloud.py b/os_faults/tests/unit/drivers/cloud/test_tcpcloud.py similarity index 99% rename from os_faults/tests/unit/drivers/test_tcpcloud.py rename to os_faults/tests/unit/drivers/cloud/test_tcpcloud.py index d2310f3..f95c721 100644 --- a/os_faults/tests/unit/drivers/test_tcpcloud.py +++ b/os_faults/tests/unit/drivers/cloud/test_tcpcloud.py @@ -16,7 +16,7 @@ import mock from os_faults.ansible import executor from os_faults.api import node_collection -from os_faults.drivers import tcpcloud +from os_faults.drivers.cloud import tcpcloud from os_faults.tests.unit import fakes from os_faults.tests.unit import test diff --git a/os_faults/tests/unit/drivers/nodes/__init__.py b/os_faults/tests/unit/drivers/nodes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/os_faults/tests/unit/drivers/test_node_list.py b/os_faults/tests/unit/drivers/nodes/test_node_list.py similarity index 96% rename from os_faults/tests/unit/drivers/test_node_list.py rename to os_faults/tests/unit/drivers/nodes/test_node_list.py index aa150f1..9a10270 100644 --- a/os_faults/tests/unit/drivers/test_node_list.py +++ b/os_faults/tests/unit/drivers/nodes/test_node_list.py @@ -12,7 +12,7 @@ # limitations under the License. from os_faults.api import node_collection -from os_faults.drivers import node_list +from os_faults.drivers.nodes import node_list from os_faults.tests.unit import test diff --git a/os_faults/tests/unit/drivers/power/__init__.py b/os_faults/tests/unit/drivers/power/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/os_faults/tests/unit/drivers/test_ipmi.py b/os_faults/tests/unit/drivers/power/test_ipmi.py similarity index 97% rename from os_faults/tests/unit/drivers/test_ipmi.py rename to os_faults/tests/unit/drivers/power/test_ipmi.py index 5636a5c..407a655 100644 --- a/os_faults/tests/unit/drivers/test_ipmi.py +++ b/os_faults/tests/unit/drivers/power/test_ipmi.py @@ -17,7 +17,7 @@ from pyghmi import exceptions as pyghmi_exc import os_faults from os_faults.api import node_collection -from os_faults.drivers import ipmi +from os_faults.drivers.power import ipmi from os_faults import error from os_faults.tests.unit import test @@ -124,7 +124,7 @@ class IPMIDriverTestCase(test.TestCase): self.driver._run_set_power_cmd, self.host, 'off', expected_state='off') - @mock.patch('os_faults.drivers.ipmi.IPMIDriver._run_set_power_cmd') + @mock.patch('os_faults.drivers.power.ipmi.IPMIDriver._run_set_power_cmd') @ddt.data(('poweroff', 'off', 'off'), ('poweron', 'on', 'on'), ('reset', 'boot'), diff --git a/os_faults/tests/unit/drivers/test_libvirt_driver.py b/os_faults/tests/unit/drivers/power/test_libvirt.py similarity index 97% rename from os_faults/tests/unit/drivers/test_libvirt_driver.py rename to os_faults/tests/unit/drivers/power/test_libvirt.py index 8e27c56..425c5fa 100644 --- a/os_faults/tests/unit/drivers/test_libvirt_driver.py +++ b/os_faults/tests/unit/drivers/power/test_libvirt.py @@ -15,12 +15,12 @@ import ddt import mock from os_faults.api import node_collection -from os_faults.drivers import libvirt_driver +from os_faults.drivers.power import libvirt from os_faults import error from os_faults.tests.unit import test -DRIVER_PATH = 'os_faults.drivers.libvirt_driver' +DRIVER_PATH = 'os_faults.drivers.power.libvirt' @ddt.ddt @@ -30,7 +30,7 @@ class LibvirtDriverTestCase(test.TestCase): super(LibvirtDriverTestCase, self).setUp() self.params = {'connection_uri': 'fake_connection_uri'} - self.driver = libvirt_driver.LibvirtDriver(self.params) + self.driver = libvirt.LibvirtDriver(self.params) self.host = node_collection.Host( ip='10.0.0.2', mac='00:00:00:00:00:00', fqdn='node1.com') diff --git a/os_faults/tests/unit/test_os_faults.py b/os_faults/tests/unit/test_os_faults.py index c2c6088..bc85e0f 100644 --- a/os_faults/tests/unit/test_os_faults.py +++ b/os_faults/tests/unit/test_os_faults.py @@ -22,12 +22,12 @@ from os_faults.api import cloud_management from os_faults.api import error from os_faults.api import node_collection from os_faults.api import service -from os_faults.drivers import devstack -from os_faults.drivers import devstack_systemd -from os_faults.drivers import fuel -from os_faults.drivers import ipmi -from os_faults.drivers import libvirt_driver -from os_faults.drivers import node_list +from os_faults.drivers.cloud import devstack +from os_faults.drivers.cloud import devstack_systemd +from os_faults.drivers.cloud import fuel +from os_faults.drivers.nodes import node_list +from os_faults.drivers.power import ipmi +from os_faults.drivers.power import libvirt from os_faults.tests.unit import test @@ -129,7 +129,7 @@ class OSFaultsTestCase(test.TestCase): self.assertIsInstance(destructor.node_discover, fuel.FuelManagement) self.assertEqual(1, len(destructor.power_manager.power_drivers)) self.assertIsInstance(destructor.power_manager.power_drivers[0], - libvirt_driver.LibvirtDriver) + libvirt.LibvirtDriver) def test_connect_fuel_with_ipmi_libvirt_and_node_list(self): cloud_config = { @@ -181,7 +181,7 @@ class OSFaultsTestCase(test.TestCase): self.assertIsInstance(destructor.power_manager.power_drivers[0], ipmi.IPMIDriver) self.assertIsInstance(destructor.power_manager.power_drivers[1], - libvirt_driver.LibvirtDriver) + libvirt.LibvirtDriver) def test_connect_driver_not_found(self): cloud_config = { @@ -207,7 +207,7 @@ class OSFaultsTestCase(test.TestCase): self.assertIsInstance(destructor, fuel.FuelManagement) self.assertEqual(1, len(destructor.power_manager.power_drivers)) self.assertIsInstance(destructor.power_manager.power_drivers[0], - libvirt_driver.LibvirtDriver) + libvirt.LibvirtDriver) @mock.patch.dict(os.environ, {'OS_FAULTS_CONFIG': '/my/conf.yaml'}) @mock.patch('os.path.exists', return_value=True) @@ -219,7 +219,7 @@ class OSFaultsTestCase(test.TestCase): self.assertIsInstance(destructor, fuel.FuelManagement) self.assertEqual(1, len(destructor.power_manager.power_drivers)) self.assertIsInstance(destructor.power_manager.power_drivers[0], - libvirt_driver.LibvirtDriver) + libvirt.LibvirtDriver) mock_os_faults_open.assert_called_once_with('/my/conf.yaml') @mock.patch('os.path.exists', return_value=False)