diff --git a/distributedcloud/dccommon/drivers/openstack/sdk_platform.py b/distributedcloud/dccommon/drivers/openstack/sdk_platform.py index 4288dec28..99cc8d2e7 100644 --- a/distributedcloud/dccommon/drivers/openstack/sdk_platform.py +++ b/distributedcloud/dccommon/drivers/openstack/sdk_platform.py @@ -452,7 +452,7 @@ class OptimizedOpenStackDriver(object): ) if client_obj is not None: LOG.debug( - "Using cached OS {client} client objects " + f"Using cached OS {client} client objects " f"{region_name} {thread_name}" ) setattr(self, f"{client}_client", client_obj) diff --git a/distributedcloud/dcmanager/common/utils.py b/distributedcloud/dcmanager/common/utils.py index afba60c7d..5a4b575fa 100644 --- a/distributedcloud/dcmanager/common/utils.py +++ b/distributedcloud/dcmanager/common/utils.py @@ -42,7 +42,10 @@ import tsconfig.tsconfig as tsc import yaml from dccommon import consts as dccommon_consts +# TODO(gherzman): Replace OpenStackDriver with OptimizedOpenStackDriver +# during dcmanager OptimizedOpenStackDriver integration from dccommon.drivers.openstack.sdk_platform import OpenStackDriver +from dccommon.drivers.openstack.sdk_platform import OptimizedOpenStackDriver from dccommon.drivers.openstack.sysinv_v1 import SysinvClient from dccommon.drivers.openstack import vim from dccommon import exceptions as dccommon_exceptions @@ -1074,11 +1077,12 @@ def is_subcloud_healthy(subcloud_region): def get_systemcontroller_installed_loads(): - try: - os_client = OpenStackDriver( + os_client = OptimizedOpenStackDriver( region_name=dccommon_consts.SYSTEM_CONTROLLER_NAME, - region_clients=None) + region_clients=None, + fetch_subcloud_ips=fetch_subcloud_mgmt_ips, + ) except Exception: LOG.exception("Failed to get keystone client for %s", dccommon_consts.SYSTEM_CONTROLLER_NAME) @@ -1355,8 +1359,11 @@ def decode_and_normalize_passwd(input_passwd): def get_failure_msg(subcloud_region): try: - os_client = OpenStackDriver(region_name=subcloud_region, - region_clients=None) + os_client = OptimizedOpenStackDriver( + region_name=subcloud_region, + region_clients=None, + fetch_subcloud_ips=fetch_subcloud_mgmt_ips, + ) keystone_client = os_client.keystone_client endpoint = keystone_client.endpoint_cache.get_endpoint('sysinv') sysinv_client = SysinvClient(subcloud_region, diff --git a/distributedcloud/dcmanager/orchestrator/orch_thread.py b/distributedcloud/dcmanager/orchestrator/orch_thread.py index e878540d8..0746a884f 100644 --- a/distributedcloud/dcmanager/orchestrator/orch_thread.py +++ b/distributedcloud/dcmanager/orchestrator/orch_thread.py @@ -25,7 +25,9 @@ from oslo_log import log as logging from dccommon import consts as dccommon_consts from dccommon.drivers.openstack.patching_v1 import PatchingClient -from dccommon.drivers.openstack.sdk_platform import OpenStackDriver +from dccommon.drivers.openstack.sdk_platform import ( + OptimizedOpenStackDriver as OpenStackDriver +) from dccommon.drivers.openstack.software_v1 import SoftwareClient from dccommon.drivers.openstack.sysinv_v1 import SysinvClient from dccommon.drivers.openstack import vim @@ -33,6 +35,7 @@ from dcmanager.common import consts from dcmanager.common import context from dcmanager.common import exceptions from dcmanager.common import scheduler +from dcmanager.common import utils from dcmanager.db import api as db_api LOG = logging.getLogger(__name__) @@ -133,8 +136,11 @@ class OrchThread(threading.Thread): throws an exception if keystone client cannot be initialized """ - os_client = OpenStackDriver(region_name=region_name, - region_clients=None) + os_client = OpenStackDriver( + region_name=region_name, + region_clients=None, + fetch_subcloud_ips=utils.fetch_subcloud_mgmt_ips, + ) return os_client.keystone_client @staticmethod diff --git a/distributedcloud/dcmanager/orchestrator/states/base.py b/distributedcloud/dcmanager/orchestrator/states/base.py index f52731a0d..571ba3fdb 100644 --- a/distributedcloud/dcmanager/orchestrator/states/base.py +++ b/distributedcloud/dcmanager/orchestrator/states/base.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2020-2023 Wind River Systems, Inc. +# Copyright (c) 2020-2024 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # @@ -12,12 +12,15 @@ from dccommon import consts as dccommon_consts from dccommon.drivers.openstack.barbican import BarbicanClient from dccommon.drivers.openstack.fm import FmClient from dccommon.drivers.openstack.patching_v1 import PatchingClient -from dccommon.drivers.openstack.sdk_platform import OpenStackDriver +from dccommon.drivers.openstack.sdk_platform import ( + OptimizedOpenStackDriver as OpenStackDriver +) from dccommon.drivers.openstack.software_v1 import SoftwareClient from dccommon.drivers.openstack.sysinv_v1 import SysinvClient from dccommon.drivers.openstack.vim import VimClient from dcmanager.common import context from dcmanager.common.exceptions import InvalidParameterValue +from dcmanager.common import utils LOG = logging.getLogger(__name__) @@ -108,8 +111,11 @@ class BaseState(object): """Construct a (cached) keystone client (and token)""" try: - os_client = OpenStackDriver(region_name=region_name, - region_clients=['sysinv']) + os_client = OpenStackDriver( + region_name=region_name, + region_clients=["sysinv"], + fetch_subcloud_ips=utils.fetch_subcloud_mgmt_ips, + ) return os_client.keystone_client except Exception: LOG.warning('Failure initializing KeystoneClient for region: %s' diff --git a/distributedcloud/dcmanager/orchestrator/states/software/cache/clients.py b/distributedcloud/dcmanager/orchestrator/states/software/cache/clients.py index 34712a857..06925ffbb 100644 --- a/distributedcloud/dcmanager/orchestrator/states/software/cache/clients.py +++ b/distributedcloud/dcmanager/orchestrator/states/software/cache/clients.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2023 Wind River Systems, Inc. +# Copyright (c) 2023-2024 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # @@ -9,9 +9,12 @@ from keystoneauth1 import exceptions as keystone_exceptions from oslo_log import log as logging from dccommon import consts as dccommon_consts -from dccommon.drivers.openstack.sdk_platform import OpenStackDriver +from dccommon.drivers.openstack.sdk_platform import ( + OptimizedOpenStackDriver as OpenStackDriver +) from dccommon.drivers.openstack.software_v1 import SoftwareClient from dccommon.drivers.openstack.sysinv_v1 import SysinvClient +from dcmanager.common import utils LOG = logging.getLogger(__name__) @@ -41,8 +44,11 @@ def get_keystone_client(region_name=dccommon_consts.DEFAULT_REGION_NAME): """Construct a (cached) keystone client (and token)""" try: - os_client = OpenStackDriver(region_name=region_name, - region_clients=['sysinv']) + os_client = OpenStackDriver( + region_name=region_name, + region_clients=["sysinv"], + fetch_subcloud_ips=utils.fetch_subcloud_mgmt_ips, + ) return os_client.keystone_client except Exception: LOG.warning('Failure initializing KeystoneClient for region: %s' diff --git a/distributedcloud/dcmanager/orchestrator/states/upgrade/cache/clients.py b/distributedcloud/dcmanager/orchestrator/states/upgrade/cache/clients.py index fd502338f..9eb983feb 100644 --- a/distributedcloud/dcmanager/orchestrator/states/upgrade/cache/clients.py +++ b/distributedcloud/dcmanager/orchestrator/states/upgrade/cache/clients.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2022 Wind River Systems, Inc. +# Copyright (c) 2022, 2024 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # @@ -10,8 +10,11 @@ from oslo_log import log as logging from dccommon import consts as dccommon_consts from dccommon.drivers.openstack.patching_v1 import PatchingClient -from dccommon.drivers.openstack.sdk_platform import OpenStackDriver +from dccommon.drivers.openstack.sdk_platform import ( + OptimizedOpenStackDriver as OpenStackDriver +) from dccommon.drivers.openstack.sysinv_v1 import SysinvClient +from dcmanager.common import utils LOG = logging.getLogger(__name__) @@ -41,8 +44,11 @@ def get_keystone_client(region_name=dccommon_consts.DEFAULT_REGION_NAME): """Construct a (cached) keystone client (and token)""" try: - os_client = OpenStackDriver(region_name=region_name, - region_clients=['sysinv']) + os_client = OpenStackDriver( + region_name=region_name, + region_clients=["sysinv"], + fetch_subcloud_ips=utils.fetch_subcloud_mgmt_ips, + ) return os_client.keystone_client except Exception: LOG.warning('Failure initializing KeystoneClient for region: %s' diff --git a/distributedcloud/dcmanager/tests/unit/api/v1/controllers/test_subclouds.py b/distributedcloud/dcmanager/tests/unit/api/v1/controllers/test_subclouds.py index 02410052b..6e01290c6 100644 --- a/distributedcloud/dcmanager/tests/unit/api/v1/controllers/test_subclouds.py +++ b/distributedcloud/dcmanager/tests/unit/api/v1/controllers/test_subclouds.py @@ -2353,6 +2353,12 @@ class TestSubcloudsPatchPrestage(BaseTestSubcloudsPatch): def test_patch_prestage_fails_with_invalid_release(self): """Test patch prestage fails with invalid release""" + # TODO(gherzmann): Remove the following mock when the OpenStackDriver + # is fully replaced by OptimizedOpenStackDriver + mock_patch_object = mock.patch.object(cutils, 'OptimizedOpenStackDriver') + self.mock_openstack_driver = mock_patch_object.start() + self.addCleanup(mock_patch_object.stop) + self.params["release"] = "21.12" self.mock_sysinv_client().get_loads.return_values = FakeLoad(