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 an SPG.
PASS: Verify that informative message is not printed when updating these
      fields of a subcloud in SPG: location, description and group.
PASS: Verify that an informative message is not printed when updating
      these fields of a subcloud in an SPG: location, description,
      and group.

Closes-Bug: 2054124

Change-Id: I1614a719190b2645eb8139b158b0bab257d0f91d
Signed-off-by: lzhu1 <li.zhu@windriver.com>
This commit is contained in:
Li Zhu 2024-02-16 19:18:31 -05:00
parent 83f76109a7
commit e3c67f3d6d
6 changed files with 64 additions and 10 deletions

View File

@ -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):

View File

@ -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)

View File

@ -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:

View File

@ -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" % (

View File

@ -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,

View File

@ -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,