Output an informative message After running out-of-sync operations
Add a minor enhancement to GEO-redundancy. Output an informative message after running below out-of-sync operations, informing the operator that a sync command should be executed. Adding subcloud(s) to the SPG. Removing subcloud(s) from the SPG. Updating subcloud(s) in the SPG. Updating SPG Test plan: Pre-Steps: 1. Create the system peer group from Site A to Site B 2. Create System peer from Site B to Site A 3. Create the subcloud peer group in the Site A 4. Add subcloud(s) to the peer group 5. Create peer group association to associate system peer and subcloud peer group - Site A 6. Check current sync status on Sites A and B. Verify they are 'in-sync'. PASS: Verify that the corresponding informative message is printed out after running below out-of-sync operations: 1. Adding subcloud to the SPG. 2. Removing subcloud from the SPG. 3. Updating subcloud in the SPG, for example, renaming, bootstrap address, bootstrap values or install values. 4. Updating SPG fields: max_subcloud_rehoming, group_state PASS: Verify that informative message is not printed when running any operation on the sublcoud which does not belong to a SPG. PASS: Verify that informative message is printed when updating these fields of a subcloud in SPG: location, description and group. Closes-Bug: 2054124 Change-Id: I1614a719190b2645eb8139b158b0bab257d0f91d Signed-off-by: lzhu1 <li.zhu@windriver.com>
This commit is contained in:
parent
83f76109a7
commit
7de69af969
|
@ -55,7 +55,8 @@ class Subcloud(Resource):
|
|||
'prestage-software-version': 'prestage_software_version',
|
||||
'prestage-status': 'prestage_status',
|
||||
'prestage-versions': 'prestage_versions',
|
||||
'region-name': 'region_name'
|
||||
'region-name': 'region_name',
|
||||
'info_message': 'info_message'
|
||||
}
|
||||
|
||||
def __init__(self, manager, subcloud_id, name, description, location,
|
||||
|
@ -67,7 +68,8 @@ class Subcloud(Resource):
|
|||
backup_status=None, backup_datetime=None,
|
||||
error_description=None, prestage_software_version=None,
|
||||
peer_group_id=None, rehome_data=None, region_name=None,
|
||||
prestage_status=None, prestage_versions=None):
|
||||
prestage_status=None, prestage_versions=None,
|
||||
info_message=None):
|
||||
if endpoint_sync_status is None:
|
||||
endpoint_sync_status = {}
|
||||
self.manager = manager
|
||||
|
@ -100,6 +102,7 @@ class Subcloud(Resource):
|
|||
self.region_name = region_name
|
||||
self.prestage_status = prestage_status
|
||||
self.prestage_versions = prestage_versions
|
||||
self.info_message = info_message
|
||||
|
||||
@classmethod
|
||||
def from_payload(cls, manager, payload):
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2023 Wind River Systems, Inc.
|
||||
# Copyright (c) 2023, 2024 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
@ -24,7 +24,8 @@ class SubcloudPeerGroup(base.Resource):
|
|||
system_leader_name,
|
||||
max_subcloud_rehoming,
|
||||
created_at,
|
||||
updated_at):
|
||||
updated_at,
|
||||
info_message):
|
||||
self.manager = manager
|
||||
self.id = peer_group_id
|
||||
self.peer_group_name = peer_group_name
|
||||
|
@ -36,6 +37,7 @@ class SubcloudPeerGroup(base.Resource):
|
|||
self.max_subcloud_rehoming = max_subcloud_rehoming
|
||||
self.created_at = created_at
|
||||
self.updated_at = updated_at
|
||||
self.info_message = info_message
|
||||
|
||||
|
||||
class subcloud_peer_group_manager(base.ResourceManager):
|
||||
|
@ -56,7 +58,8 @@ class subcloud_peer_group_manager(base.ResourceManager):
|
|||
system_leader_name=json_object['system_leader_name'],
|
||||
max_subcloud_rehoming=json_object['max_subcloud_rehoming'],
|
||||
created_at=json_object['created-at'],
|
||||
updated_at=json_object['updated-at'])
|
||||
updated_at=json_object['updated-at'],
|
||||
info_message=json_object.get('info_message'))
|
||||
|
||||
def _subcloud_peer_group_detail(self, url):
|
||||
resp = self.http_client.get(url)
|
||||
|
|
|
@ -26,7 +26,8 @@ from dcmanagerclient import utils
|
|||
|
||||
|
||||
SET_FIELD_VALUE_DICT = {
|
||||
"region_name": None
|
||||
"region_name": None,
|
||||
"info_message": None
|
||||
}
|
||||
|
||||
|
||||
|
@ -549,6 +550,27 @@ class ManageSubcloud(base.DCManagerShowOne):
|
|||
|
||||
class UpdateSubcloud(base.DCManagerShowOne):
|
||||
"""Update attributes of a subcloud."""
|
||||
_info_message = None
|
||||
|
||||
@property
|
||||
def info_message(self):
|
||||
return self._info_message
|
||||
|
||||
@info_message.setter
|
||||
def info_message(self, value):
|
||||
self._info_message = value
|
||||
|
||||
def produce_output(self, parsed_args, column_names, data):
|
||||
"""Overrides method from cliff.Lister/cliff.ShowOne."""
|
||||
|
||||
# Print out a note or informational message above the formatted
|
||||
# response.
|
||||
if self._info_message:
|
||||
self.app.stdout.write(
|
||||
(self._info_message + '') if self._info_message.endswith('\n')
|
||||
else '\n')
|
||||
|
||||
return super().produce_output(parsed_args, column_names, data)
|
||||
|
||||
def _get_format_function(self):
|
||||
return detail_format
|
||||
|
@ -739,6 +761,7 @@ class UpdateSubcloud(base.DCManagerShowOne):
|
|||
try:
|
||||
result = dcmanager_client.subcloud_manager.update_subcloud(
|
||||
subcloud_ref, files=files, data=data)
|
||||
self._info_message = getattr(result[0], 'info_message')
|
||||
update_fields_values(result)
|
||||
return result
|
||||
except Exception as e:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2023 Wind River Systems, Inc.
|
||||
# Copyright (c) 2023, 2024 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
@ -227,6 +227,27 @@ class ListSubcloudPeerGroupSubclouds(base.DCManagerLister):
|
|||
|
||||
class UpdateSubcloudPeerGroup(base.DCManagerShowOne):
|
||||
"""Update attributes of a subcloud peer group."""
|
||||
_info_message = None
|
||||
|
||||
@property
|
||||
def info_message(self):
|
||||
return self._info_message
|
||||
|
||||
@info_message.setter
|
||||
def info_message(self, value):
|
||||
self._info_message = value
|
||||
|
||||
def produce_output(self, parsed_args, column_names, data):
|
||||
"""Overrides method from cliff.Lister/cliff.ShowOne."""
|
||||
|
||||
# Print out a note or informational message above the formatted
|
||||
# response.
|
||||
if self._info_message:
|
||||
self.app.stdout.write(
|
||||
(self._info_message + '') if self._info_message.endswith('\n')
|
||||
else '\n')
|
||||
|
||||
return super().produce_output(parsed_args, column_names, data)
|
||||
|
||||
def _get_format_function(self):
|
||||
return group_format
|
||||
|
@ -280,9 +301,11 @@ class UpdateSubcloudPeerGroup(base.DCManagerShowOne):
|
|||
raise exceptions.DCManagerClientException(error_msg)
|
||||
|
||||
try:
|
||||
return dcmanager_client. \
|
||||
result = dcmanager_client. \
|
||||
subcloud_peer_group_manager.update_subcloud_peer_group(
|
||||
subcloud_peer_group_ref, **kwargs)
|
||||
self._info_message = getattr(result[0], 'info_message')
|
||||
return result
|
||||
except Exception as e:
|
||||
print(e)
|
||||
msg = "Unable to update subcloud peer group %s" % (
|
||||
|
|
|
@ -34,7 +34,8 @@ SubcloudPeerGroup = Peergroup(
|
|||
PG_SYSTEM_LEADER_NAME,
|
||||
PG_MAX_SUBCLOUD_REHOMING,
|
||||
PG_CREATED_AT,
|
||||
PG_UPDATED_AT
|
||||
PG_UPDATED_AT,
|
||||
None
|
||||
)
|
||||
|
||||
PG_TUPLE = (PG_ID,
|
||||
|
|
|
@ -94,7 +94,8 @@ PEER_GROUP = Peergroup(
|
|||
PG_SYSTEM_LEADER_NAME,
|
||||
PG_MAX_SUBCLOUD_REHOMING,
|
||||
PG_CREATED_AT,
|
||||
PG_UPDATED_AT
|
||||
PG_UPDATED_AT,
|
||||
None
|
||||
)
|
||||
PG_TUPLE = (PG_ID,
|
||||
PG_NAME,
|
||||
|
|
Loading…
Reference in New Issue