Enhances client to support unique meter retrieval
meter list API is enhanced to support a unique param
If specified as True, it returns a unique list of
meters.
This patch enhances the ceilometer-client to support
the unique argument in the shell and the client bindings.
DocImpact
Closes-Bug: #1506959
Change-Id: I011ca725c25e1cdbe9891c3719f13f5cd34142ea
(cherry picked from commit c45000c759
)
This commit is contained in:
parent
48a2ba2b26
commit
cb98c6d05f
|
@ -1846,6 +1846,7 @@ class ShellMeterListCommandTest(utils.BaseTestCase):
|
|||
self.cc.meters.list = mock.Mock()
|
||||
self.args = mock.MagicMock()
|
||||
self.args.limit = None
|
||||
self.args.unique = False
|
||||
|
||||
@mock.patch('sys.stdout', new=six.StringIO())
|
||||
def test_meter_list(self):
|
||||
|
@ -1853,7 +1854,26 @@ class ShellMeterListCommandTest(utils.BaseTestCase):
|
|||
self.cc.meters.list.return_value = [meter]
|
||||
|
||||
ceilometer_shell.do_meter_list(self.cc, self.args)
|
||||
self.cc.meters.list.assert_called_once_with(q=[], limit=None)
|
||||
self.cc.meters.list.assert_called_once_with(q=[], limit=None,
|
||||
unique=False)
|
||||
|
||||
self.assertEqual('''\
|
||||
+-------+-------+-------+-------------+---------+------------+
|
||||
| Name | Type | Unit | Resource ID | User ID | Project ID |
|
||||
+-------+-------+-------+-------------+---------+------------+
|
||||
| image | gauge | image | resource-id | | project |
|
||||
+-------+-------+-------+-------------+---------+------------+
|
||||
''', sys.stdout.getvalue())
|
||||
|
||||
@mock.patch('sys.stdout', new=six.StringIO())
|
||||
def test_unique_meter_list(self):
|
||||
self.args.unique = True
|
||||
meter = meters.Meter(mock.Mock(), self.METER)
|
||||
self.cc.meters.list.return_value = [meter]
|
||||
|
||||
ceilometer_shell.do_meter_list(self.cc, self.args)
|
||||
self.cc.meters.list.assert_called_once_with(q=[], limit=None,
|
||||
unique=True)
|
||||
|
||||
self.assertEqual('''\
|
||||
+-------+-------+-------+-------------+---------+------------+
|
||||
|
|
|
@ -25,7 +25,14 @@ class Meter(base.Resource):
|
|||
class MeterManager(base.Manager):
|
||||
resource_class = Meter
|
||||
|
||||
def list(self, q=None, limit=None):
|
||||
def list(self, q=None, limit=None, unique=False):
|
||||
path = '/v2/meters'
|
||||
params = ['limit=%s' % limit] if limit else None
|
||||
params = []
|
||||
|
||||
if limit:
|
||||
params.append('limit=%s' % limit)
|
||||
|
||||
if unique:
|
||||
params.append('unique=%s' % str(unique))
|
||||
|
||||
return self._list(options.build_url(path, q, params))
|
||||
|
|
|
@ -266,10 +266,14 @@ def do_sample_create(cc, args={}):
|
|||
'but if supplied must be string, integer, float, or boolean.')
|
||||
@utils.arg('-l', '--limit', metavar='<NUMBER>',
|
||||
help='Maximum number of meters to return. %s' % DEFAULT_API_LIMIT)
|
||||
@utils.arg('--unique', dest='unique',
|
||||
metavar='{True|False}',
|
||||
type=lambda v: strutils.bool_from_string(v, True),
|
||||
help='Retrieves unique list of meters.')
|
||||
def do_meter_list(cc, args={}):
|
||||
"""List the user's meters."""
|
||||
meters = cc.meters.list(q=options.cli_to_array(args.query),
|
||||
limit=args.limit)
|
||||
limit=args.limit, unique=args.unique)
|
||||
field_labels = ['Name', 'Type', 'Unit', 'Resource ID', 'User ID',
|
||||
'Project ID']
|
||||
fields = ['name', 'type', 'unit', 'resource_id', 'user_id',
|
||||
|
|
Loading…
Reference in New Issue