summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLingxian Kong <anlin.kong@gmail.com>2020-12-06 21:48:19 +1300
committerLingxian Kong <anlin.kong@gmail.com>2020-12-09 11:10:28 +1300
commit23b5546f5356a3be23aa0191d8f0fffc14f5a3e0 (patch)
treeb4ddfc0ba4faa4c1992aed2dfe03c62e0c4e6a2d
parentb02459fb1d71d838c715adfc4efb34b893070bc1 (diff)
downloadpython-troveclient-23b5546f5356a3be23aa0191d8f0fffc14f5a3e0.tar.gz
Support operating_status for instance
Change-Id: I3f5badc4d3bbb41de008d39e813d48f6aa670dc1
-rw-r--r--releasenotes/notes/wallaby-instance-operating-status.yaml5
-rw-r--r--troveclient/osc/v1/database_instances.py8
-rw-r--r--troveclient/tests/osc/v1/test_database_instances.py53
3 files changed, 53 insertions, 13 deletions
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):