Disable router and fip quotas when router is disabled

Currently Horizon unable to change quotas if routers extension is
disabled, fix this by adding router and floatingip quotas to
disabled_quotas when router extension is disabled.

Change-Id: I14d8a6e2e439ab48b62ce64c88ebb4643d11e49f
Closes-bug: #1457598
This commit is contained in:
liyingjun
2015-05-27 10:07:07 +08:00
committed by Rob Cresswell
parent e980382c7d
commit 1a3ab89f22
6 changed files with 54 additions and 4 deletions

View File

@@ -1223,6 +1223,12 @@ def is_quotas_extension_supported(request):
is_extension_supported(request, 'quotas'))
@memoized
def is_router_enabled(request):
return (is_enabled_by_config('enable_router') and
is_extension_supported(request, 'router'))
# Using this mechanism till a better plugin/sub-plugin detection
# mechanism is available.
# When using specific plugins the profile_support can be

View File

@@ -44,6 +44,7 @@ class ServicesViewTests(test.BaseAdminViewTests):
self.mox.StubOutWithMock(api.base, 'is_service_enabled')
if neutron_enabled:
self.mox.StubOutWithMock(api.neutron, 'is_extension_supported')
self.mox.StubOutWithMock(api.neutron, 'is_router_enabled')
api.cinder.is_volume_service_enabled(IsA(http.HttpRequest)) \
.MultipleTimes().AndReturn(True)
@@ -60,6 +61,8 @@ class ServicesViewTests(test.BaseAdminViewTests):
api.neutron.is_extension_supported(
IsA(http.HttpRequest),
'security-group').MultipleTimes().AndReturn(neutron_sg_enabled)
api.neutron.is_router_enabled(
IsA(http.HttpRequest)).AndReturn(True)
self.mox.ReplayAll()

View File

@@ -189,7 +189,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
'role_list'),
api.base: ('is_service_enabled',),
api.cinder: ('is_volume_service_enabled',),
api.neutron: ('is_extension_supported',),
api.neutron: ('is_extension_supported',
'is_router_enabled',),
quotas: ('get_default_quota_data',)})
def test_add_project_get(self):
quota = self.quotas.first()
@@ -211,6 +212,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
.AndReturn(default_domain)
api.neutron.is_extension_supported(
IsA(http.HttpRequest), 'security-group').AndReturn(True)
api.neutron.is_router_enabled(
IsA(http.HttpRequest)).AndReturn(True)
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
api.keystone.get_default_role(IsA(http.HttpRequest)) \
@@ -258,7 +261,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
'role_list',
'domain_get'),
api.neutron: ('is_extension_supported',
'tenant_quota_get'),
'tenant_quota_get',
'is_router_enabled',),
quotas: ('get_default_quota_data',)})
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
def test_add_project_get_with_neutron(self):
@@ -271,6 +275,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
.MultipleTimes().AndReturn(True)
api.neutron.is_extension_supported(
IsA(http.HttpRequest), 'security-group').AndReturn(True)
api.neutron.is_router_enabled(
IsA(http.HttpRequest)).AndReturn(True)
api.neutron.tenant_quota_get(IsA(http.HttpRequest),
tenant_id=self.tenant.id) \
.AndReturn(neutron_quotas)

View File

@@ -359,6 +359,7 @@ class FloatingIpNeutronViewTests(FloatingIpViewTests):
'security_group_list',
'tenant_floating_ip_list'),
api.neutron: ('is_extension_supported',
'is_router_enabled',
'tenant_quota_get',
'network_list',
'router_list',
@@ -387,6 +388,8 @@ class FloatingIpNeutronViewTests(FloatingIpViewTests):
IsA(http.HttpRequest), 'security-group').AndReturn(True)
api.neutron.is_extension_supported(IsA(http.HttpRequest), 'quotas') \
.AndReturn(True)
api.neutron.is_router_enabled(IsA(http.HttpRequest)) \
.AndReturn(True)
api.neutron.tenant_quota_get(IsA(http.HttpRequest), self.tenant.id) \
.AndReturn(self.neutron_quotas.first())
api.neutron.router_list(IsA(http.HttpRequest)) \
@@ -421,6 +424,7 @@ class FloatingIpNeutronViewTests(FloatingIpViewTests):
'security_group_list',
'tenant_floating_ip_list'),
api.neutron: ('is_extension_supported',
'is_router_enabled',
'tenant_quota_get',
'network_list',
'router_list',
@@ -449,6 +453,8 @@ class FloatingIpNeutronViewTests(FloatingIpViewTests):
IsA(http.HttpRequest), 'security-group').AndReturn(True)
api.neutron.is_extension_supported(IsA(http.HttpRequest), 'quotas') \
.AndReturn(True)
api.neutron.is_router_enabled(
IsA(http.HttpRequest)).AndReturn(True)
api.neutron.tenant_quota_get(IsA(http.HttpRequest), self.tenant.id) \
.AndReturn(self.neutron_quotas.first())
api.neutron.router_list(IsA(http.HttpRequest)) \

View File

@@ -395,3 +395,29 @@ class QuotaTests(test.APITestCase):
_("Unable to retrieve volume limit information."))
self.mox.ReplayAll()
quotas.tenant_limit_usages(self.request)
@test.create_stubs({api.neutron: ('is_router_enabled',
'is_extension_supported',
'is_quotas_extension_supported',),
api.cinder: ('is_volume_service_enabled',),
api.base: ('is_service_enabled',)})
def test_get_disabled_quotas_router_disabled(self):
api.cinder.is_volume_service_enabled(
IsA(http.HttpRequest)
).AndReturn(True)
api.base.is_service_enabled(IsA(http.HttpRequest),
'network').AndReturn(True)
api.neutron.is_extension_supported(IsA(http.HttpRequest),
'security-group').AndReturn(True)
api.neutron.is_router_enabled(IsA(http.HttpRequest)).AndReturn(False)
api.neutron.is_quotas_extension_supported(IsA(http.HttpRequest)) \
.AndReturn(True)
api.base.is_service_enabled(IsA(http.HttpRequest),
'compute').AndReturn(True)
self.mox.ReplayAll()
disabled_quotas = quotas.get_disabled_quotas(self.request)
expected = set(['floating_ips', 'fixed_ips', 'security_groups',
'security_group_rules', 'router', 'floatingip'])
self.assertEqual(expected, disabled_quotas)

View File

@@ -186,8 +186,8 @@ def get_tenant_quota_data(request, disabled_quotas=None, tenant_id=None):
if not disabled_quotas:
return qs
# Check if neutron is enabled by looking for network and router
if 'network' and 'router' not in disabled_quotas:
# Check if neutron is enabled by looking for network
if 'network' not in disabled_quotas:
tenant_id = tenant_id or request.user.tenant_id
neutron_quotas = neutron.tenant_quota_get(request, tenant_id)
if 'floating_ips' in disabled_quotas:
@@ -258,6 +258,9 @@ def get_disabled_quotas(request):
# If Nova security group is used, disable Neutron quotas
disabled_quotas.update(['security_group', 'security_group_rule'])
if not neutron.is_router_enabled(request):
disabled_quotas.update(['router', 'floatingip'])
try:
if not neutron.is_quotas_extension_supported(request):
disabled_quotas.update(NEUTRON_QUOTA_FIELDS)