From 037360f64d5db7401df1d656fa8f1932011b5587 Mon Sep 17 00:00:00 2001 From: Hugo Nicodemos Date: Tue, 4 Jul 2017 14:07:03 -0300 Subject: [PATCH] Remove python-oneviewclient from Ironic OneView drivers This patch removes the python-oneviewclient library from OneView drivers since it was migrated to python-hponeview and python-ilorest-library. Change-Id: I061381a941e7d7f82863b326bb7555d41395e661 Closes-Bug: #1693788 --- doc/source/admin/drivers/oneview.rst | 27 ++++++++------- driver-requirements.txt | 3 +- ironic/drivers/fake.py | 12 ++----- ironic/drivers/modules/oneview/common.py | 33 ++----------------- ironic/drivers/modules/oneview/deploy.py | 2 -- .../drivers/modules/oneview/deploy_utils.py | 4 +-- ironic/drivers/modules/oneview/inspect.py | 7 +--- ironic/drivers/modules/oneview/management.py | 3 -- ironic/drivers/modules/oneview/power.py | 2 -- ironic/drivers/oneview.py | 25 ++------------ .../drivers/modules/oneview/test_common.py | 3 +- .../drivers/modules/oneview/test_deploy.py | 4 --- .../modules/oneview/test_management.py | 3 -- .../drivers/modules/oneview/test_power.py | 2 -- .../drivers/third_party_driver_mock_specs.py | 20 ----------- .../unit/drivers/third_party_driver_mocks.py | 33 ------------------- ...python-oneviewclient-f47e22322f7d151f.yaml | 6 ++++ 17 files changed, 30 insertions(+), 159 deletions(-) create mode 100644 releasenotes/notes/remove-python-oneviewclient-f47e22322f7d151f.yaml diff --git a/doc/source/admin/drivers/oneview.rst b/doc/source/admin/drivers/oneview.rst index 2793af870f..91d3696715 100644 --- a/doc/source/admin/drivers/oneview.rst +++ b/doc/source/admin/drivers/oneview.rst @@ -24,9 +24,8 @@ Classic Drivers =============== The ``iscsi_pxe_oneview`` and ``agent_pxe_oneview`` drivers implement the -core interfaces of an ironic Driver [2]_, and use the ``python-oneviewclient`` -[3]_ to provide communication between ironic and OneView through OneView's -REST API. +core interfaces of an ironic Driver [2]_, and use the ``hpOneView`` [3]_ to +provide communication between ironic and OneView through OneView's REST API. .. note:: Classic drivers will be deprecated in favor of Hardware Types. @@ -39,15 +38,15 @@ process: * The ironic driver for OneView, which can be: * `iscsi_pxe_oneview` or * `agent_pxe_oneview` -* The python-oneviewclient library +* The hpOneView library * The OneView appliance The role of ironic is to serve as a bare metal provider to OneView's managed physical hardware and to provide communication with other necessary OpenStack services such as Nova and Glance. When ironic receives a boot request, it works together with the ironic OneView driver to access a machine in OneView, -the ``python-oneviewclient`` being responsible for the communication with the -OneView appliance. +the ``hpOneView`` being responsible for the communication with the OneView +appliance. From the Newton release on, OneView drivers enables a new feature called **dynamic allocation** of nodes [6]_. In this model, the driver allocates @@ -72,14 +71,14 @@ The following requirements apply for both ``iscsi_pxe_oneview`` and Minimum version supported is 2.0. -* ``python-oneviewclient`` is a python package containing a client to manage - the communication between ironic and OneView. +* ``hpOneView`` is a python package containing a client to manage the + communication between ironic and OneView. - Install the ``python-oneviewclient`` module to enable the communication. - Minimum version required is 2.4.0 but it is recommended to install the most - up-to-date version:: + Install the ``hpOneView`` module to enable the communication. Minimum version + required is 3.2.1 but it is recommended to install the most up-to-date + version:: - $ pip install "python-oneviewclient<3.0.0,>=2.4.0" + $ pip install "hpOneView>=3.2.1" * ``ironic-inspector`` if using hardware inspection. @@ -97,7 +96,7 @@ Tested platforms - Proliant BL460c Gen8 - Proliant BL460c Gen9 - Proliant BL465c Gen8 - - Proliant DL360 Gen9 (starting with python-oneviewclient 2.1.0) + - Proliant DL360 Gen9 Notice that for the driver to work correctly with Gen8 and Gen9 DL servers in general, the hardware also needs to run version 4.2.3 of iLO, with @@ -435,7 +434,7 @@ References ========== .. [1] HP OneView - https://www.hpe.com/us/en/integrated-systems/software.html .. [2] :ref:`architecture_drivers` -.. [3] python-oneviewclient - https://pypi.python.org/pypi/python-oneviewclient +.. [3] hpOneView - https://pypi.python.org/pypi/hpOneView .. [6] Dynamic Allocation in OneView drivers - http://specs.openstack.org/openstack/ironic-specs/specs/not-implemented/oneview-drivers-dynamic-allocation.html .. [7] ironic-oneviewd - https://pypi.python.org/pypi/ironic-oneviewd/ .. [8] ironic-oneview-cli - https://pypi.python.org/pypi/ironic-oneview-cli/ diff --git a/driver-requirements.txt b/driver-requirements.txt index 2c3a62b8ed..ac0070fbf2 100644 --- a/driver-requirements.txt +++ b/driver-requirements.txt @@ -7,10 +7,9 @@ proliantutils>=2.4.1 pysnmp python-ironic-inspector-client>=1.5.0 -python-oneviewclient<3.0.0,>=2.5.2 python-scciclient>=0.5.0 python-ilorest-library>=1.9.2 -hpOneView<4.0.0,>=3.2.1 +hpOneView>=3.2.1 UcsSdk==0.8.2.2 python-dracclient>=1.3.0 diff --git a/ironic/drivers/fake.py b/ironic/drivers/fake.py index 28ddf1f7f6..27b62e1529 100644 --- a/ironic/drivers/fake.py +++ b/ironic/drivers/fake.py @@ -40,7 +40,6 @@ from ironic.drivers.modules.irmc import inspect as irmc_inspect from ironic.drivers.modules.irmc import management as irmc_management from ironic.drivers.modules.irmc import power as irmc_power from ironic.drivers.modules import iscsi_deploy -from ironic.drivers.modules.oneview import common as oneview_common from ironic.drivers.modules.oneview import management as oneview_management from ironic.drivers.modules.oneview import power as oneview_power from ironic.drivers.modules import pxe @@ -219,19 +218,14 @@ class FakeCIMCDriver(base.BaseDriver): class FakeOneViewDriver(base.BaseDriver): - """Fake OneView driver. For testing purposes. """ + """Fake OneView driver. For testing purposes.""" def __init__(self): - if not importutils.try_import('oneview_client.client'): + if not importutils.try_import('hpOneView.oneview_client'): raise exception.DriverLoadError( driver=self.__class__.__name__, - reason=_("Unable to import python-oneviewclient library")) + reason=_("Unable to import hpOneView library")) - # Checks connectivity to OneView and version compatibility on driver - # initialization - oneview_client = oneview_common.get_oneview_client() - oneview_client.verify_oneview_version() - oneview_client.verify_credentials() self.power = oneview_power.OneViewPower() self.management = oneview_management.OneViewManagement() self.boot = fake.FakeBoot() diff --git a/ironic/drivers/modules/oneview/common.py b/ironic/drivers/modules/oneview/common.py index cb0b871a6e..122c847f28 100644 --- a/ironic/drivers/modules/oneview/common.py +++ b/ironic/drivers/modules/oneview/common.py @@ -25,20 +25,10 @@ from ironic.drivers import utils LOG = logging.getLogger(__name__) -# NOTE(mrtenio): hpOneView will be the default library for OneView. It -# is being introduced together with the python-oneviewclient to be used -# generally by other patches. python-oneviewclient will be removed -# subsequently. -client = importutils.try_import('oneview_client.client') -oneview_utils = importutils.try_import('oneview_client.utils') -oneview_states = importutils.try_import('oneview_client.states') -oneview_exceptions = importutils.try_import('oneview_client.exceptions') - hponeview_client = importutils.try_import('hpOneView.oneview_client') redfish = importutils.try_import('redfish') client_exception = importutils.try_import('hpOneView.exceptions') - REQUIRED_ON_DRIVER_INFO = { 'server_hardware_uri': _("Server Hardware URI. Required in driver_info."), } @@ -75,25 +65,6 @@ NODE_IN_USE_BY_ONEVIEW = 'node in use by OneView' SERVER_HARDWARE_ALLOCATION_ERROR = 'server hardware allocation error' -def get_oneview_client(): - """Generate an instance of the OneView client. - - Generates an instance of the OneView client using the imported - oneview_client library. - - :returns: an instance of the OneView client - """ - oneview_client = client.Client( - manager_url=CONF.oneview.manager_url, - username=CONF.oneview.username, - password=CONF.oneview.password, - allow_insecure_connections=CONF.oneview.allow_insecure_connections, - tls_cacert_file=CONF.oneview.tls_cacert_file, - max_polling_attempts=CONF.oneview.max_polling_attempts - ) - return oneview_client - - def prepare_manager_url(manager_url): # NOTE(mrtenio) python-oneviewclient uses https or http in the manager_url # while python-hpOneView does not. This will not be necessary when @@ -105,9 +76,9 @@ def prepare_manager_url(manager_url): def get_hponeview_client(): - """Generate an instance of the hpOneView client. + """Generate an instance of the HPE OneView client. - Generates an instance of the hpOneView client using the hpOneView library. + Generates an instance of the HPE OneView client using the hpOneView lib. :returns: an instance of the OneViewClient :raises: InvalidParameterValue if mandatory information is missing on the diff --git a/ironic/drivers/modules/oneview/deploy.py b/ironic/drivers/modules/oneview/deploy.py index d4553a32f0..3f2704986f 100644 --- a/ironic/drivers/modules/oneview/deploy.py +++ b/ironic/drivers/modules/oneview/deploy.py @@ -221,7 +221,6 @@ class OneViewIscsiDeploy(iscsi_deploy.ISCSIDeploy, OneViewPeriodicTasks): def __init__(self): super(OneViewIscsiDeploy, self).__init__() self.client = common.get_hponeview_client() - self.oneview_client = common.get_oneview_client() def get_properties(self): return deploy_utils.get_properties() @@ -265,7 +264,6 @@ class OneViewAgentDeploy(agent.AgentDeploy, OneViewPeriodicTasks): def __init__(self): super(OneViewAgentDeploy, self).__init__() self.client = common.get_hponeview_client() - self.oneview_client = common.get_oneview_client() def get_properties(self): return deploy_utils.get_properties() diff --git a/ironic/drivers/modules/oneview/deploy_utils.py b/ironic/drivers/modules/oneview/deploy_utils.py index ad6a711e0f..9b6b31b1df 100644 --- a/ironic/drivers/modules/oneview/deploy_utils.py +++ b/ironic/drivers/modules/oneview/deploy_utils.py @@ -26,8 +26,6 @@ from ironic.drivers.modules.oneview import common LOG = logging.getLogger(__name__) client_exception = importutils.try_import('hpOneView.exceptions') -oneview_exception = importutils.try_import('oneview_client.exceptions') -oneview_utils = importutils.try_import('oneview_client.utils') def get_properties(): @@ -201,7 +199,7 @@ def is_node_in_use_by_oneview(client, node): def is_node_in_use_by_ironic(client, node): """Check if node is in use by ironic in OneView. - :param client: an instance of the OneView client + :param client: an instance of the HPE OneView client :param node: an ironic node object :returns: Boolean value. True if node is in use by ironic, False otherwise. diff --git a/ironic/drivers/modules/oneview/inspect.py b/ironic/drivers/modules/oneview/inspect.py index a1ae5382aa..e51f4d7196 100644 --- a/ironic/drivers/modules/oneview/inspect.py +++ b/ironic/drivers/modules/oneview/inspect.py @@ -15,7 +15,6 @@ from futurist import periodics from ironic_lib import metrics_utils -from oslo_utils import importutils from ironic.common import exception from ironic.common import states @@ -28,9 +27,6 @@ from ironic.conf import CONF METRICS = metrics_utils.get_metrics_logger(__name__) -oneview_exception = importutils.try_import('oneview_client.exceptions') -oneview_utils = importutils.try_import('oneview_client.utils') - class OneViewInspect(inspector.Inspector): """Interface for in band inspection.""" @@ -38,7 +34,6 @@ class OneViewInspect(inspector.Inspector): def __init__(self): super(OneViewInspect, self).__init__() self.client = common.get_hponeview_client() - self.oneview_client = common.get_oneview_client() def get_properties(self): return deploy_utils.get_properties() @@ -68,7 +63,7 @@ class OneViewInspect(inspector.Inspector): def inspect_hardware(self, task): profile_name = 'Ironic Inspecting [%s]' % task.node.uuid deploy_utils.allocate_server_hardware_to_ironic( - self.oneview_client, task.node, profile_name + self.client, task.node, profile_name ) return super(OneViewInspect, self).inspect_hardware(task) diff --git a/ironic/drivers/modules/oneview/management.py b/ironic/drivers/modules/oneview/management.py index f94c1bca3a..bf6549c221 100644 --- a/ironic/drivers/modules/oneview/management.py +++ b/ironic/drivers/modules/oneview/management.py @@ -26,7 +26,6 @@ from ironic.drivers.modules.oneview import common from ironic.drivers.modules.oneview import deploy_utils client_exception = importutils.try_import('hpOneView.exceptions') -oneview_exceptions = importutils.try_import('oneview_client.exceptions') LOG = logging.getLogger(__name__) METRICS = metrics_utils.get_metrics_logger(__name__) @@ -167,7 +166,6 @@ class OneViewManagement(base.ManagementInterface): def __init__(self): super(OneViewManagement, self).__init__() self.client = common.get_hponeview_client() - self.oneview_client = common.get_oneview_client() def get_properties(self): return deploy_utils.get_properties() @@ -192,7 +190,6 @@ class OneViewManagement(base.ManagementInterface): try: common.validate_oneview_resources_compatibility(self.client, task) - if not deploy_utils.is_node_in_use_by_ironic( self.client, task.node ): diff --git a/ironic/drivers/modules/oneview/power.py b/ironic/drivers/modules/oneview/power.py index fe4115bf58..ab0091f550 100644 --- a/ironic/drivers/modules/oneview/power.py +++ b/ironic/drivers/modules/oneview/power.py @@ -27,7 +27,6 @@ from ironic.drivers.modules.oneview import deploy_utils from ironic.drivers.modules.oneview import management client_exception = importutils.try_import('hpOneView.exceptions') -oneview_exceptions = importutils.try_import('oneview_client.exceptions') LOG = logging.getLogger(__name__) METRICS = metrics_utils.get_metrics_logger(__name__) @@ -60,7 +59,6 @@ class OneViewPower(base.PowerInterface): def __init__(self): super(OneViewPower, self).__init__() self.client = common.get_hponeview_client() - self.oneview_client = common.get_oneview_client() def get_properties(self): return deploy_utils.get_properties() diff --git a/ironic/drivers/oneview.py b/ironic/drivers/oneview.py index 27038a46de..9391bcd97b 100644 --- a/ironic/drivers/oneview.py +++ b/ironic/drivers/oneview.py @@ -21,7 +21,6 @@ from ironic.common.i18n import _ from ironic.drivers import base from ironic.drivers import generic from ironic.drivers.modules import noop -from ironic.drivers.modules.oneview import common from ironic.drivers.modules.oneview import deploy from ironic.drivers.modules.oneview import inspect from ironic.drivers.modules.oneview import management @@ -57,7 +56,7 @@ class OneViewHardware(generic.GenericHardware): class AgentPXEOneViewDriver(base.BaseDriver): - """OneViewDriver using OneViewClient interface. + """OneViewDriver using HPE OneViewClient interface. This driver implements the `core` functionality using :class:ironic.drivers.modules.oneview.power.OneViewPower for power @@ -66,21 +65,11 @@ class AgentPXEOneViewDriver(base.BaseDriver): """ def __init__(self): - if not importutils.try_import('oneview_client.client'): - raise exception.DriverLoadError( - driver=self.__class__.__name__, - reason=_("Unable to import python-oneviewclient library")) - if not importutils.try_import('hpOneView.oneview_client'): raise exception.DriverLoadError( driver=self.__class__.__name__, reason=_("Unable to import hpOneView library")) - # Checks connectivity to OneView and version compatibility on driver - # initialization - oneview_client = common.get_oneview_client() - oneview_client.verify_oneview_version() - oneview_client.verify_credentials() self.power = power.OneViewPower() self.management = management.OneViewManagement() self.boot = pxe.PXEBoot() @@ -90,7 +79,7 @@ class AgentPXEOneViewDriver(base.BaseDriver): class ISCSIPXEOneViewDriver(base.BaseDriver): - """OneViewDriver using OneViewClient interface. + """OneViewDriver using HPE OneViewClient interface. This driver implements the `core` functionality using :class:ironic.drivers.modules.oneview.power.OneViewPower for power @@ -99,21 +88,11 @@ class ISCSIPXEOneViewDriver(base.BaseDriver): """ def __init__(self): - if not importutils.try_import('oneview_client.client'): - raise exception.DriverLoadError( - driver=self.__class__.__name__, - reason=_("Unable to import python-oneviewclient library")) - if not importutils.try_import('hpOneView.oneview_client'): raise exception.DriverLoadError( driver=self.__class__.__name__, reason=_("Unable to import hpOneView library")) - # Checks connectivity to OneView and version compatibility on driver - # initialization - oneview_client = common.get_oneview_client() - oneview_client.verify_oneview_version() - oneview_client.verify_credentials() self.power = power.OneViewPower() self.management = management.OneViewManagement() self.boot = pxe.PXEBoot() diff --git a/ironic/tests/unit/drivers/modules/oneview/test_common.py b/ironic/tests/unit/drivers/modules/oneview/test_common.py index 7f26221ed6..0755d5c06a 100644 --- a/ironic/tests/unit/drivers/modules/oneview/test_common.py +++ b/ironic/tests/unit/drivers/modules/oneview/test_common.py @@ -25,8 +25,7 @@ from ironic.tests.unit.db import base as db_base from ironic.tests.unit.db import utils as db_utils from ironic.tests.unit.objects import utils as obj_utils -hponeview_client = importutils.try_import('oneview_client.client') -oneview_states = importutils.try_import('oneview_client.states') +hponeview_client = importutils.try_import('hpOneView.oneview_client') class OneViewCommonTestCase(db_base.DbTestCase): diff --git a/ironic/tests/unit/drivers/modules/oneview/test_deploy.py b/ironic/tests/unit/drivers/modules/oneview/test_deploy.py index 0dd8e003f8..7304786de0 100644 --- a/ironic/tests/unit/drivers/modules/oneview/test_deploy.py +++ b/ironic/tests/unit/drivers/modules/oneview/test_deploy.py @@ -14,7 +14,6 @@ # under the License. import mock -from oslo_utils import importutils from ironic.common import driver_factory from ironic.common import exception @@ -31,8 +30,6 @@ from ironic.tests.unit.db import base as db_base from ironic.tests.unit.db import utils as db_utils from ironic.tests.unit.objects import utils as obj_utils -oneview_models = importutils.try_import('oneview_client.models') - METHODS = ['iter_nodes', 'update_node', 'do_provisioning_action'] PXE_DRV_INFO_DICT = db_utils.get_test_pxe_driver_info() PXE_INST_INFO_DICT = db_utils.get_test_pxe_instance_info() @@ -86,7 +83,6 @@ class OneViewDriverDeploy(deploy.OneViewPeriodicTasks): def __init__(self): self.client = mock.MagicMock() - self.oneview_client = mock.MagicMock() @mock.patch('ironic.objects.Node', spec_set=True, autospec=True) diff --git a/ironic/tests/unit/drivers/modules/oneview/test_management.py b/ironic/tests/unit/drivers/modules/oneview/test_management.py index c6bbf1f699..af48dbe9b1 100644 --- a/ironic/tests/unit/drivers/modules/oneview/test_management.py +++ b/ironic/tests/unit/drivers/modules/oneview/test_management.py @@ -29,10 +29,7 @@ from ironic.tests.unit.db import base as db_base from ironic.tests.unit.db import utils as db_utils from ironic.tests.unit.objects import utils as obj_utils - client_exception = importutils.try_import('hpOneView.exceptions') -oneview_exceptions = importutils.try_import('oneview_client.exceptions') -oneview_models = importutils.try_import('oneview_client.models') @mock.patch.object(common, 'get_hponeview_client') diff --git a/ironic/tests/unit/drivers/modules/oneview/test_power.py b/ironic/tests/unit/drivers/modules/oneview/test_power.py index 0cba73b677..f4cb60055e 100644 --- a/ironic/tests/unit/drivers/modules/oneview/test_power.py +++ b/ironic/tests/unit/drivers/modules/oneview/test_power.py @@ -31,8 +31,6 @@ from ironic.tests.unit.db import utils as db_utils from ironic.tests.unit.objects import utils as obj_utils client_exception = importutils.try_import('hpOneView.exceptions') -oneview_models = importutils.try_import('oneview_client.models') -oneview_exceptions = importutils.try_import('oneview_client.exceptions') @mock.patch.object(common, 'get_hponeview_client') diff --git a/ironic/tests/unit/drivers/third_party_driver_mock_specs.py b/ironic/tests/unit/drivers/third_party_driver_mock_specs.py index 4e7e8b7c05..c18586e619 100644 --- a/ironic/tests/unit/drivers/third_party_driver_mock_specs.py +++ b/ironic/tests/unit/drivers/third_party_driver_mock_specs.py @@ -123,26 +123,6 @@ SCCICLIENT_VIOM_CONF_SPEC = ( 'terminate', ) -ONEVIEWCLIENT_SPEC = ( - 'client', - 'states', - 'exceptions', - 'models', - 'utils', -) - -ONEVIEWCLIENT_CLIENT_CLS_SPEC = ( -) - -ONEVIEWCLIENT_STATES_SPEC = ( - 'ONEVIEW_POWER_OFF', - 'ONEVIEW_POWERING_OFF', - 'ONEVIEW_POWER_ON', - 'ONEVIEW_POWERING_ON', - 'ONEVIEW_RESETTING', - 'ONEVIEW_ERROR', -) - HPONEVIEW_SPEC = ( 'oneview_client', 'resources', diff --git a/ironic/tests/unit/drivers/third_party_driver_mocks.py b/ironic/tests/unit/drivers/third_party_driver_mocks.py index ed5992f504..2eafc8a09a 100644 --- a/ironic/tests/unit/drivers/third_party_driver_mocks.py +++ b/ironic/tests/unit/drivers/third_party_driver_mocks.py @@ -25,7 +25,6 @@ Current list of mocked libraries: - proliantutils - pysnmp - scciclient -- oneview_client - hpOneView - pywsman - python-dracclient @@ -68,38 +67,6 @@ if not proliantutils: if 'ironic.drivers.ilo' in sys.modules: six.moves.reload_module(sys.modules['ironic.drivers.ilo']) - -oneview_client = importutils.try_import('oneview_client') -if not oneview_client: - oneview_client = mock.MagicMock(spec_set=mock_specs.ONEVIEWCLIENT_SPEC) - sys.modules['oneview_client'] = oneview_client - sys.modules['oneview_client.client'] = oneview_client.client - states = mock.MagicMock( - spec_set=mock_specs.ONEVIEWCLIENT_STATES_SPEC, - ONEVIEW_POWER_OFF='Off', - ONEVIEW_POWERING_OFF='PoweringOff', - ONEVIEW_POWER_ON='On', - ONEVIEW_POWERING_ON='PoweringOn', - ONEVIEW_RESETTING='Resetting', - ONEVIEW_ERROR='error') - sys.modules['oneview_client.states'] = states - sys.modules['oneview_client.exceptions'] = oneview_client.exceptions - sys.modules['oneview_client.utils'] = oneview_client.utils - oneview_client.exceptions.OneViewException = type('OneViewException', - (Exception,), {}) - sys.modules['oneview_client.models'] = oneview_client.models - -oneview_client_module = importutils.try_import('oneview_client.client') -# NOTE(vdrok): Always mock the oneview client, as it tries to establish -# connection to oneview right in __init__, and stevedore does not seem to care -# about mocks when it loads a module in mock_the_extension_manager -sys.modules['oneview_client.client'].Client = mock.MagicMock( - spec_set=mock_specs.ONEVIEWCLIENT_CLIENT_CLS_SPEC -) -if 'ironic.drivers.oneview' in sys.modules: - six.moves.reload_module(sys.modules['ironic.drivers.modules.oneview']) - - hpOneView = importutils.try_import('hpOneView') if not hpOneView: hpOneView = mock.MagicMock(spec_set=mock_specs.HPONEVIEW_SPEC) diff --git a/releasenotes/notes/remove-python-oneviewclient-f47e22322f7d151f.yaml b/releasenotes/notes/remove-python-oneviewclient-f47e22322f7d151f.yaml new file mode 100644 index 0000000000..81585ffec6 --- /dev/null +++ b/releasenotes/notes/remove-python-oneviewclient-f47e22322f7d151f.yaml @@ -0,0 +1,6 @@ +--- +other: + - | + The OneView drivers no longer use ``python-oneviewclient`` to communicate with + OneView appliances. The ``oneview`` hardware type now uses the ``hpOneView`` + and ``python-ilorest-library`` libraries.