Merge "Add support for network quota details command"
This commit is contained in:
commit
bd60aa4a21
@ -2034,19 +2034,27 @@ class Proxy(proxy2.BaseProxy):
|
|||||||
"""
|
"""
|
||||||
self._delete(_quota.Quota, quota, ignore_missing=ignore_missing)
|
self._delete(_quota.Quota, quota, ignore_missing=ignore_missing)
|
||||||
|
|
||||||
def get_quota(self, quota):
|
def get_quota(self, quota, details=False):
|
||||||
"""Get a quota
|
"""Get a quota
|
||||||
|
|
||||||
:param quota: The value can be the ID of a quota or a
|
:param quota: The value can be the ID of a quota or a
|
||||||
:class:`~openstack.network.v2.quota.Quota` instance.
|
:class:`~openstack.network.v2.quota.Quota` instance.
|
||||||
The ID of a quota is the same as the project ID
|
The ID of a quota is the same as the project ID
|
||||||
for the quota.
|
for the quota.
|
||||||
|
:param details: If set to True, details about quota usage will
|
||||||
|
be returned.
|
||||||
|
|
||||||
:returns: One :class:`~openstack.network.v2.quota.Quota`
|
:returns: One :class:`~openstack.network.v2.quota.Quota`
|
||||||
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||||||
when no resource can be found.
|
when no resource can be found.
|
||||||
"""
|
"""
|
||||||
return self._get(_quota.Quota, quota)
|
if details:
|
||||||
|
quota_obj = self._get_resource(_quota.Quota, quota)
|
||||||
|
quota = self._get(_quota.QuotaDetails, project=quota_obj.id,
|
||||||
|
requires_id=False)
|
||||||
|
else:
|
||||||
|
quota = self._get(_quota.Quota, quota)
|
||||||
|
return quota
|
||||||
|
|
||||||
def get_quota_default(self, quota):
|
def get_quota_default(self, quota):
|
||||||
"""Get a default quota
|
"""Get a default quota
|
||||||
|
@ -82,3 +82,47 @@ class QuotaDefault(Quota):
|
|||||||
# Properties
|
# Properties
|
||||||
#: The ID of the project.
|
#: The ID of the project.
|
||||||
project = resource.URI('project')
|
project = resource.URI('project')
|
||||||
|
|
||||||
|
|
||||||
|
class QuotaDetails(Quota):
|
||||||
|
base_path = '/quotas/%(project)s/details'
|
||||||
|
|
||||||
|
# capabilities
|
||||||
|
allow_retrieve = True
|
||||||
|
allow_update = False
|
||||||
|
allow_delete = False
|
||||||
|
allow_list = False
|
||||||
|
|
||||||
|
# Properties
|
||||||
|
#: The ID of the project.
|
||||||
|
project = resource.URI('project')
|
||||||
|
#: The maximum amount of floating IPs you can have. *Type: dict*
|
||||||
|
floating_ips = resource.Body('floatingip', type=dict)
|
||||||
|
#: The maximum amount of health monitors you can create. *Type: dict*
|
||||||
|
health_monitors = resource.Body('healthmonitor', type=dict)
|
||||||
|
#: The maximum amount of listeners you can create. *Type: dict*
|
||||||
|
listeners = resource.Body('listener', type=dict)
|
||||||
|
#: The maximum amount of load balancers you can create. *Type: dict*
|
||||||
|
load_balancers = resource.Body('loadbalancer', type=dict)
|
||||||
|
#: The maximum amount of L7 policies you can create. *Type: dict*
|
||||||
|
l7_policies = resource.Body('l7policy', type=dict)
|
||||||
|
#: The maximum amount of networks you can create. *Type: dict*
|
||||||
|
networks = resource.Body('network', type=dict)
|
||||||
|
#: The maximum amount of pools you can create. *Type: dict*
|
||||||
|
pools = resource.Body('pool', type=dict)
|
||||||
|
#: The maximum amount of ports you can create. *Type: dict*
|
||||||
|
ports = resource.Body('port', type=dict)
|
||||||
|
#: The ID of the project these quota values are for.
|
||||||
|
project_id = resource.Body('tenant_id', alternate_id=True)
|
||||||
|
#: The maximum amount of RBAC policies you can create. *Type: dict*
|
||||||
|
rbac_policies = resource.Body('rbac_policy', type=dict)
|
||||||
|
#: The maximum amount of routers you can create. *Type: int*
|
||||||
|
routers = resource.Body('router', type=dict)
|
||||||
|
#: The maximum amount of subnets you can create. *Type: dict*
|
||||||
|
subnets = resource.Body('subnet', type=dict)
|
||||||
|
#: The maximum amount of subnet pools you can create. *Type: dict*
|
||||||
|
subnet_pools = resource.Body('subnetpool', type=dict)
|
||||||
|
#: The maximum amount of security group rules you can create. *Type: dict*
|
||||||
|
security_group_rules = resource.Body('security_group_rule', type=dict)
|
||||||
|
#: The maximum amount of security groups you can create. *Type: dict*
|
||||||
|
security_groups = resource.Body('security_group', type=dict)
|
||||||
|
@ -20,6 +20,14 @@ class TestQuota(base.BaseFunctionalTest):
|
|||||||
self.assertIsNotNone(qot.project_id)
|
self.assertIsNotNone(qot.project_id)
|
||||||
self.assertIsNotNone(qot.networks)
|
self.assertIsNotNone(qot.networks)
|
||||||
|
|
||||||
|
def test_list_details(self):
|
||||||
|
expected_keys = ['limit', 'used', 'reserved']
|
||||||
|
project_id = self.conn.session.get_project_id()
|
||||||
|
quota_details = self.conn.network.get_quota(project_id, details=True)
|
||||||
|
for details in quota_details._body.attributes.values():
|
||||||
|
for expected_key in expected_keys:
|
||||||
|
self.assertTrue(expected_key in details.keys())
|
||||||
|
|
||||||
def test_set(self):
|
def test_set(self):
|
||||||
attrs = {'networks': 123456789}
|
attrs = {'networks': 123456789}
|
||||||
for project_quota in self.conn.network.quotas():
|
for project_quota in self.conn.network.quotas():
|
||||||
|
@ -686,6 +686,19 @@ class TestNetworkProxy(test_proxy_base2.TestProxyBase):
|
|||||||
def test_quota_get(self):
|
def test_quota_get(self):
|
||||||
self.verify_get(self.proxy.get_quota, quota.Quota)
|
self.verify_get(self.proxy.get_quota, quota.Quota)
|
||||||
|
|
||||||
|
@mock.patch.object(proxy_base2.BaseProxy, "_get_resource")
|
||||||
|
def test_quota_get_details(self, mock_get):
|
||||||
|
fake_quota = mock.Mock(project_id='PROJECT')
|
||||||
|
mock_get.return_value = fake_quota
|
||||||
|
self._verify2("openstack.proxy2.BaseProxy._get",
|
||||||
|
self.proxy.get_quota,
|
||||||
|
method_args=['QUOTA_ID'],
|
||||||
|
method_kwargs={'details': True},
|
||||||
|
expected_args=[quota.QuotaDetails],
|
||||||
|
expected_kwargs={'project': fake_quota.id,
|
||||||
|
'requires_id': False})
|
||||||
|
mock_get.assert_called_once_with(quota.Quota, 'QUOTA_ID')
|
||||||
|
|
||||||
@mock.patch.object(proxy_base2.BaseProxy, "_get_resource")
|
@mock.patch.object(proxy_base2.BaseProxy, "_get_resource")
|
||||||
def test_quota_default_get(self, mock_get):
|
def test_quota_default_get(self, mock_get):
|
||||||
fake_quota = mock.Mock(project_id='PROJECT')
|
fake_quota = mock.Mock(project_id='PROJECT')
|
||||||
|
Loading…
Reference in New Issue
Block a user