Add min-disk and min-ram filters to list flavors
The Nova API allows user filter flavors by minDisk and minRam, but that is not implemented in the current novaclient yet. This patch introduce '--min-disk' and '--min-ram' options to support it. In addition, We also append '--sort-key' and '--sort-dir' to the flavor-list subcommand to support sort the result list. Change-Id: I3849cc2d73057170dc224fa86b724f5141ca9a23 Closes-Bug: #1647867
This commit is contained in:
parent
57c397d822
commit
b7edc92d81
|
@ -51,6 +51,16 @@ class FlavorsTest(utils.TestCase):
|
|||
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
|
||||
self.cs.assert_called('GET', '/flavors/detail?limit=4&marker=1234')
|
||||
|
||||
def test_list_flavors_with_min_disk(self):
|
||||
fl = self.cs.flavors.list(min_disk=20)
|
||||
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
|
||||
self.cs.assert_called('GET', '/flavors/detail?minDisk=20')
|
||||
|
||||
def test_list_flavors_with_min_ram(self):
|
||||
fl = self.cs.flavors.list(min_ram=512)
|
||||
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
|
||||
self.cs.assert_called('GET', '/flavors/detail?minRam=512')
|
||||
|
||||
def test_list_flavors_with_sort_key_dir(self):
|
||||
fl = self.cs.flavors.list(sort_key='id', sort_dir='asc')
|
||||
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
|
||||
|
|
|
@ -1033,6 +1033,18 @@ class ShellTest(utils.TestCase):
|
|||
self.run_command('flavor-list --marker 1 --limit 2')
|
||||
self.assert_called('GET', '/flavors/detail?limit=2&marker=1')
|
||||
|
||||
def test_flavor_list_with_min_disk(self):
|
||||
self.run_command('flavor-list --min-disk 20')
|
||||
self.assert_called('GET', '/flavors/detail?minDisk=20')
|
||||
|
||||
def test_flavor_list_with_min_ram(self):
|
||||
self.run_command('flavor-list --min-ram 512')
|
||||
self.assert_called('GET', '/flavors/detail?minRam=512')
|
||||
|
||||
def test_flavor_list_with_sort_key_dir(self):
|
||||
self.run_command('flavor-list --sort-key id --sort-dir asc')
|
||||
self.assert_called('GET', '/flavors/detail?sort_dir=asc&sort_key=id')
|
||||
|
||||
def test_flavor_show(self):
|
||||
self.run_command('flavor-show 1')
|
||||
self.assert_called_anytime('GET', '/flavors/1')
|
||||
|
|
|
@ -92,8 +92,8 @@ class FlavorManager(base.ManagerWithFind):
|
|||
resource_class = Flavor
|
||||
is_alphanum_id_allowed = True
|
||||
|
||||
def list(self, detailed=True, is_public=True, marker=None, limit=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
def list(self, detailed=True, is_public=True, marker=None, min_disk=None,
|
||||
min_ram=None, limit=None, sort_key=None, sort_dir=None):
|
||||
"""Get a list of all flavors.
|
||||
|
||||
:param detailed: Whether flavor needs to be return with details
|
||||
|
@ -103,6 +103,8 @@ class FlavorManager(base.ManagerWithFind):
|
|||
access to all flavor types.
|
||||
:param marker: Begin returning flavors that appear later in the flavor
|
||||
list than that represented by this flavor id (optional).
|
||||
:param min_disk: Filters the flavors by a minimum disk space, in GiB.
|
||||
:param min_ram: Filters the flavors by a minimum RAM, in MB.
|
||||
:param limit: maximum number of flavors to return (optional).
|
||||
:param sort_key: Flavors list sort key (optional).
|
||||
:param sort_dir: Flavors list sort direction (optional).
|
||||
|
@ -114,6 +116,10 @@ class FlavorManager(base.ManagerWithFind):
|
|||
# and flavors from their own projects only.
|
||||
if marker:
|
||||
qparams['marker'] = str(marker)
|
||||
if min_disk:
|
||||
qparams['minDisk'] = int(min_disk)
|
||||
if min_ram:
|
||||
qparams['minRam'] = int(min_ram)
|
||||
if limit:
|
||||
qparams['limit'] = int(limit)
|
||||
if sort_key:
|
||||
|
|
|
@ -864,6 +864,18 @@ def _print_flavor_list(flavors, show_extra_specs=False):
|
|||
default=None,
|
||||
help=_('The last flavor ID of the previous page; displays list of flavors'
|
||||
' after "marker".'))
|
||||
@utils.arg(
|
||||
'--min-disk',
|
||||
dest='min_disk',
|
||||
metavar='<min-disk>',
|
||||
default=None,
|
||||
help=_('Filters the flavors by a minimum disk space, in GiB.'))
|
||||
@utils.arg(
|
||||
'--min-ram',
|
||||
dest='min_ram',
|
||||
metavar='<min-ram>',
|
||||
default=None,
|
||||
help=_('Filters the flavors by a minimum RAM, in MB.'))
|
||||
@utils.arg(
|
||||
'--limit',
|
||||
dest='limit',
|
||||
|
@ -873,12 +885,28 @@ def _print_flavor_list(flavors, show_extra_specs=False):
|
|||
help=_("Maximum number of flavors to display. If limit is bigger than "
|
||||
"'osapi_max_limit' option of Nova API, limit 'osapi_max_limit' "
|
||||
"will be used instead."))
|
||||
@utils.arg(
|
||||
'--sort-key',
|
||||
dest='sort_key',
|
||||
metavar='<sort-key>',
|
||||
default=None,
|
||||
help=_('Flavors list sort key.'))
|
||||
@utils.arg(
|
||||
'--sort-dir',
|
||||
dest='sort_dir',
|
||||
metavar='<sort-dir>',
|
||||
default=None,
|
||||
help=_('Flavors list sort direction.'))
|
||||
def do_flavor_list(cs, args):
|
||||
"""Print a list of available 'flavors' (sizes of servers)."""
|
||||
if args.all:
|
||||
flavors = cs.flavors.list(is_public=None)
|
||||
flavors = cs.flavors.list(is_public=None, min_disk=args.min_disk,
|
||||
min_ram=args.min_ram, sort_key=args.sort_key,
|
||||
sort_dir=args.sort_dir)
|
||||
else:
|
||||
flavors = cs.flavors.list(marker=args.marker, limit=args.limit)
|
||||
flavors = cs.flavors.list(marker=args.marker, min_disk=args.min_disk,
|
||||
min_ram=args.min_ram, sort_key=args.sort_key,
|
||||
sort_dir=args.sort_dir, limit=args.limit)
|
||||
_print_flavor_list(flavors, args.extra_specs)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue