From 23b5546f5356a3be23aa0191d8f0fffc14f5a3e0 Mon Sep 17 00:00:00 2001 From: Lingxian Kong Date: Sun, 6 Dec 2020 21:48:19 +1300 Subject: Support operating_status for instance Change-Id: I3f5badc4d3bbb41de008d39e813d48f6aa670dc1 --- .../notes/wallaby-instance-operating-status.yaml | 5 ++ troveclient/osc/v1/database_instances.py | 8 +++- .../tests/osc/v1/test_database_instances.py | 53 +++++++++++++++++----- 3 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 releasenotes/notes/wallaby-instance-operating-status.yaml diff --git a/releasenotes/notes/wallaby-instance-operating-status.yaml b/releasenotes/notes/wallaby-instance-operating-status.yaml new file mode 100644 index 0000000..df88a2f --- /dev/null +++ b/releasenotes/notes/wallaby-instance-operating-status.yaml @@ -0,0 +1,5 @@ +--- +features: + - Support ``operating_status`` for listing and showing instance. When + instance is created successfully, the ``status`` is ACTIVE and + ``operating_status`` is HEALTHY. diff --git a/troveclient/osc/v1/database_instances.py b/troveclient/osc/v1/database_instances.py index ad23d8e..4f69975 100644 --- a/troveclient/osc/v1/database_instances.py +++ b/troveclient/osc/v1/database_instances.py @@ -59,6 +59,11 @@ def get_instances_info(instances): if 'server' in instance_info: instance_info['server_id'] = instance_info['server'].get('id') + if 'operating_status' not in instance_info: + # In case newer version python-troveclient is talking to older + # version trove. + instance_info['operating_status'] = '' + instances_info.append(instance_info) return instances_info @@ -106,7 +111,8 @@ def set_attributes_for_print_detail(instance): class ListDatabaseInstances(command.Lister): _description = _("List database instances") columns = ['ID', 'Name', 'Datastore', 'Datastore Version', 'Status', - 'Public', 'Addresses', 'Flavor ID', 'Size', 'Role'] + 'Operating Status', 'Public', 'Addresses', 'Flavor ID', + 'Size', 'Role'] admin_columns = columns + ["Server ID", "Tenant ID"] def get_parser(self, prog_name): diff --git a/troveclient/tests/osc/v1/test_database_instances.py b/troveclient/tests/osc/v1/test_database_instances.py index a25d3f0..e6c84a7 100644 --- a/troveclient/tests/osc/v1/test_database_instances.py +++ b/troveclient/tests/osc/v1/test_database_instances.py @@ -51,6 +51,7 @@ class TestInstanceList(TestInstances): "id": instance_id, "name": name, "status": "ACTIVE", + "operating_status": "HEALTHY", "addresses": [ {"type": "private", "address": "10.0.0.13"} ], @@ -79,7 +80,7 @@ class TestInstanceList(TestInstances): ) values = [ - (instance_id, name, 'mysql', '5.6', 'ACTIVE', False, + (instance_id, name, 'mysql', '5.6', 'ACTIVE', 'HEALTHY', False, [{"type": "private", "address": "10.0.0.13"}], '02', 2, 'replica'), ] @@ -95,6 +96,7 @@ class TestInstanceList(TestInstances): "id": instance_id, "name": name, "status": "ACTIVE", + "operating_status": "HEALTHY", "addresses": [ {"type": "private", "address": "10.0.0.13"} ], @@ -126,7 +128,7 @@ class TestInstanceList(TestInstances): ) expected_instances = [ - (instance_id, name, 'mysql', '5.6', 'ACTIVE', False, + (instance_id, name, 'mysql', '5.6', 'ACTIVE', 'HEALTHY', False, [{"type": "private", "address": "10.0.0.13"}], '02', 2, '', server_id, tenant_id), ] @@ -142,6 +144,7 @@ class TestInstanceList(TestInstances): "id": instance_id, "name": name, "status": "ACTIVE", + "operating_status": "HEALTHY", "addresses": [ {"type": "private", "address": "10.0.0.13"} ], @@ -171,7 +174,7 @@ class TestInstanceList(TestInstances): columns ) expected_instances = [ - (instance_id, name, 'mysql', '5.6', 'ACTIVE', False, + (instance_id, name, 'mysql', '5.6', 'ACTIVE', 'HEALTHY', False, [{"type": "private", "address": "10.0.0.13"}], '02', 2, '', server_id, tenant_id), ] @@ -187,15 +190,9 @@ class TestInstanceList(TestInstances): class TestInstanceShow(TestInstances): - values = ([{'address': '10.0.0.13', 'type': 'private'}], [], 'mysql', - '5.6', '5.7.29', '02', '1234', 'test-member-1', False, - 'regionOne', 'fake_master_id', 'ACTIVE', 'fake_tenant_id', 2) - def setUp(self): super(TestInstanceShow, self).setUp() self.cmd = database_instances.ShowDatabaseInstance(self.app, None) - self.data = self.fake_instances.get_instances_1234() - self.instance_client.get.return_value = self.data self.columns = ( 'addresses', 'allowed_cidrs', @@ -205,6 +202,7 @@ class TestInstanceShow(TestInstances): 'flavor', 'id', 'name', + 'operating_status', 'public', 'region', 'replica_of', @@ -214,11 +212,42 @@ class TestInstanceShow(TestInstances): ) def test_show(self): - args = ['1234'] - parsed_args = self.check_parser(self.cmd, args, []) + instance_id = self.random_uuid() + name = self.random_name('test-show') + flavor_id = self.random_uuid() + primary_id = self.random_uuid() + tenant_id = self.random_uuid() + inst = { + "id": instance_id, + "name": name, + "status": "ACTIVE", + "operating_status": "HEALTHY", + "addresses": [ + {"type": "private", "address": "10.0.0.13"} + ], + "volume": {"size": 2}, + "flavor": {"id": flavor_id}, + "region": "regionOne", + "datastore": { + "version": "5.7.29", "type": "mysql", + "version_number": "5.7.29" + }, + "tenant_id": tenant_id, + "replica_of": {'id': primary_id}, + "access": {"is_public": False, "allowed_cidrs": []}, + } + self.instance_client.get.return_value = instances.Instance( + mock.MagicMock(), inst) + + parsed_args = self.check_parser(self.cmd, [instance_id], []) columns, data = self.cmd.take_action(parsed_args) + + values = ([{'address': '10.0.0.13', 'type': 'private'}], [], 'mysql', + '5.7.29', '5.7.29', flavor_id, instance_id, name, 'HEALTHY', + False, 'regionOne', primary_id, 'ACTIVE', + tenant_id, 2) self.assertEqual(self.columns, columns) - self.assertEqual(self.values, data) + self.assertEqual(values, data) class TestDatabaseInstanceDelete(TestInstances): -- cgit v1.2.1