Fix subcloud fields update
This commit addresses the issue encountered when updating the subcloud fields directly with a file [1]. This caused issues because the file would be closed, making the content inaccessible. Now, we create a variable containing the content and update the fields using only this content. An intermittent error [2] was fixed on test_prestage_with_subcloud_id test. [1]: https://review.opendev.org/c/starlingx/distcloud-client/+/909454 [2]: https://review.opendev.org/c/starlingx/distcloud-client/+/909975 Test Plan: PASS: Create a subcloud PASS: Update a subcloud PASS: Create a subcloud backup PASS: Subcloud deploy create PASS: Subcloud deploy upload Closes-bug: 2055446 Change-Id: Ib8b831353dba9d073131eb1c12ccd57513c63e7f Signed-off-by: Hugo Brito <hugo.brito@windriver.com>
This commit is contained in:
parent
a507c6449d
commit
92597a3d23
|
@ -28,7 +28,8 @@ class phased_subcloud_deploy_manager(base.ResourceManager):
|
|||
fields = {}
|
||||
for k, v in body.items():
|
||||
with open(v, "rb") as file:
|
||||
fields.update({k: (v, file)})
|
||||
file_content = file.read()
|
||||
fields.update({k: (v, file_content)})
|
||||
fields.update(data)
|
||||
enc = MultipartEncoder(fields=fields)
|
||||
headers = {"content-type": enc.content_type}
|
||||
|
|
|
@ -24,7 +24,8 @@ class subcloud_backup_manager(base.ResourceManager):
|
|||
if files:
|
||||
for k, v in files.items():
|
||||
with open(v, "rb") as file:
|
||||
fields.update({k: (v, file)})
|
||||
file_content = file.read()
|
||||
fields.update({k: (v, file_content)})
|
||||
fields.update(data)
|
||||
enc = MultipartEncoder(fields=fields)
|
||||
headers = {"content-type": enc.content_type}
|
||||
|
@ -57,7 +58,8 @@ class subcloud_backup_manager(base.ResourceManager):
|
|||
if files:
|
||||
for k, v in files.items():
|
||||
with open(v, "rb") as file:
|
||||
fields.update({k: (v, file)})
|
||||
file_content = file.read()
|
||||
fields.update({k: (v, file_content)})
|
||||
fields.update(data)
|
||||
enc = MultipartEncoder(fields=fields)
|
||||
headers = {"content-type": enc.content_type}
|
||||
|
|
|
@ -74,7 +74,8 @@ class subcloud_deploy_manager(base.ResourceManager):
|
|||
fields = {}
|
||||
for k, v in files.items():
|
||||
with open(v, "rb") as file:
|
||||
fields.update({k: (v, file)})
|
||||
file_content = file.read()
|
||||
fields.update({k: (v, file_content)})
|
||||
fields.update(data)
|
||||
enc = MultipartEncoder(fields=fields)
|
||||
headers = {"content-type": enc.content_type}
|
||||
|
|
|
@ -33,7 +33,8 @@ class subcloud_manager(base.ResourceManager):
|
|||
fields = {}
|
||||
for k, v in body.items():
|
||||
with open(v, "rb") as file:
|
||||
fields.update({k: (v, file)})
|
||||
file_content = file.read()
|
||||
fields.update({k: (v, file_content)})
|
||||
fields.update(data)
|
||||
enc = MultipartEncoder(fields=fields)
|
||||
headers = {"content-type": enc.content_type}
|
||||
|
@ -50,7 +51,8 @@ class subcloud_manager(base.ResourceManager):
|
|||
if body:
|
||||
for k, v in body.items():
|
||||
with open(v, "rb") as file:
|
||||
fields.update({k: (v, file)})
|
||||
file_content = file.read()
|
||||
fields.update({k: (v, file_content)})
|
||||
fields.update(data)
|
||||
enc = MultipartEncoder(fields=fields)
|
||||
headers = {"content-type": enc.content_type}
|
||||
|
@ -66,7 +68,8 @@ class subcloud_manager(base.ResourceManager):
|
|||
fields = {}
|
||||
for k, v in body.items():
|
||||
with open(v, "rb") as file:
|
||||
fields.update({k: (v, file)})
|
||||
file_content = file.read()
|
||||
fields.update({k: (v, file_content)})
|
||||
fields.update(data)
|
||||
enc = MultipartEncoder(fields=fields)
|
||||
headers = {"content-type": enc.content_type}
|
||||
|
|
|
@ -28,9 +28,13 @@ from dcmanagerclient.tests import base
|
|||
|
||||
class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.subcloud_resource = copy.copy(base.SUBCLOUD_RESOURCE)
|
||||
|
||||
def test_list_subclouds(self):
|
||||
self.client.subcloud_manager.list_subclouds.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
actual_call = self.call(subcloud_cmd.ListSubcloud)
|
||||
self.assertEqual([base.SUBCLOUD_LIST_RESULT], actual_call[1])
|
||||
|
@ -83,7 +87,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
|
||||
def test_show_subcloud_with_subcloud_id(self):
|
||||
self.client.subcloud_manager.subcloud_detail.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
actual_call = self.call(subcloud_cmd.ShowSubcloud, app_args=[base.ID])
|
||||
|
||||
|
@ -93,7 +97,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
)
|
||||
|
||||
def test_show_subcloud_with_additional_detail(self):
|
||||
subcloud_with_additional_detail = copy.copy(base.SUBCLOUD_RESOURCE)
|
||||
subcloud_with_additional_detail = self.subcloud_resource
|
||||
subcloud_with_additional_detail.oam_floating_ip = (
|
||||
base.EXTERNAL_OAM_FLOATING_ADDRESS
|
||||
)
|
||||
|
@ -127,7 +131,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
@mock.patch("getpass.getpass", return_value="testpassword")
|
||||
def test_add_subcloud(self, _mock_getpass):
|
||||
self.client.subcloud_manager.add_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
|
||||
with tempfile.NamedTemporaryFile(mode="w") as f:
|
||||
|
@ -165,7 +169,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
@mock.patch("getpass.getpass", return_value="testpassword")
|
||||
def test_add_migrate_subcloud(self, _mock_getpass):
|
||||
self.client.subcloud_manager.add_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
|
||||
with tempfile.NamedTemporaryFile(mode="w") as f:
|
||||
|
@ -186,7 +190,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
@mock.patch("getpass.getpass", return_value="testpassword")
|
||||
def test_add_migrate_subcloud_with_deploy_config(self, _mock_getpass):
|
||||
self.client.subcloud_manager.add_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
|
||||
with tempfile.NamedTemporaryFile(mode="w") as f_bootstrap:
|
||||
|
@ -264,10 +268,10 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
self.assertEqual(tuple(results_by_name), actual_call2[1])
|
||||
|
||||
def test_update_fields_values(self):
|
||||
subcloud_with_region_detail = copy.copy(base.SUBCLOUD_RESOURCE)
|
||||
subcloud_with_region_detail = copy.copy(self.subcloud_resource)
|
||||
subcloud_with_region_detail.region_name = base.REGION_NAME
|
||||
|
||||
subcloud_with_region_none = copy.copy(base.SUBCLOUD_RESOURCE)
|
||||
subcloud_with_region_none = copy.copy(self.subcloud_resource)
|
||||
subcloud_with_region_none.region_name = None
|
||||
|
||||
subcloud_cmd.update_fields_values([subcloud_with_region_detail])
|
||||
|
@ -279,14 +283,14 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
|
||||
def test_unmanage_subcloud(self):
|
||||
self.client.subcloud_manager.update_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
actual_call = self.call(subcloud_cmd.UnmanageSubcloud, app_args=[base.ID])
|
||||
self.assertEqual(base.SUBCLOUD_FIELD_RESULT_LIST_WITH_PEERID, actual_call[1])
|
||||
|
||||
def test_unmanage_subcloud_with_migrate(self):
|
||||
self.client.subcloud_manager.update_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
actual_call = self.call(
|
||||
subcloud_cmd.UnmanageSubcloud, app_args=[base.ID, "--migrate"]
|
||||
|
@ -300,7 +304,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
|
||||
def test_manage_subcloud(self):
|
||||
self.client.subcloud_manager.update_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
actual_call = self.call(subcloud_cmd.ManageSubcloud, app_args=[base.ID])
|
||||
self.assertEqual(base.SUBCLOUD_FIELD_RESULT_LIST_WITH_PEERID, actual_call[1])
|
||||
|
@ -312,7 +316,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
|
||||
def test_update_subcloud(self):
|
||||
self.client.subcloud_manager.update_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
with tempfile.NamedTemporaryFile(mode="w") as f_bootstrap:
|
||||
bootstrap_file_path = os.path.abspath(f_bootstrap.name)
|
||||
|
@ -348,7 +352,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
@mock.patch("six.moves.input", return_value="redeploy")
|
||||
def test_redeploy_subcloud(self, _mock_input, _mock_getpass):
|
||||
self.client.subcloud_manager.redeploy_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
|
||||
with tempfile.NamedTemporaryFile(
|
||||
|
@ -383,7 +387,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
@mock.patch("six.moves.input", return_value="redeploy")
|
||||
def test_redeploy_subcloud_no_parameters(self, _mock_input, _mock_getpass):
|
||||
self.client.subcloud_manager.redeploy_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
actual_call = self.call(subcloud_cmd.RedeploySubcloud, app_args=[base.ID])
|
||||
self.assertEqual(base.SUBCLOUD_FIELD_RESULT_LIST_WITH_PEERID, actual_call[1])
|
||||
|
@ -394,7 +398,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
self, _mock_input, _mock_getpass
|
||||
):
|
||||
self.client.subcloud_manager.redeploy_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
with tempfile.NamedTemporaryFile(
|
||||
mode="w"
|
||||
|
@ -445,7 +449,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
|
||||
def test_prestage_with_subcloud_id(self):
|
||||
self.client.subcloud_manager.prestage_subcloud.return_value = [
|
||||
base.SUBCLOUD_RESOURCE
|
||||
self.subcloud_resource
|
||||
]
|
||||
actual_call_without_release = self.call(
|
||||
subcloud_cmd.PrestageSubcloud,
|
||||
|
@ -462,7 +466,7 @@ class TestCLISubcloudManagerV1(base.BaseCommandTest):
|
|||
)
|
||||
|
||||
def test_prestage_with_release(self):
|
||||
subcloud_with_additional_detail = copy.copy(base.SUBCLOUD_RESOURCE)
|
||||
subcloud_with_additional_detail = self.subcloud_resource
|
||||
subcloud_with_additional_detail.prestage_software_version = (
|
||||
base.SOFTWARE_VERSION
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue