diff --git a/releasenotes/notes/add-backup-show-to-osc-022f42ad93136ce6.yaml b/releasenotes/notes/add-backup-show-to-osc-022f42ad93136ce6.yaml new file mode 100644 index 00000000..277ba011 --- /dev/null +++ b/releasenotes/notes/add-backup-show-to-osc-022f42ad93136ce6.yaml @@ -0,0 +1,5 @@ +--- +features: + - The command ``trove backup-show`` is now available to use in + the python-openstackclient CLI as ``openstack database backup + show`` diff --git a/setup.cfg b/setup.cfg index 9def2356..cb809033 100644 --- a/setup.cfg +++ b/setup.cfg @@ -31,6 +31,7 @@ openstack.cli.extension = openstack.database.v1 = database_backup_list = troveclient.osc.v1.database_backups:ListDatabaseBackups + database_backup_show = troveclient.osc.v1.database_backups:ShowDatabaseBackup database_cluster_list = troveclient.osc.v1.database_clusters:ListDatabaseClusters database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations database_configuration_show = troveclient.osc.v1.database_configurations:ShowDatabaseConfiguration diff --git a/troveclient/osc/v1/database_backups.py b/troveclient/osc/v1/database_backups.py index a7bd29e1..89895967 100644 --- a/troveclient/osc/v1/database_backups.py +++ b/troveclient/osc/v1/database_backups.py @@ -14,10 +14,20 @@ from osc_lib.command import command from osc_lib import utils as osc_utils +import six from troveclient.i18n import _ +def set_attributes_for_print_detail(backup): + info = backup._info.copy() + if hasattr(backup, 'datastore'): + info['datastore'] = backup.datastore['type'] + info['datastore_version'] = backup.datastore['version'] + info['datastore_version_id'] = backup.datastore['version_id'] + return info + + class ListDatabaseBackups(command.Lister): _description = _("List database backups") @@ -64,3 +74,23 @@ class ListDatabaseBackups(command.Lister): backups = [osc_utils.get_item_properties(b, self.columns) for b in backups] return self.columns, backups + + +class ShowDatabaseBackup(command.ShowOne): + + _description = _("Shows details of a database backup") + + def get_parser(self, prog_name): + parser = super(ShowDatabaseBackup, self).get_parser(prog_name) + parser.add_argument( + 'backup', + metavar='', + help=_('ID or name of the backup'), + ) + return parser + + def take_action(self, parsed_args): + database_backups = self.app.client_manager.database.backups + backup = osc_utils.find_resource(database_backups, parsed_args.backup) + backup = set_attributes_for_print_detail(backup) + return zip(*sorted(six.iteritems(backup))) diff --git a/troveclient/tests/osc/v1/test_database_backups.py b/troveclient/tests/osc/v1/test_database_backups.py index 05fa18ba..a674586d 100644 --- a/troveclient/tests/osc/v1/test_database_backups.py +++ b/troveclient/tests/osc/v1/test_database_backups.py @@ -48,3 +48,39 @@ class TestBackupList(TestBackups): self.backup_client.list.assert_called_once_with(**self.defaults) self.assertEqual(self.columns, columns) self.assertEqual([self.values], data) + + +class TestBackupShow(TestBackups): + + values = ('2015-05-16T14:22:28', 'mysql', '5.6', 'v-56', None, 'bk-1234', + '1234', + 'http://backup_srvr/database_backups/bk-1234.xbstream.gz.enc', + 'bkp_1', None, 0.11, 'COMPLETED', '2015-05-16T14:23:08') + + def setUp(self): + super(TestBackupShow, self).setUp() + self.cmd = database_backups.ShowDatabaseBackup(self.app, None) + self.data = self.fake_backups.get_backup_bk_1234() + self.backup_client.get.return_value = self.data + self.columns = ( + 'created', + 'datastore', + 'datastore_version', + 'datastore_version_id', + 'description', + 'id', + 'instance_id', + 'locationRef', + 'name', + 'parent_id', + 'size', + 'status', + 'updated', + ) + + def test_show(self): + args = ['bkp_1'] + 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)