Integrate dcmanager orchestrator with optimized OpenStackDriver

This commit modifies the dcmanager orchestrator service to use the new
OptimizedOpenStackDriver [1].

Test Plan:
1. PASS - Run patch orchestrator and verify that the operation
          completes successfully;
2. PASS - Run kube upgrade orchestrator and verify that the operation
          completes successfully.

[1]: https://review.opendev.org/c/starlingx/distcloud/+/918311

Story: 2011106
Task: 50263

Change-Id: I7649c271e10641bb7840e35b510f916ee75d78c6
Signed-off-by: Gustavo Herzmann <gustavo.herzmann@windriver.com>
This commit is contained in:
Gustavo Herzmann
2024-06-05 09:41:48 -03:00
parent b696650c70
commit 184590f950
7 changed files with 58 additions and 21 deletions

View File

@@ -452,7 +452,7 @@ class OptimizedOpenStackDriver(object):
) )
if client_obj is not None: if client_obj is not None:
LOG.debug( LOG.debug(
"Using cached OS {client} client objects " f"Using cached OS {client} client objects "
f"{region_name} {thread_name}" f"{region_name} {thread_name}"
) )
setattr(self, f"{client}_client", client_obj) setattr(self, f"{client}_client", client_obj)

View File

@@ -42,7 +42,10 @@ import tsconfig.tsconfig as tsc
import yaml import yaml
from dccommon import consts as dccommon_consts 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 OpenStackDriver
from dccommon.drivers.openstack.sdk_platform import OptimizedOpenStackDriver
from dccommon.drivers.openstack.sysinv_v1 import SysinvClient from dccommon.drivers.openstack.sysinv_v1 import SysinvClient
from dccommon.drivers.openstack import vim from dccommon.drivers.openstack import vim
from dccommon import exceptions as dccommon_exceptions from dccommon import exceptions as dccommon_exceptions
@@ -1074,11 +1077,12 @@ def is_subcloud_healthy(subcloud_region):
def get_systemcontroller_installed_loads(): def get_systemcontroller_installed_loads():
try: try:
os_client = OpenStackDriver( os_client = OptimizedOpenStackDriver(
region_name=dccommon_consts.SYSTEM_CONTROLLER_NAME, region_name=dccommon_consts.SYSTEM_CONTROLLER_NAME,
region_clients=None) region_clients=None,
fetch_subcloud_ips=fetch_subcloud_mgmt_ips,
)
except Exception: except Exception:
LOG.exception("Failed to get keystone client for %s", LOG.exception("Failed to get keystone client for %s",
dccommon_consts.SYSTEM_CONTROLLER_NAME) dccommon_consts.SYSTEM_CONTROLLER_NAME)
@@ -1355,8 +1359,11 @@ def decode_and_normalize_passwd(input_passwd):
def get_failure_msg(subcloud_region): def get_failure_msg(subcloud_region):
try: try:
os_client = OpenStackDriver(region_name=subcloud_region, os_client = OptimizedOpenStackDriver(
region_clients=None) region_name=subcloud_region,
region_clients=None,
fetch_subcloud_ips=fetch_subcloud_mgmt_ips,
)
keystone_client = os_client.keystone_client keystone_client = os_client.keystone_client
endpoint = keystone_client.endpoint_cache.get_endpoint('sysinv') endpoint = keystone_client.endpoint_cache.get_endpoint('sysinv')
sysinv_client = SysinvClient(subcloud_region, sysinv_client = SysinvClient(subcloud_region,

View File

@@ -25,7 +25,9 @@ from oslo_log import log as logging
from dccommon import consts as dccommon_consts from dccommon import consts as dccommon_consts
from dccommon.drivers.openstack.patching_v1 import PatchingClient 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.software_v1 import SoftwareClient
from dccommon.drivers.openstack.sysinv_v1 import SysinvClient from dccommon.drivers.openstack.sysinv_v1 import SysinvClient
from dccommon.drivers.openstack import vim from dccommon.drivers.openstack import vim
@@ -33,6 +35,7 @@ from dcmanager.common import consts
from dcmanager.common import context from dcmanager.common import context
from dcmanager.common import exceptions from dcmanager.common import exceptions
from dcmanager.common import scheduler from dcmanager.common import scheduler
from dcmanager.common import utils
from dcmanager.db import api as db_api from dcmanager.db import api as db_api
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@@ -133,8 +136,11 @@ class OrchThread(threading.Thread):
throws an exception if keystone client cannot be initialized throws an exception if keystone client cannot be initialized
""" """
os_client = OpenStackDriver(region_name=region_name, os_client = OpenStackDriver(
region_clients=None) region_name=region_name,
region_clients=None,
fetch_subcloud_ips=utils.fetch_subcloud_mgmt_ips,
)
return os_client.keystone_client return os_client.keystone_client
@staticmethod @staticmethod

View File

@@ -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 # 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.barbican import BarbicanClient
from dccommon.drivers.openstack.fm import FmClient from dccommon.drivers.openstack.fm import FmClient
from dccommon.drivers.openstack.patching_v1 import PatchingClient 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.software_v1 import SoftwareClient
from dccommon.drivers.openstack.sysinv_v1 import SysinvClient from dccommon.drivers.openstack.sysinv_v1 import SysinvClient
from dccommon.drivers.openstack.vim import VimClient from dccommon.drivers.openstack.vim import VimClient
from dcmanager.common import context from dcmanager.common import context
from dcmanager.common.exceptions import InvalidParameterValue from dcmanager.common.exceptions import InvalidParameterValue
from dcmanager.common import utils
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@@ -108,8 +111,11 @@ class BaseState(object):
"""Construct a (cached) keystone client (and token)""" """Construct a (cached) keystone client (and token)"""
try: try:
os_client = OpenStackDriver(region_name=region_name, os_client = OpenStackDriver(
region_clients=['sysinv']) region_name=region_name,
region_clients=["sysinv"],
fetch_subcloud_ips=utils.fetch_subcloud_mgmt_ips,
)
return os_client.keystone_client return os_client.keystone_client
except Exception: except Exception:
LOG.warning('Failure initializing KeystoneClient for region: %s' LOG.warning('Failure initializing KeystoneClient for region: %s'

View File

@@ -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 # 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 oslo_log import log as logging
from dccommon import consts as dccommon_consts 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.software_v1 import SoftwareClient
from dccommon.drivers.openstack.sysinv_v1 import SysinvClient from dccommon.drivers.openstack.sysinv_v1 import SysinvClient
from dcmanager.common import utils
LOG = logging.getLogger(__name__) 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)""" """Construct a (cached) keystone client (and token)"""
try: try:
os_client = OpenStackDriver(region_name=region_name, os_client = OpenStackDriver(
region_clients=['sysinv']) region_name=region_name,
region_clients=["sysinv"],
fetch_subcloud_ips=utils.fetch_subcloud_mgmt_ips,
)
return os_client.keystone_client return os_client.keystone_client
except Exception: except Exception:
LOG.warning('Failure initializing KeystoneClient for region: %s' LOG.warning('Failure initializing KeystoneClient for region: %s'

View File

@@ -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 # 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 import consts as dccommon_consts
from dccommon.drivers.openstack.patching_v1 import PatchingClient 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 dccommon.drivers.openstack.sysinv_v1 import SysinvClient
from dcmanager.common import utils
LOG = logging.getLogger(__name__) 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)""" """Construct a (cached) keystone client (and token)"""
try: try:
os_client = OpenStackDriver(region_name=region_name, os_client = OpenStackDriver(
region_clients=['sysinv']) region_name=region_name,
region_clients=["sysinv"],
fetch_subcloud_ips=utils.fetch_subcloud_mgmt_ips,
)
return os_client.keystone_client return os_client.keystone_client
except Exception: except Exception:
LOG.warning('Failure initializing KeystoneClient for region: %s' LOG.warning('Failure initializing KeystoneClient for region: %s'

View File

@@ -2353,6 +2353,12 @@ class TestSubcloudsPatchPrestage(BaseTestSubcloudsPatch):
def test_patch_prestage_fails_with_invalid_release(self): def test_patch_prestage_fails_with_invalid_release(self):
"""Test patch prestage fails with invalid release""" """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.params["release"] = "21.12"
self.mock_sysinv_client().get_loads.return_values = FakeLoad( self.mock_sysinv_client().get_loads.return_values = FakeLoad(