Merge "Revert "Add the --upload-only option to dcmanager upgrade_strategy""

This commit is contained in:
Zuul 2024-02-07 13:18:52 +00:00 committed by Gerrit Code Review
commit aa1aab7962
4 changed files with 11 additions and 56 deletions

View File

@ -4,8 +4,6 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
# #
from dcmanager.common import consts from dcmanager.common import consts
from dcmanager.common import context
from dcmanager.common import utils
from dcmanager.orchestrator.states.software.cache import clients from dcmanager.orchestrator.states.software.cache import clients
from dcmanager.orchestrator.states.software.cache.clients import \ from dcmanager.orchestrator.states.software.cache.clients import \
CLIENT_READ_EXCEPTIONS CLIENT_READ_EXCEPTIONS
@ -50,7 +48,6 @@ class CacheSpecification(object):
REGION_ONE_LICENSE_CACHE_TYPE = 'RegionOne system license' REGION_ONE_LICENSE_CACHE_TYPE = 'RegionOne system license'
REGION_ONE_SYSTEM_INFO_CACHE_TYPE = 'RegionOne system info' REGION_ONE_SYSTEM_INFO_CACHE_TYPE = 'RegionOne system info'
REGION_ONE_RELEASE_USM_CACHE_TYPE = 'RegionOne release usm' REGION_ONE_RELEASE_USM_CACHE_TYPE = 'RegionOne release usm'
STRATEGY_EXTRA_ARGS_CACHE_TYPE = 'Strategy extra args'
"""Cache specifications""" """Cache specifications"""
@ -71,26 +68,18 @@ REGION_ONE_RELEASE_USM_CACHE_SPECIFICATION = CacheSpecification(
{'state'} {'state'}
) )
STRATEGY_EXTRA_ARGS_CACHE_SPECIFICATION = CacheSpecification(
lambda: utils.get_sw_update_strategy_extra_args(context.get_admin_context()).get(
consts.EXTRA_ARGS_UPLOAD_ONLY
)
)
# Map each expected operation type to its required cache types # Map each expected operation type to its required cache types
CACHE_TYPES_BY_OPERATION_TYPE = { CACHE_TYPES_BY_OPERATION_TYPE = {
consts.SW_UPDATE_TYPE_SOFTWARE: {REGION_ONE_LICENSE_CACHE_TYPE, consts.SW_UPDATE_TYPE_SOFTWARE: {REGION_ONE_LICENSE_CACHE_TYPE,
REGION_ONE_SYSTEM_INFO_CACHE_TYPE, REGION_ONE_SYSTEM_INFO_CACHE_TYPE,
REGION_ONE_RELEASE_USM_CACHE_TYPE, REGION_ONE_RELEASE_USM_CACHE_TYPE}
STRATEGY_EXTRA_ARGS_CACHE_TYPE}
} }
# Map each cache type to its corresponding cache specification # Map each cache type to its corresponding cache specification
SPECIFICATION_BY_CACHE_TYPE = { SPECIFICATION_BY_CACHE_TYPE = {
REGION_ONE_LICENSE_CACHE_TYPE: REGION_ONE_LICENSE_CACHE_SPECIFICATION, REGION_ONE_LICENSE_CACHE_TYPE: REGION_ONE_LICENSE_CACHE_SPECIFICATION,
REGION_ONE_SYSTEM_INFO_CACHE_TYPE: REGION_ONE_SYSTEM_INFO_CACHE_SPECIFICATION, REGION_ONE_SYSTEM_INFO_CACHE_TYPE: REGION_ONE_SYSTEM_INFO_CACHE_SPECIFICATION,
REGION_ONE_RELEASE_USM_CACHE_TYPE: REGION_ONE_RELEASE_USM_CACHE_SPECIFICATION, REGION_ONE_RELEASE_USM_CACHE_TYPE: REGION_ONE_RELEASE_USM_CACHE_SPECIFICATION
STRATEGY_EXTRA_ARGS_CACHE_TYPE: STRATEGY_EXTRA_ARGS_CACHE_SPECIFICATION
} }

View File

@ -14,8 +14,6 @@ from dcmanager.common import utils
from dcmanager.orchestrator.states.base import BaseState from dcmanager.orchestrator.states.base import BaseState
from dcmanager.orchestrator.states.software.cache.cache_specifications import \ from dcmanager.orchestrator.states.software.cache.cache_specifications import \
REGION_ONE_RELEASE_USM_CACHE_TYPE REGION_ONE_RELEASE_USM_CACHE_TYPE
from dcmanager.orchestrator.states.software.cache.cache_specifications import \
STRATEGY_EXTRA_ARGS_CACHE_TYPE
# Max time: 30 minutes = 180 queries x 10 seconds between # Max time: 30 minutes = 180 queries x 10 seconds between
DEFAULT_MAX_QUERIES = 180 DEFAULT_MAX_QUERIES = 180
@ -45,6 +43,7 @@ class UploadState(BaseState):
def perform_state_action(self, strategy_step): def perform_state_action(self, strategy_step):
"""Upload releases in this subcloud""" """Upload releases in this subcloud"""
self.info_log(strategy_step, "Uploading releases") self.info_log(strategy_step, "Uploading releases")
regionone_releases = self._read_from_cache(REGION_ONE_RELEASE_USM_CACHE_TYPE) regionone_releases = self._read_from_cache(REGION_ONE_RELEASE_USM_CACHE_TYPE)
applied_releases_ids = list() applied_releases_ids = list()
for release_id in regionone_releases: for release_id in regionone_releases:
@ -53,8 +52,6 @@ class UploadState(BaseState):
software_v1.COMMITTED]: software_v1.COMMITTED]:
applied_releases_ids.append(release_id) applied_releases_ids.append(release_id)
upload_only = self._read_from_cache(STRATEGY_EXTRA_ARGS_CACHE_TYPE)
# Retrieve all subcloud releases # Retrieve all subcloud releases
try: try:
subcloud_releases = self.get_software_client( subcloud_releases = self.get_software_client(
@ -155,14 +152,4 @@ class UploadState(BaseState):
self.error_log(strategy_step, message) self.error_log(strategy_step, message)
raise Exception(message) raise Exception(message)
if upload_only:
self.info_log(
strategy_step,
(
f"{consts.EXTRA_ARGS_UPLOAD_ONLY} option enabled, skipping"
f" forward to state:({consts.STRATEGY_STATE_COMPLETE})"
)
)
return consts.STRATEGY_STATE_COMPLETE
return self.next_state return self.next_state

View File

@ -450,8 +450,7 @@ class SwUpdateManager(manager.Manager):
consts.PRESTAGE_SOFTWARE_VERSION: consts.PRESTAGE_SOFTWARE_VERSION:
software_version if software_version else SW_VERSION software_version if software_version else SW_VERSION
} }
elif (strategy_type == consts.SW_UPDATE_TYPE_PATCH or elif strategy_type == consts.SW_UPDATE_TYPE_PATCH:
strategy_type == consts.SW_UPDATE_TYPE_UPGRADE):
upload_only_str = payload.get(consts.EXTRA_ARGS_UPLOAD_ONLY) upload_only_str = payload.get(consts.EXTRA_ARGS_UPLOAD_ONLY)
upload_only_bool = True if upload_only_str == 'true' else False upload_only_bool = True if upload_only_str == 'true' else False
extra_args = {consts.EXTRA_ARGS_UPLOAD_ONLY: upload_only_bool} extra_args = {consts.EXTRA_ARGS_UPLOAD_ONLY: upload_only_bool}

View File

@ -74,8 +74,9 @@ class TestUploadState(TestSoftwareOrchestrator):
def test_software_upload_strategy_success(self, mock_is_file, def test_software_upload_strategy_success(self, mock_is_file,
mock_read_from_cache): mock_read_from_cache):
"""Test software upload when the API call succeeds.""" """Test software upload when the API call succeeds."""
mock_read_from_cache.side_effect = [REGION_ONE_RELEASES, False] mock_read_from_cache.return_value = REGION_ONE_RELEASES
mock_is_file.return_value = True mock_is_file.return_value = True
self.software_client.query.side_effect = [SUBCLOUD_RELEASES] self.software_client.query.side_effect = [SUBCLOUD_RELEASES]
# invoke the strategy state operation on the orch thread # invoke the strategy state operation on the orch thread
@ -90,32 +91,11 @@ class TestUploadState(TestSoftwareOrchestrator):
self.assert_step_updated(self.strategy_step.subcloud_id, self.assert_step_updated(self.strategy_step.subcloud_id,
self.on_success_state) self.on_success_state)
@mock.patch.object(UploadState, '_read_from_cache')
@mock.patch.object(os.path, 'isfile')
def test_software_upload_strategy_upload_only(self, mock_is_file,
mock_read_from_cache):
"""Test software upload when the API call succeeds."""
mock_read_from_cache.side_effect = [REGION_ONE_RELEASES, True]
mock_is_file.return_value = True
self.software_client.query.side_effect = [SUBCLOUD_RELEASES]
# invoke the strategy state operation on the orch thread
self.worker.perform_state_action(self.strategy_step)
self.software_client.upload.assert_called_once_with([
consts.RELEASE_VAULT_DIR + '/20.12/DC_20.12.3.patch',
consts.RELEASE_VAULT_DIR + '/20.12/DC_20.12.4.patch'
])
# On success, the state should transition to the next state
self.assert_step_updated(self.strategy_step.subcloud_id,
consts.SW_UPDATE_STATE_COMPLETE)
@mock.patch.object(UploadState, '_read_from_cache') @mock.patch.object(UploadState, '_read_from_cache')
def test_software_upload_strategy_no_operation_required(self, def test_software_upload_strategy_no_operation_required(self,
mock_read_from_cache): mock_read_from_cache):
"""Test software upload when no software operation is required.""" """Test software upload when no software operation is required."""
mock_read_from_cache.side_effect = [REGION_ONE_RELEASES, False] mock_read_from_cache.return_value = REGION_ONE_RELEASES
self.software_client.query.side_effect = [REGION_ONE_RELEASES] self.software_client.query.side_effect = [REGION_ONE_RELEASES]
@ -133,7 +113,7 @@ class TestUploadState(TestSoftwareOrchestrator):
def test_software_upload_strategy_missing_sig(self, mock_is_dir, mock_listdir, def test_software_upload_strategy_missing_sig(self, mock_is_dir, mock_listdir,
mock_read_from_cache): mock_read_from_cache):
"""Test software upload when release is missing signature""" """Test software upload when release is missing signature"""
mock_read_from_cache.side_effect = [REGION_ONE_RELEASES_2, False] mock_read_from_cache.return_value = REGION_ONE_RELEASES_2
mock_is_dir.return_value = True mock_is_dir.return_value = True
mock_listdir.return_value = ["DC_22.12.0.iso"] mock_listdir.return_value = ["DC_22.12.0.iso"]
self.software_client.query.side_effect = [SUBCLOUD_RELEASES] self.software_client.query.side_effect = [SUBCLOUD_RELEASES]
@ -153,7 +133,7 @@ class TestUploadState(TestSoftwareOrchestrator):
def test_software_upload_strategy_success_load(self, mock_is_dir, mock_listdir, def test_software_upload_strategy_success_load(self, mock_is_dir, mock_listdir,
mock_read_from_cache): mock_read_from_cache):
"""Test software upload when the API call succeeds.""" """Test software upload when the API call succeeds."""
mock_read_from_cache.side_effect = [REGION_ONE_RELEASES_2, False] mock_read_from_cache.return_value = REGION_ONE_RELEASES_2
mock_is_dir.return_value = True mock_is_dir.return_value = True
mock_listdir.return_value = ["DC_22.12.0.iso", "DC_22.12.0.sig"] mock_listdir.return_value = ["DC_22.12.0.iso", "DC_22.12.0.sig"]
self.software_client.query.side_effect = [ self.software_client.query.side_effect = [
@ -179,7 +159,7 @@ class TestUploadState(TestSoftwareOrchestrator):
mock_is_dir, mock_listdir, mock_is_dir, mock_listdir,
mock_read_from_cache): mock_read_from_cache):
"""Test software upload when release is a prepatched iso.""" """Test software upload when release is a prepatched iso."""
mock_read_from_cache.side_effect = [REGION_ONE_RELEASES_3, False] mock_read_from_cache.return_value = REGION_ONE_RELEASES_3
mock_is_dir.return_value = True mock_is_dir.return_value = True
mock_isfile.return_value = False mock_isfile.return_value = False
mock_listdir.return_value = ["DC_22.12.0.iso", "DC_22.12.0.sig"] mock_listdir.return_value = ["DC_22.12.0.iso", "DC_22.12.0.sig"]
@ -205,7 +185,7 @@ class TestUploadState(TestSoftwareOrchestrator):
mock_is_dir, mock_listdir, mock_is_dir, mock_listdir,
mock_read_from_cache): mock_read_from_cache):
"""Test software upload when both patch and load is uploaded.""" """Test software upload when both patch and load is uploaded."""
mock_read_from_cache.side_effect = [REGION_ONE_RELEASES_3, False] mock_read_from_cache.return_value = REGION_ONE_RELEASES_3
mock_is_dir.return_value = True mock_is_dir.return_value = True
mock_isfile.return_value = True mock_isfile.return_value = True
mock_listdir.return_value = ["DC_22.12.0.iso", "DC_22.12.0.sig"] mock_listdir.return_value = ["DC_22.12.0.iso", "DC_22.12.0.sig"]