From 37ea396fa711b8af6709b058da1081d5cfd7661b Mon Sep 17 00:00:00 2001 From: wangyao Date: Thu, 7 Dec 2017 20:13:49 +0800 Subject: [PATCH] Add datastore-version-list to OSC This change adds database support to the python-openstackclient project for the datastore-version-list command. The trove command datastore-version-list is now: openstack datastore version list Change-Id: I88dad48f857329d07e4d6662744420eeaae5c8a3 Partially-Implements: trove-support-in-python-openstackclient --- ...-version-list-to-osc-3fe8729d493f3de2.yaml | 4 ++++ setup.cfg | 1 + troveclient/osc/v1/datastores.py | 22 +++++++++++++++++++ troveclient/tests/osc/v1/fakes.py | 4 ++++ troveclient/tests/osc/v1/test_datastores.py | 22 +++++++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 releasenotes/notes/add-datastore-version-list-to-osc-3fe8729d493f3de2.yaml diff --git a/releasenotes/notes/add-datastore-version-list-to-osc-3fe8729d493f3de2.yaml b/releasenotes/notes/add-datastore-version-list-to-osc-3fe8729d493f3de2.yaml new file mode 100644 index 00000000..b82b3388 --- /dev/null +++ b/releasenotes/notes/add-datastore-version-list-to-osc-3fe8729d493f3de2.yaml @@ -0,0 +1,4 @@ +--- +features: + - The command ``trove datastore-version-list`` is now available to use in + the python-openstackclient CLI as ``openstack datastore version list`` diff --git a/setup.cfg b/setup.cfg index d8aba3e8..91af40af 100644 --- a/setup.cfg +++ b/setup.cfg @@ -45,6 +45,7 @@ openstack.database.v1 = database_user_list = troveclient.osc.v1.database_users:ListDatabaseUsers datastore_list = troveclient.osc.v1.datastores:ListDatastores datastore_show = troveclient.osc.v1.datastores:ShowDatastore + datastore_version_list = troveclient.osc.v1.datastores:ListDatastoreVersions [build_sphinx] diff --git a/troveclient/osc/v1/datastores.py b/troveclient/osc/v1/datastores.py index c28624c2..d442a6c9 100644 --- a/troveclient/osc/v1/datastores.py +++ b/troveclient/osc/v1/datastores.py @@ -64,3 +64,25 @@ class ShowDatastore(command.ShowOne): parsed_args.datastore) datastore = set_attributes_for_print_detail(datastore) return zip(*sorted(six.iteritems(datastore))) + + +class ListDatastoreVersions(command.Lister): + + _description = _("Lists available versions for a datastore") + columns = ['ID', 'Name'] + + def get_parser(self, prog_name): + parser = super(ListDatastoreVersions, self).get_parser(prog_name) + parser.add_argument( + 'datastore', + metavar='', + help=_('ID or name of the datastore'), + ) + return parser + + def take_action(self, parsed_args): + datastore_version_client =\ + self.app.client_manager.database.datastore_versions + versions = datastore_version_client.list(parsed_args.datastore) + ds = [utils.get_item_properties(d, self.columns) for d in versions] + return self.columns, ds diff --git a/troveclient/tests/osc/v1/fakes.py b/troveclient/tests/osc/v1/fakes.py index 934ad1c7..865a5dd9 100644 --- a/troveclient/tests/osc/v1/fakes.py +++ b/troveclient/tests/osc/v1/fakes.py @@ -97,6 +97,10 @@ class FakeDatabases(object): class FakeDatastores(object): fake_datastores = fakes.FakeHTTPClient().get_datastores()[2]['datastores'] + fake_datastore_versions = fake_datastores[0]['versions'] def get_datastores_d_123(self): return datastores.Datastore(None, self.fake_datastores[0]) + + def get_datastores_d_123_versions(self): + return datastores.Datastore(None, self.fake_datastore_versions[0]) diff --git a/troveclient/tests/osc/v1/test_datastores.py b/troveclient/tests/osc/v1/test_datastores.py index a675175b..4a586670 100644 --- a/troveclient/tests/osc/v1/test_datastores.py +++ b/troveclient/tests/osc/v1/test_datastores.py @@ -21,6 +21,8 @@ class TestDatastores(fakes.TestDatabasev1): def setUp(self): super(TestDatastores, self).setUp() self.datastore_client = self.app.client_manager.database.datastores + self.datastore_version_client =\ + self.app.client_manager.database.datastore_versions class TestDatastoreList(TestDatastores): @@ -63,3 +65,23 @@ class TestDatastoreShow(TestDatastores): columns, data = self.cmd.take_action(parsed_args) self.assertEqual(self.columns, columns) self.assertEqual(self.values, data) + + +class TestDatastoreVersionList(TestDatastores): + columns = datastores.ListDatastoreVersions.columns + values = ('v-56', '5.6') + + def setUp(self): + super(TestDatastoreVersionList, self).setUp() + self.cmd = datastores.ListDatastoreVersions(self.app, None) + self.data = [self.fake_datastores.get_datastores_d_123_versions()] + self.datastore_version_client.list.return_value =\ + common.Paginated(self.data) + + def test_datastore_version_list_defaults(self): + args = ['mysql'] + parsed_args = self.check_parser(self.cmd, args, []) + columns, data = self.cmd.take_action(parsed_args) + self.datastore_version_client.list.assert_called_once_with(args[0]) + self.assertEqual(self.columns, columns) + self.assertEqual([self.values], data)