Add tenant_id parameter to limits.

Cinder API allows specifying tenant_id to get tenant
specific resource usage. This was missing in the client.
This fix should allow fetching tenant specific resource usage
directly from the client. Added tenant argument to the limits CLI.

Closes-Bug: #1580562
Change-Id: I3fbd6341f6d018a79e7c343107ac974b6fbb9239
This commit is contained in:
Dimitri Mazmanov 2016-05-11 14:03:06 +02:00
parent 762212f7fe
commit 1a973235f0
3 changed files with 31 additions and 6 deletions

View File

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import ddt
import mock
from cinderclient.tests.unit import utils
@ -155,8 +156,10 @@ class TestAbsoluteLimit(utils.TestCase):
self.assertEqual("<AbsoluteLimit: name=name1>", repr(l1))
@ddt.ddt
class TestLimitsManager(utils.TestCase):
def test_get(self):
@ddt.data(None, 'test')
def test_get(self, tenant_id):
api = mock.Mock()
api.client.get.return_value = (
None,
@ -165,7 +168,11 @@ class TestLimitsManager(utils.TestCase):
l1 = limits.AbsoluteLimit("name1", "value1")
limitsManager = limits.LimitsManager(api)
lim = limitsManager.get()
lim = limitsManager.get(tenant_id)
query_str = ''
if tenant_id:
query_str = '?tenant_id=%s' % tenant_id
api.client.get.assert_called_once_with('/limits%s' % query_str)
self.assertIsInstance(lim, limits.Limits)
for l in lim.absolute:

View File

@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from six.moves.urllib import parse
from cinderclient import base
@ -83,9 +85,15 @@ class LimitsManager(base.Manager):
resource_class = Limits
def get(self):
def get(self, tenant_id=None):
"""Get a specific extension.
:rtype: :class:`Limits`
"""
return self._get("/limits", "limits")
opts = {}
if tenant_id:
opts['tenant_id'] = tenant_id
query_string = "?%s" % parse.urlencode(opts) if opts else ""
return self._get("/limits%s" % query_string, "limits")

View File

@ -1214,18 +1214,28 @@ def do_quota_class_update(cs, args):
_quota_update(cs.quota_classes, args.class_name, args)
@utils.arg('tenant',
metavar='<tenant_id>',
nargs='?',
default=None,
help='Display information for a single tenant (Admin only).')
@utils.service_type('volumev3')
def do_absolute_limits(cs, args):
"""Lists absolute limits for a user."""
limits = cs.limits.get().absolute
limits = cs.limits.get(args.tenant).absolute
columns = ['Name', 'Value']
utils.print_list(limits, columns)
@utils.arg('tenant',
metavar='<tenant_id>',
nargs='?',
default=None,
help='Display information for a single tenant (Admin only).')
@utils.service_type('volumev3')
def do_rate_limits(cs, args):
"""Lists rate limits for a user."""
limits = cs.limits.get().rate
limits = cs.limits.get(args.tenant).rate
columns = ['Verb', 'URI', 'Value', 'Remain', 'Unit', 'Next_Available']
utils.print_list(limits, columns)