Fix subcloud show --detail command related issues

If the subcloud is offline, the command stalls and eventually returns
the "ERROR (app)" output. If the subcloud is online, the oam_floating_ip
info is excluded from the output when the subcloud id instead of subcloud
name is specified.

This commit fixes both of the above issues.

Closes-Bug: 1929893
Change-Id: I995591368564539b0e6af185b1adba2db73e0e46
Signed-off-by: Tee Ngo <tee.ngo@windriver.com>
This commit is contained in:
Tee Ngo
2021-05-27 22:17:16 -04:00
parent d7986567d0
commit bb604c0a9b
2 changed files with 28 additions and 11 deletions

View File

@@ -784,12 +784,13 @@ class SubcloudsController(object):
subcloud_dict.update(endpoint_sync_dict)
if detail is not None:
oam_addresses = self._get_oam_addresses(context,
subcloud_ref)
if oam_addresses is not None:
oam_floating_ip = oam_addresses.oam_floating_ip
else:
oam_floating_ip = "unavailable"
oam_floating_ip = "unavailable"
if subcloud.availability_status == consts.AVAILABILITY_ONLINE:
oam_addresses = self._get_oam_addresses(context,
subcloud.name)
if oam_addresses is not None:
oam_floating_ip = oam_addresses.oam_floating_ip
floating_ip_dict = {"oam_floating_ip":
oam_floating_ip}
subcloud_dict.update(floating_ip_dict)

View File

@@ -784,11 +784,14 @@ class TestSubcloudAPIOther(testroot.DCManagerApiTest):
@mock.patch.object(subclouds.SubcloudsController,
'_get_oam_addresses')
@mock.patch.object(rpc_client, 'ManagerClient')
def test_get_subcloud_with_additional_detail(self,
mock_rpc_client,
mock_get_oam_addresses):
def test_get_online_subcloud_with_additional_detail(self,
mock_rpc_client,
mock_get_oam_addresses):
subcloud = fake_subcloud.create_fake_subcloud(self.ctx)
get_url = FAKE_URL + '/' + str(subcloud.id) + '/detail'
updated_subcloud = db_api.subcloud_update(
self.ctx, subcloud.id, availability_status=consts.AVAILABILITY_ONLINE)
get_url = FAKE_URL + '/' + str(updated_subcloud.id) + '/detail'
oam_addresses = FakeOAMAddressPool('10.10.10.254',
'10.10.10.1',
'10.10.10.254',
@@ -802,6 +805,16 @@ class TestSubcloudAPIOther(testroot.DCManagerApiTest):
self.assertEqual(response.status_code, http_client.OK)
self.assertEqual('10.10.10.2', response.json['oam_floating_ip'])
@mock.patch.object(rpc_client, 'ManagerClient')
def test_get_offline_subcloud_with_additional_detail(self,
mock_rpc_client):
subcloud = fake_subcloud.create_fake_subcloud(self.ctx)
get_url = FAKE_URL + '/' + str(subcloud.id) + '/detail'
response = self.app.get(get_url, headers=FAKE_HEADERS)
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.status_code, http_client.OK)
self.assertEqual('unavailable', response.json['oam_floating_ip'])
@mock.patch.object(subclouds.SubcloudsController,
'_get_oam_addresses')
@mock.patch.object(rpc_client, 'ManagerClient')
@@ -809,7 +822,10 @@ class TestSubcloudAPIOther(testroot.DCManagerApiTest):
mock_rpc_client,
mock_get_oam_addresses):
subcloud = fake_subcloud.create_fake_subcloud(self.ctx)
get_url = FAKE_URL + '/' + str(subcloud.id) + '/detail'
updated_subcloud = db_api.subcloud_update(
self.ctx, subcloud.id, availability_status=consts.AVAILABILITY_ONLINE)
get_url = FAKE_URL + '/' + str(updated_subcloud.id) + '/detail'
mock_get_oam_addresses.return_value = None
response = self.app.get(get_url, headers=FAKE_HEADERS)
self.assertEqual(response.content_type, 'application/json')