diff options
| author | Stephen Finucane <sfinucan@redhat.com> | 2020-10-14 10:48:44 +0100 |
|---|---|---|
| committer | Stephen Finucane <sfinucan@redhat.com> | 2020-12-09 15:28:12 +0000 |
| commit | da03bd80e3b83faf465f1446c4553c5d97b5bad5 (patch) | |
| tree | 759e2837733d6e5a3f86a5046c698774f65fc5c8 /openstackclient | |
| parent | 0edd055f3f2a86a60226c342a617507ab94c5eaa (diff) | |
| download | python-openstackclient-da03bd80e3b83faf465f1446c4553c5d97b5bad5.tar.gz | |
Add 'flavor list --min-disk', '--min-ram' options
Allow us to filter on minimum disk and RAM, and close another gap with
novaclient.
Change-Id: Ib3f0bdf419675e1c35c3406fbac8a4c18ac56a33
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/compute/v2/flavor.py | 43 | ||||
| -rw-r--r-- | openstackclient/tests/unit/compute/v2/test_flavor.py | 31 |
2 files changed, 67 insertions, 7 deletions
diff --git a/openstackclient/compute/v2/flavor.py b/openstackclient/compute/v2/flavor.py index 8477e8ef..fa98e131 100644 --- a/openstackclient/compute/v2/flavor.py +++ b/openstackclient/compute/v2/flavor.py @@ -264,6 +264,18 @@ class ListFlavor(command.Lister): help=_("List all flavors, whether public or private") ) parser.add_argument( + '--min-disk', + type=int, + metavar='<min-disk>', + help=_('Filters the flavors by a minimum disk space, in GiB.'), + ) + parser.add_argument( + '--min-ram', + type=int, + metavar='<min-ram>', + help=_('Filters the flavors by a minimum RAM, in MiB.'), + ) + parser.add_argument( '--long', action='store_true', default=False, @@ -277,8 +289,13 @@ class ListFlavor(command.Lister): parser.add_argument( '--limit', type=int, - metavar="<num-flavors>", - help=_("Maximum number of flavors to display") + metavar='<num-flavors>', + help=_( + 'Maximum number of flavors to display. This is also ' + 'configurable on the server. The actual limit used will be ' + 'the lower of the user-supplied value and the server ' + 'configuration-derived value' + ), ) return parser @@ -293,15 +310,24 @@ class ListFlavor(command.Lister): query_attrs = { 'is_public': is_public } + if parsed_args.marker: query_attrs['marker'] = parsed_args.marker + if parsed_args.limit: query_attrs['limit'] = parsed_args.limit + if parsed_args.limit or parsed_args.marker: # User passed explicit pagination request, switch off SDK # pagination query_attrs['paginated'] = False + if parsed_args.min_disk: + query_attrs['min_disk'] = parsed_args.min_disk + + if parsed_args.min_ram: + query_attrs['min_ram'] = parsed_args.min_ram + data = list(compute_client.flavors(**query_attrs)) # Even if server supports 2.61 some policy might stop it sending us # extra_specs. So try to fetch them if they are absent @@ -341,10 +367,13 @@ class ListFlavor(command.Lister): "Properties", ) - return (column_headers, - (utils.get_item_properties( - s, columns, formatters=_formatters, - ) for s in data)) + return ( + column_headers, + ( + utils.get_item_properties(s, columns, formatters=_formatters) + for s in data + ), + ) class SetFlavor(command.Command): @@ -378,13 +407,13 @@ class SetFlavor(command.Command): help=_('Set flavor access to project (name or ID) ' '(admin only)'), ) + identity_common.add_project_domain_option_to_parser(parser) parser.add_argument( '--description', metavar='<description>', help=_("Set description for the flavor.(Supported by API " "versions '2.55' - '2.latest'") ) - identity_common.add_project_domain_option_to_parser(parser) return parser diff --git a/openstackclient/tests/unit/compute/v2/test_flavor.py b/openstackclient/tests/unit/compute/v2/test_flavor.py index 8625b712..af9e4a2c 100644 --- a/openstackclient/tests/unit/compute/v2/test_flavor.py +++ b/openstackclient/tests/unit/compute/v2/test_flavor.py @@ -635,6 +635,37 @@ class TestFlavorList(TestFlavor): self.assertEqual(self.columns_long, columns) self.assertListItemEqual(self.data_long, tuple(data)) + def test_flavor_list_min_disk_min_ram(self): + arglist = [ + '--min-disk', '10', + '--min-ram', '2048', + ] + verifylist = [ + ('min_disk', 10), + ('min_ram', 2048), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # In base command class Lister in cliff, abstract method take_action() + # returns a tuple containing the column names and an iterable + # containing the data to be listed. + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'is_public': True, + 'min_disk': 10, + 'min_ram': 2048, + } + + self.sdk_client.flavors.assert_called_with( + **kwargs + ) + + self.assertEqual(self.columns, columns) + self.assertEqual(tuple(self.data), tuple(data)) + class TestFlavorSet(TestFlavor): |
