diff --git a/releasenotes/notes/add-flavor-show-to-osc-16ab5640f144cab7.yaml b/releasenotes/notes/add-flavor-show-to-osc-16ab5640f144cab7.yaml new file mode 100644 index 00000000..d0c400c3 --- /dev/null +++ b/releasenotes/notes/add-flavor-show-to-osc-16ab5640f144cab7.yaml @@ -0,0 +1,5 @@ +--- +features: + - The command ``trove flavor-show`` is now available to use in + the python-openstackclient CLI as ``openstack database flavor + show`` diff --git a/setup.cfg b/setup.cfg index 974446fa..6ae6ec08 100644 --- a/setup.cfg +++ b/setup.cfg @@ -34,6 +34,7 @@ openstack.database.v1 = database_cluster_list = troveclient.osc.v1.database_clusters:ListDatabaseClusters database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations database_flavor_list = troveclient.osc.v1.database_flavors:ListDatabaseFlavors + database_flavor_show = troveclient.osc.v1.database_flavors:ShowDatabaseFlavor database_instance_list = troveclient.osc.v1.database_instances:ListDatabaseInstances database_instance_show = troveclient.osc.v1.database_instances:ShowDatabaseInstance database_limit_list = troveclient.osc.v1.database_limits:ListDatabaseLimits diff --git a/troveclient/osc/v1/database_flavors.py b/troveclient/osc/v1/database_flavors.py index f9fb3d09..33ef46fc 100644 --- a/troveclient/osc/v1/database_flavors.py +++ b/troveclient/osc/v1/database_flavors.py @@ -14,11 +14,25 @@ from osc_lib.command import command from osc_lib import utils +import six from troveclient import exceptions from troveclient.i18n import _ +def set_attributes_for_print_detail(flavor): + info = flavor._info.copy() + # Get rid of those ugly links + if info.get('links'): + del(info['links']) + + # Fallback to str_id for flavors, where necessary + if hasattr(flavor, 'str_id'): + info['id'] = flavor.id + del(info['str_id']) + return info + + class ListDatabaseFlavors(command.Lister): _description = _("List database flavors") @@ -61,3 +75,23 @@ class ListDatabaseFlavors(command.Lister): _flavors.append(utils.get_item_properties(f, self.columns)) return self.columns, _flavors + + +class ShowDatabaseFlavor(command.ShowOne): + _description = _("Shows details of a database flavor") + + def get_parser(self, prog_name): + parser = super(ShowDatabaseFlavor, self).get_parser(prog_name) + parser.add_argument( + 'flavor', + metavar='', + help=_('ID or name of the flavor'), + ) + return parser + + def take_action(self, parsed_args): + db_flavors = self.app.client_manager.database.flavors + flavor = utils.find_resource(db_flavors, + parsed_args.flavor) + flavor = set_attributes_for_print_detail(flavor) + return zip(*sorted(six.iteritems(flavor))) diff --git a/troveclient/tests/osc/v1/test_database_flavors.py b/troveclient/tests/osc/v1/test_database_flavors.py index 780abae0..9a431d4f 100644 --- a/troveclient/tests/osc/v1/test_database_flavors.py +++ b/troveclient/tests/osc/v1/test_database_flavors.py @@ -39,3 +39,26 @@ class TestFlavorList(TestFlavors): self.flavor_client.list.assert_called_once_with() self.assertEqual(self.columns, columns) self.assertEqual([self.values], values) + + +class TestFlavorShow(TestFlavors): + + values = (1, 'm1.tiny', 512) + + def setUp(self): + super(TestFlavorShow, self).setUp() + self.cmd = database_flavors.ShowDatabaseFlavor(self.app, None) + self.data = self.fake_flavors.get_flavors_1() + self.flavor_client.get.return_value = self.data + self.columns = ( + 'id', + 'name', + 'ram', + ) + + def test_flavor_show_defaults(self): + args = ['m1.tiny'] + parsed_args = self.check_parser(self.cmd, args, []) + columns, data = self.cmd.take_action(parsed_args) + self.assertEqual(self.columns, columns) + self.assertEqual(self.values, data)