Add sort-by option for climateclient list commands

Adding a sort-by parameter for the climateclient list command so that
when a list is retrieved, it will be order by the column that the user
prefered.
Default value will be 'name' for leases and 'hypervisor_hostname' for
hosts (which are more meaningful order attributes than id).

Change-Id: Ie6a4df384770123ec5fc4cf43823ce5ef1a47ca5
Closes-Bug: #1304595
This commit is contained in:
cmart 2014-04-15 20:27:15 +00:00
parent fb02a3a396
commit 020c07de18
5 changed files with 41 additions and 5 deletions

View File

@ -23,6 +23,7 @@ from cliff.formatters import table
from cliff import lister from cliff import lister
from cliff import show from cliff import show
from climateclient import exception
from climateclient import utils from climateclient import utils
@ -217,6 +218,16 @@ class ListCommand(ClimateCommand, lister.Lister):
list_columns = [] list_columns = []
unknown_parts_flag = True unknown_parts_flag = True
def args2body(self, parsed_args):
params = {}
if parsed_args.sort_by:
if parsed_args.sort_by in self.list_columns:
params['sort_by'] = parsed_args.sort_by
else:
msg = 'Invalid sort option %s' % parsed_args.sort_by
raise exception.ClimateClientException(msg)
return params
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super(ListCommand, self).get_parser(prog_name) parser = super(ListCommand, self).get_parser(prog_name)
return parser return parser
@ -224,8 +235,9 @@ class ListCommand(ClimateCommand, lister.Lister):
def retrieve_list(self, parsed_args): def retrieve_list(self, parsed_args):
"""Retrieve a list of resources from Climate server""" """Retrieve a list of resources from Climate server"""
climate_client = self.get_client() climate_client = self.get_client()
body = self.args2body(parsed_args)
resource_manager = getattr(climate_client, self.resource) resource_manager = getattr(climate_client, self.resource)
data = resource_manager.list() data = resource_manager.list(**body)
return data return data
def setup_columns(self, info, parsed_args): def setup_columns(self, info, parsed_args):

View File

@ -42,6 +42,9 @@ class ComputeHostClientManager(base.BaseClientManager):
"""Deletes host with specified ID.""" """Deletes host with specified ID."""
self._delete('/os-hosts/%s' % host_id) self._delete('/os-hosts/%s' % host_id)
def list(self): def list(self, sort_by=None):
"""List all hosts.""" """List all hosts."""
return self._get('/os-hosts', 'hosts') hosts = self._get('/os-hosts', 'hosts')
if sort_by:
hosts = sorted(hosts, key=lambda l: l[sort_by])
return hosts

View File

@ -72,6 +72,9 @@ class LeaseClientManager(base.BaseClientManager):
"""Deletes lease with specified ID.""" """Deletes lease with specified ID."""
self._delete('/leases/%s' % lease_id) self._delete('/leases/%s' % lease_id)
def list(self): def list(self, sort_by=None):
"""List all leases.""" """List all leases."""
return self._get('/leases', 'leases') leases = self._get('/leases', 'leases')
if sort_by:
leases = sorted(leases, key=lambda l: l[sort_by])
return leases

View File

@ -24,6 +24,15 @@ class ListHosts(command.ListCommand):
list_columns = ['id', 'hypervisor_hostname', 'vcpus', 'memory_mb', list_columns = ['id', 'hypervisor_hostname', 'vcpus', 'memory_mb',
'local_gb'] 'local_gb']
def get_parser(self, prog_name):
parser = super(ListHosts, self).get_parser(prog_name)
parser.add_argument(
'--sort-by', metavar="<host_column>",
help='column name used to sort result',
default='hypervisor_hostname'
)
return parser
class ShowHost(command.ShowCommand): class ShowHost(command.ShowCommand):
resource = 'host' resource = 'host'

View File

@ -27,6 +27,15 @@ class ListLeases(command.ListCommand):
log = logging.getLogger(__name__ + '.ListLeases') log = logging.getLogger(__name__ + '.ListLeases')
list_columns = ['id', 'name', 'start_date', 'end_date'] list_columns = ['id', 'name', 'start_date', 'end_date']
def get_parser(self, prog_name):
parser = super(ListLeases, self).get_parser(prog_name)
parser.add_argument(
'--sort-by', metavar="<lease_column>",
help='column name used to sort result',
default='name'
)
return parser
class ShowLease(command.ShowCommand): class ShowLease(command.ShowCommand):
resource = 'lease' resource = 'lease'