From 5fffb17dc947cadf36cc9b6c7f461bdf18a115aa Mon Sep 17 00:00:00 2001 From: Ivan Kolodyazhny Date: Mon, 26 Oct 2020 12:03:41 +0200 Subject: [PATCH] Fix replication creation We should not provide flavor, volume and datastore data during instance creation for replica. Change-Id: I32bed10df5d334822a24ba44f70d8727d607e4d4 --- trove_dashboard/api/trove.py | 11 +++++++++-- trove_dashboard/content/databases/tests.py | 2 +- .../content/databases/workflows/create_instance.py | 3 ++- trove_dashboard/test/test_data/trove_data.py | 6 +++--- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/trove_dashboard/api/trove.py b/trove_dashboard/api/trove.py index a11d3074..880029e0 100644 --- a/trove_dashboard/api/trove.py +++ b/trove_dashboard/api/trove.py @@ -144,7 +144,7 @@ def instance_delete(request, instance_id): return troveclient(request).instances.delete(instance_id) -def instance_create(request, name, volume, flavor, databases=None, +def instance_create(request, name, volume, flavor=None, databases=None, users=None, restore_point=None, nics=None, datastore=None, datastore_version=None, replica_of=None, replica_count=None, @@ -152,12 +152,19 @@ def instance_create(request, name, volume, flavor, databases=None, availability_zone=None): # TODO(dklyle): adding conditional to support trove without volume # support for now until API supports checking for volume support - if volume > 0: + if volume > 0 and not replica_of: volume_params = {'size': volume} if volume_type: volume_params['type'] = volume_type else: volume_params = None + + if replica_of: + flavor = None + volume_params = None + datastore = None + datastore_version = None + return troveclient(request).instances.create( name, flavor, diff --git a/trove_dashboard/content/databases/tests.py b/trove_dashboard/content/databases/tests.py index 1b2d0fa4..0c05563b 100644 --- a/trove_dashboard/content/databases/tests.py +++ b/trove_dashboard/content/databases/tests.py @@ -1256,7 +1256,7 @@ class DatabaseTests(test.TestCase): mock.call(request)] self.assertEqual(expected_calls, self.mock_instance_list.call_args_list) - self.assertTrue(len(choices) == len(self.databases.list()) + 1) + self.assertEqual(len(choices), len(self.databases.list()) + 1) def _build_datastore_display_text(self, datastore, datastore_version): return datastore + ' - ' + datastore_version diff --git a/trove_dashboard/content/databases/workflows/create_instance.py b/trove_dashboard/content/databases/workflows/create_instance.py index a04fec1c..dbb93aec 100644 --- a/trove_dashboard/content/databases/workflows/create_instance.py +++ b/trove_dashboard/content/databases/workflows/create_instance.py @@ -440,7 +440,7 @@ class AdvancedAction(workflows.Action): try: instances = self._get_instances() choices = sorted([(i.id, i.name) for i in - instances if i.status == 'ACTIVE'], + instances if i.status == 'HEALTHY'], key=lambda i: i[1]) except Exception: choices = [] @@ -494,6 +494,7 @@ class AdvancedAction(workflows.Action): raise forms.ValidationError( _("A master instance must be selected!")) + cleaned_data['flavor'] = None cleaned_data['backup'] = None else: cleaned_data['master'] = None diff --git a/trove_dashboard/test/test_data/trove_data.py b/trove_dashboard/test/test_data/trove_data.py index b2871ef2..e39679e0 100644 --- a/trove_dashboard/test/test_data/trove_data.py +++ b/trove_dashboard/test/test_data/trove_data.py @@ -140,7 +140,7 @@ CLUSTER_DATA_TWO = { } DATABASE_DATA_ONE = { - "status": "ACTIVE", + "status": "HEALTHY", "updated": "2013-08-12T22:00:09", "name": "Test Database", "links": [], @@ -165,7 +165,7 @@ DATABASE_DATA_ONE = { } DATABASE_DATA_TWO = { - "status": "ACTIVE", + "status": "HEALTHY", "updated": "2013-08-12T22:00:09", "name": "Test Database With DNS", "links": [], @@ -187,7 +187,7 @@ DATABASE_DATA_TWO = { } DATABASE_DATA_THREE = { - "status": "ACTIVE", + "status": "HEALTHY", "updated": "2015-01-12T22:00:09", "name": "Test Database with Config", "links": [],