diff --git a/doc/source/command-objects/volume-type.rst b/doc/source/command-objects/volume-type.rst index d93532c731..72422b5c25 100644 --- a/doc/source/command-objects/volume-type.rst +++ b/doc/source/command-objects/volume-type.rst @@ -87,7 +87,7 @@ List volume types os volume type list [--long] - [--public | --private] + [--default | --public | --private] .. option:: --long @@ -105,6 +105,12 @@ List volume types *Volume version 2 only* +.. option:: --default + + List the default volume type + + *Volume version 2 only* + volume type set --------------- diff --git a/openstackclient/tests/functional/volume/v2/test_volume_type.py b/openstackclient/tests/functional/volume/v2/test_volume_type.py index d8bd3a96c1..b4df5b2d59 100644 --- a/openstackclient/tests/functional/volume/v2/test_volume_type.py +++ b/openstackclient/tests/functional/volume/v2/test_volume_type.py @@ -42,6 +42,11 @@ class VolumeTypeTests(common.BaseVolumeTests): raw_output = self.openstack('volume type list' + opts) self.assertIn(self.NAME, raw_output) + def test_volume_type_list_default(self): + opts = self.get_opts(self.HEADERS) + raw_output = self.openstack('volume type list --default' + opts) + self.assertEqual("lvmdriver-1\n", raw_output) + def test_volume_type_show(self): opts = self.get_opts(self.FIELDS) raw_output = self.openstack('volume type show ' + self.NAME + opts) diff --git a/openstackclient/tests/unit/volume/v2/test_type.py b/openstackclient/tests/unit/volume/v2/test_type.py index 325872d734..0d556e13f7 100644 --- a/openstackclient/tests/unit/volume/v2/test_type.py +++ b/openstackclient/tests/unit/volume/v2/test_type.py @@ -172,7 +172,11 @@ class TestTypeList(TestType): "Description", "Properties" ] - + data_with_default_type = [( + volume_types[0].id, + volume_types[0].name, + True + )] data = [] for t in volume_types: data.append(( @@ -194,6 +198,7 @@ class TestTypeList(TestType): super(TestTypeList, self).setUp() self.types_mock.list.return_value = self.volume_types + self.types_mock.default.return_value = self.volume_types[0] # get the command to test self.cmd = volume_type.ListVolumeType(self.app, None) @@ -203,6 +208,7 @@ class TestTypeList(TestType): ("long", False), ("private", False), ("public", False), + ("default", False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -220,6 +226,7 @@ class TestTypeList(TestType): ("long", True), ("private", False), ("public", True), + ("default", False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -236,6 +243,7 @@ class TestTypeList(TestType): ("long", False), ("private", True), ("public", False), + ("default", False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -244,6 +252,23 @@ class TestTypeList(TestType): self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) + def test_type_list_with_default_option(self): + arglist = [ + "--default", + ] + verifylist = [ + ("long", False), + ("private", False), + ("public", False), + ("default", True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.types_mock.default.assert_called_once_with() + self.assertEqual(self.columns, columns) + self.assertEqual(self.data_with_default_type, list(data)) + class TestTypeSet(TestType): diff --git a/openstackclient/volume/v2/volume_type.py b/openstackclient/volume/v2/volume_type.py index 42ebb53e99..46466783f8 100644 --- a/openstackclient/volume/v2/volume_type.py +++ b/openstackclient/volume/v2/volume_type.py @@ -160,8 +160,15 @@ class ListVolumeType(command.Lister): '--long', action='store_true', default=False, - help=_('List additional fields in output')) + help=_('List additional fields in output') + ) public_group = parser.add_mutually_exclusive_group() + public_group.add_argument( + "--default", + action='store_true', + default=False, + help=_('List the default volume type') + ) public_group.add_argument( "--public", action="store_true", @@ -175,6 +182,7 @@ class ListVolumeType(command.Lister): return parser def take_action(self, parsed_args): + volume_client = self.app.client_manager.volume if parsed_args.long: columns = ['ID', 'Name', 'Is Public', 'Description', 'Extra Specs'] column_headers = [ @@ -182,14 +190,16 @@ class ListVolumeType(command.Lister): else: columns = ['ID', 'Name', 'Is Public'] column_headers = columns - - is_public = None - if parsed_args.public: - is_public = True - if parsed_args.private: - is_public = False - data = self.app.client_manager.volume.volume_types.list( - is_public=is_public) + if parsed_args.default: + data = [volume_client.volume_types.default()] + else: + is_public = None + if parsed_args.public: + is_public = True + if parsed_args.private: + is_public = False + data = volume_client.volume_types.list( + is_public=is_public) return (column_headers, (utils.get_item_properties( s, columns, @@ -240,7 +250,6 @@ class SetVolumeType(command.Command): volume_type = utils.find_resource( volume_client.volume_types, parsed_args.volume_type) - result = 0 kwargs = {} if parsed_args.name: diff --git a/releasenotes/notes/bp-cinder-command-support-82dbadef47454c18.yaml b/releasenotes/notes/bp-cinder-command-support-82dbadef47454c18.yaml new file mode 100644 index 0000000000..0ced2ce227 --- /dev/null +++ b/releasenotes/notes/bp-cinder-command-support-82dbadef47454c18.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add ``--default`` option to ``volume type list`` command, in + order to show which volume type the volume sets as it's + default. + [Blueprint :oscbp:`cinder-command-support`]