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:
@@ -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
|
||||
|
@@ -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()
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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)) \
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user