Merge "Display Network panels based on neutron ext-list"
This commit is contained in:
commit
8e11b803f6
@ -494,10 +494,10 @@ Default::
|
|||||||
{
|
{
|
||||||
'enable_router': True,
|
'enable_router': True,
|
||||||
'enable_distributed_router': False,
|
'enable_distributed_router': False,
|
||||||
'enable_lb': False,
|
'enable_lb': True,
|
||||||
'enable_quotas': False,
|
'enable_quotas': False,
|
||||||
'enable_firewall': False,
|
'enable_firewall': True,
|
||||||
'enable_vpn': False,
|
'enable_vpn': True,
|
||||||
'profile_support': None,
|
'profile_support': None,
|
||||||
'supported_provider_types': ["*"],
|
'supported_provider_types': ["*"],
|
||||||
'segmentation_id_range': None
|
'segmentation_id_range': None
|
||||||
@ -536,10 +536,20 @@ option appropriately depending on your deployment.
|
|||||||
|
|
||||||
.. versionadded:: 2013.1(Grizzly)
|
.. versionadded:: 2013.1(Grizzly)
|
||||||
|
|
||||||
Default: ``False``
|
(Deprecated)
|
||||||
|
|
||||||
Enable or disable the load balancer panel. This option should be enabled only
|
Default: ``True``
|
||||||
when your Neutron deployment supports LBaaS.
|
|
||||||
|
Enables the load balancer panel. load balancer panel will be enabled
|
||||||
|
when this option is True and your Neutron deployment supports
|
||||||
|
LBaaS. If you want to disable load balancer panel even when your
|
||||||
|
Neutron supports LBaaS, set it to False.
|
||||||
|
|
||||||
|
This option is now marked as "deprecated" and will be removed in
|
||||||
|
Kilo or later release. The load balancer panel is now enabled only
|
||||||
|
when LBaaS feature is available in Neutron and this option is no
|
||||||
|
longer needed. We suggest not to use this option to disable the
|
||||||
|
load balancer panel from now on.
|
||||||
|
|
||||||
``supported_provider_types``:
|
``supported_provider_types``:
|
||||||
|
|
||||||
@ -580,17 +590,36 @@ and quota_driver should be DbQuotaDriver (default config).
|
|||||||
|
|
||||||
``enable_firewall``:
|
``enable_firewall``:
|
||||||
|
|
||||||
Default: ``False``
|
(Deprecated)
|
||||||
|
|
||||||
Enables the firewall panel. This option should be enabled when your Neutron
|
Default: ``True``
|
||||||
deployment supports LBaaS.
|
|
||||||
|
Enables the firewall panel. firewall panel will be enabled when this
|
||||||
|
option is True and your Neutron deployment supports FWaaS. If you want
|
||||||
|
to disable firewall panel even when your Neutron supports FWaaS, set
|
||||||
|
it to False.
|
||||||
|
|
||||||
|
This option is now marked as "deprecated" and will be removed in
|
||||||
|
Kilo or later release. The firewall panel is now enabled only
|
||||||
|
when FWaaS feature is available in Neutron and this option is no
|
||||||
|
longer needed. We suggest not to use this option to disable the
|
||||||
|
firewall panel from now on.
|
||||||
|
|
||||||
``enable_vpn``:
|
``enable_vpn``:
|
||||||
|
|
||||||
Default: ``False``
|
(Deprecated)
|
||||||
|
|
||||||
Enables the VPN panel. This option should be enabled when your Neutron
|
Default: ``True``
|
||||||
deployment supports VPNaaS.
|
|
||||||
|
Enables the VPN panel. VPN panel will be enabled when this option is True
|
||||||
|
and your Neutron deployment supports VPNaaS. If you want to disable
|
||||||
|
VPN panel even when your Neutron supports VPNaaS, set it to False.
|
||||||
|
|
||||||
|
This option is now marked as "deprecated" and will be removed in
|
||||||
|
Kilo or later release. The VPN panel is now enabled only
|
||||||
|
when VPNaaS feature is available in Neutron and this option is no
|
||||||
|
longer needed. We suggest not to use this option to disable the
|
||||||
|
VPN panel from now on.
|
||||||
|
|
||||||
``profile_support``:
|
``profile_support``:
|
||||||
|
|
||||||
|
@ -882,10 +882,21 @@ def is_extension_supported(request, extension_alias):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def is_enabled_by_config(name, default=True):
|
||||||
|
network_config = (getattr(settings, 'OPENSTACK_NEUTRON_NETWORK', {}) or
|
||||||
|
getattr(settings, 'OPENSTACK_QUANTUM_NETWORK', {}))
|
||||||
|
return network_config.get(name, default)
|
||||||
|
|
||||||
|
|
||||||
|
@memoized
|
||||||
|
def is_service_enabled(request, config_name, ext_name):
|
||||||
|
return (is_enabled_by_config(config_name) and
|
||||||
|
is_extension_supported(request, ext_name))
|
||||||
|
|
||||||
|
|
||||||
@memoized
|
@memoized
|
||||||
def is_quotas_extension_supported(request):
|
def is_quotas_extension_supported(request):
|
||||||
network_config = getattr(settings, 'OPENSTACK_NEUTRON_NETWORK', {})
|
if (is_enabled_by_config('enable_quotas', False) and
|
||||||
if (network_config.get('enable_quotas', False) and
|
|
||||||
is_extension_supported(request, 'quotas')):
|
is_extension_supported(request, 'quotas')):
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django import http
|
from django import http
|
||||||
from django.test.utils import override_settings
|
|
||||||
|
|
||||||
from horizon.workflows import views
|
from horizon.workflows import views
|
||||||
|
|
||||||
@ -263,7 +262,8 @@ class NetworkTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
self.assertTemplateUsed(res, 'admin/networks/create.html')
|
self.assertTemplateUsed(res, 'admin/networks/create.html')
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_get_with_profile(self):
|
def test_network_create_get_with_profile(self):
|
||||||
self.test_network_create_get(test_with_profile=True)
|
self.test_network_create_get(test_with_profile=True)
|
||||||
|
|
||||||
@ -311,7 +311,8 @@ class NetworkTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_post_with_profile(self):
|
def test_network_create_post_with_profile(self):
|
||||||
self.test_network_create_post(test_with_profile=True)
|
self.test_network_create_post(test_with_profile=True)
|
||||||
|
|
||||||
@ -359,7 +360,8 @@ class NetworkTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_post_network_exception_with_profile(self):
|
def test_network_create_post_network_exception_with_profile(self):
|
||||||
self.test_network_create_post_network_exception(
|
self.test_network_create_post_network_exception(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
@ -420,7 +422,8 @@ class NetworkTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
@test.create_stubs({api.neutron: ('list_extensions',),
|
@test.create_stubs({api.neutron: ('list_extensions',),
|
||||||
api.keystone: ('tenant_list',)})
|
api.keystone: ('tenant_list',)})
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={
|
||||||
'segmentation_id_range': {'vxlan': [10, 20]}})
|
'segmentation_id_range': {'vxlan': [10, 20]}})
|
||||||
def test_network_create_vxlan_segmentation_id_custom(self):
|
def test_network_create_vxlan_segmentation_id_custom(self):
|
||||||
tenants = self.tenants.list()
|
tenants = self.tenants.list()
|
||||||
@ -449,7 +452,8 @@ class NetworkTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
@test.create_stubs({api.neutron: ('list_extensions',),
|
@test.create_stubs({api.neutron: ('list_extensions',),
|
||||||
api.keystone: ('tenant_list',)})
|
api.keystone: ('tenant_list',)})
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={
|
||||||
'supported_provider_types': []})
|
'supported_provider_types': []})
|
||||||
def test_network_create_no_provider_types(self):
|
def test_network_create_no_provider_types(self):
|
||||||
tenants = self.tenants.list()
|
tenants = self.tenants.list()
|
||||||
@ -469,7 +473,8 @@ class NetworkTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
@test.create_stubs({api.neutron: ('list_extensions',),
|
@test.create_stubs({api.neutron: ('list_extensions',),
|
||||||
api.keystone: ('tenant_list',)})
|
api.keystone: ('tenant_list',)})
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={
|
||||||
'supported_provider_types': ['local', 'flat', 'gre']})
|
'supported_provider_types': ['local', 'flat', 'gre']})
|
||||||
def test_network_create_unsupported_provider_types(self):
|
def test_network_create_unsupported_provider_types(self):
|
||||||
tenants = self.tenants.list()
|
tenants = self.tenants.list()
|
||||||
|
@ -20,7 +20,6 @@ import os
|
|||||||
import django
|
import django
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django import http
|
from django import http
|
||||||
from django.test.utils import override_settings
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils import unittest
|
from django.utils import unittest
|
||||||
|
|
||||||
@ -233,7 +232,7 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
api.neutron: ('is_extension_supported',
|
api.neutron: ('is_extension_supported',
|
||||||
'tenant_quota_get'),
|
'tenant_quota_get'),
|
||||||
quotas: ('get_default_quota_data',)})
|
quotas: ('get_default_quota_data',)})
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_add_project_get_with_neutron(self):
|
def test_add_project_get_with_neutron(self):
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
neutron_quotas = self.neutron_quotas.first()
|
neutron_quotas = self.neutron_quotas.first()
|
||||||
@ -380,7 +379,7 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||||
'tenant_quota_update')})
|
'tenant_quota_update')})
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_add_project_post_with_neutron(self):
|
def test_add_project_post_with_neutron(self):
|
||||||
quota_data = self.neutron_quotas.first()
|
quota_data = self.neutron_quotas.first()
|
||||||
neutron_updated_quota = dict([(key, quota_data.get(key).limit)
|
neutron_updated_quota = dict([(key, quota_data.get(key).limit)
|
||||||
@ -1139,7 +1138,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||||
'tenant_quota_get',
|
'tenant_quota_get',
|
||||||
'tenant_quota_update')})
|
'tenant_quota_update')})
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_update_project_save_with_neutron(self):
|
def test_update_project_save_with_neutron(self):
|
||||||
quota_data = self.neutron_quotas.first()
|
quota_data = self.neutron_quotas.first()
|
||||||
neutron_updated_quota = dict([(key, quota_data.get(key).limit)
|
neutron_updated_quota = dict([(key, quota_data.get(key).limit)
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django import http
|
from django import http
|
||||||
from django.test.utils import override_settings
|
|
||||||
|
|
||||||
from mox import IsA # noqa
|
from mox import IsA # noqa
|
||||||
|
|
||||||
@ -190,7 +189,7 @@ class FloatingIpNeutronViewTests(FloatingIpViewTests):
|
|||||||
'tenant_floating_ip_list'),
|
'tenant_floating_ip_list'),
|
||||||
api.neutron: ('is_extension_supported',
|
api.neutron: ('is_extension_supported',
|
||||||
'tenant_quota_get')})
|
'tenant_quota_get')})
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_correct_quotas_displayed(self):
|
def test_correct_quotas_displayed(self):
|
||||||
servers = [s for s in self.servers.list()
|
servers = [s for s in self.servers.list()
|
||||||
if s.tenant_id == self.request.user.tenant_id]
|
if s.tenant_id == self.request.user.tenant_id]
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
import horizon
|
import horizon
|
||||||
|
|
||||||
|
from openstack_dashboard.api import neutron
|
||||||
from openstack_dashboard.dashboards.project import dashboard
|
from openstack_dashboard.dashboards.project import dashboard
|
||||||
|
|
||||||
|
|
||||||
@ -23,8 +23,17 @@ class Firewall(horizon.Panel):
|
|||||||
slug = "firewalls"
|
slug = "firewalls"
|
||||||
permissions = ('openstack.services.network',)
|
permissions = ('openstack.services.network',)
|
||||||
|
|
||||||
|
def can_access(self, context):
|
||||||
|
request = context['request']
|
||||||
|
if not request.user.has_perms(self.permissions):
|
||||||
|
return False
|
||||||
|
if not neutron.is_service_enabled(request,
|
||||||
|
config_name='enable_firewall',
|
||||||
|
ext_name='fwaas'):
|
||||||
|
return False
|
||||||
|
if not super(Firewall, self).can_access(context):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
if getattr(settings,
|
|
||||||
'OPENSTACK_NEUTRON_NETWORK',
|
dashboard.Project.register(Firewall)
|
||||||
{}).get('enable_firewall', False):
|
|
||||||
dashboard.Project.register(Firewall)
|
|
||||||
|
@ -1382,7 +1382,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
def test_launch_instance_get_with_only_one_network(self):
|
def test_launch_instance_get_with_only_one_network(self):
|
||||||
self.test_launch_instance_get(only_one_network=True)
|
self.test_launch_instance_get(only_one_network=True)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_instance_get_with_profile(self):
|
def test_launch_instance_get_with_profile(self):
|
||||||
self.test_launch_instance_get(test_with_profile=True)
|
self.test_launch_instance_get(test_with_profile=True)
|
||||||
@ -1471,7 +1471,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
for volume in bootable_volumes:
|
for volume in bootable_volumes:
|
||||||
self.assertTrue(volume in volume_sources_ids)
|
self.assertTrue(volume in volume_sources_ids)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_instance_get_bootable_volumes_with_profile(self):
|
def test_launch_instance_get_bootable_volumes_with_profile(self):
|
||||||
self.test_launch_instance_get_bootable_volumes(test_with_profile=True)
|
self.test_launch_instance_get_bootable_volumes(test_with_profile=True)
|
||||||
@ -1597,7 +1597,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
def test_launch_instance_post_no_disk_config_supported(self):
|
def test_launch_instance_post_no_disk_config_supported(self):
|
||||||
self.test_launch_instance_post(disk_config=False)
|
self.test_launch_instance_post(disk_config=False)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_instance_post_with_profile(self):
|
def test_launch_instance_post_with_profile(self):
|
||||||
self.test_launch_instance_post(test_with_profile=True)
|
self.test_launch_instance_post(test_with_profile=True)
|
||||||
@ -1719,7 +1719,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_instance_post_boot_from_volume_with_profile(self):
|
def test_launch_instance_post_boot_from_volume_with_profile(self):
|
||||||
self.test_launch_instance_post_boot_from_volume(test_with_profile=True)
|
self.test_launch_instance_post_boot_from_volume(test_with_profile=True)
|
||||||
@ -1846,7 +1846,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_lnch_inst_post_no_images_avail_boot_from_vol_with_profile(self):
|
def test_lnch_inst_post_no_images_avail_boot_from_vol_with_profile(self):
|
||||||
self.test_launch_instance_post_no_images_available_boot_from_volume(
|
self.test_launch_instance_post_no_images_available_boot_from_volume(
|
||||||
@ -1939,7 +1939,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
self.assertFormErrors(res, 1, "You must select an image.")
|
self.assertFormErrors(res, 1, "You must select an image.")
|
||||||
self.assertTemplateUsed(res, views.WorkflowView.template_name)
|
self.assertTemplateUsed(res, views.WorkflowView.template_name)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_instance_post_no_images_available_with_profile(self):
|
def test_launch_instance_post_no_images_available_with_profile(self):
|
||||||
self.test_launch_instance_post_no_images_available(
|
self.test_launch_instance_post_no_images_available(
|
||||||
@ -2007,7 +2007,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
|
|
||||||
self.assertTemplateUsed(res, views.WorkflowView.template_name)
|
self.assertTemplateUsed(res, views.WorkflowView.template_name)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_flavorlist_error_with_profile(self):
|
def test_launch_flavorlist_error_with_profile(self):
|
||||||
self.test_launch_flavorlist_error(test_with_profile=True)
|
self.test_launch_flavorlist_error(test_with_profile=True)
|
||||||
@ -2126,7 +2126,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_form_keystone_exception_with_profile(self):
|
def test_launch_form_keystone_exception_with_profile(self):
|
||||||
self.test_launch_form_keystone_exception(test_with_profile=True)
|
self.test_launch_form_keystone_exception(test_with_profile=True)
|
||||||
@ -2341,7 +2341,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
def test_launch_form_ram_cores_count_error(self):
|
def test_launch_form_ram_cores_count_error(self):
|
||||||
self._test_launch_form_count_error('both', 1, test_with_profile=False)
|
self._test_launch_form_count_error('both', 1, test_with_profile=False)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_form_instance_count_error_with_profile(self):
|
def test_launch_form_instance_count_error_with_profile(self):
|
||||||
self.test_launch_form_instance_count_error(test_with_profile=True)
|
self.test_launch_form_instance_count_error(test_with_profile=True)
|
||||||
@ -2460,13 +2460,13 @@ class InstanceTests(helpers.TestCase):
|
|||||||
self._test_launch_form_instance_requirement_error(image, flavor,
|
self._test_launch_form_instance_requirement_error(image, flavor,
|
||||||
test_with_profile)
|
test_with_profile)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_form_instance_requirement_error_disk_with_profile(self):
|
def test_launch_form_instance_requirement_error_disk_with_profile(self):
|
||||||
self.test_launch_form_instance_requirement_error_disk(
|
self.test_launch_form_instance_requirement_error_disk(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_form_instance_requirement_error_ram_with_profile(self):
|
def test_launch_form_instance_requirement_error_ram_with_profile(self):
|
||||||
self.test_launch_form_instance_requirement_error_ram(
|
self.test_launch_form_instance_requirement_error_ram(
|
||||||
@ -2580,13 +2580,13 @@ class InstanceTests(helpers.TestCase):
|
|||||||
self._test_launch_form_instance_volume_size(image, 1.5, msg,
|
self._test_launch_form_instance_volume_size(image, 1.5, msg,
|
||||||
test_with_profile)
|
test_with_profile)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_form_instance_volume_size_error_with_profile(self):
|
def test_launch_form_instance_volume_size_error_with_profile(self):
|
||||||
self.test_launch_form_instance_volume_size_error(
|
self.test_launch_form_instance_volume_size_error(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_launch_form_instance_non_int_volume_size_with_profile(self):
|
def test_launch_form_instance_non_int_volume_size_with_profile(self):
|
||||||
self.test_launch_form_instance_non_int_volume_size(
|
self.test_launch_form_instance_non_int_volume_size(
|
||||||
@ -2746,7 +2746,7 @@ class InstanceTests(helpers.TestCase):
|
|||||||
html=True,
|
html=True,
|
||||||
msg_prefix="The default key pair was not selected.")
|
msg_prefix="The default key pair was not selected.")
|
||||||
|
|
||||||
@django.test.utils.override_settings(
|
@helpers.update_settings(
|
||||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_select_default_keypair_if_only_one_with_profile(self):
|
def test_select_default_keypair_if_only_one_with_profile(self):
|
||||||
self.test_select_default_keypair_if_only_one(test_with_profile=True)
|
self.test_select_default_keypair_if_only_one(test_with_profile=True)
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
import horizon
|
import horizon
|
||||||
|
|
||||||
|
from openstack_dashboard.api import neutron
|
||||||
from openstack_dashboard.dashboards.project import dashboard
|
from openstack_dashboard.dashboards.project import dashboard
|
||||||
|
|
||||||
|
|
||||||
@ -23,11 +23,17 @@ class LoadBalancer(horizon.Panel):
|
|||||||
slug = "loadbalancers"
|
slug = "loadbalancers"
|
||||||
permissions = ('openstack.services.network',)
|
permissions = ('openstack.services.network',)
|
||||||
|
|
||||||
|
def can_access(self, context):
|
||||||
|
request = context['request']
|
||||||
|
if not request.user.has_perms(self.permissions):
|
||||||
|
return False
|
||||||
|
if not neutron.is_service_enabled(request,
|
||||||
|
config_name='enable_lb',
|
||||||
|
ext_name='lbaas'):
|
||||||
|
return False
|
||||||
|
if not super(LoadBalancer, self).can_access(context):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
network_config = (
|
|
||||||
getattr(settings, 'OPENSTACK_NEUTRON_NETWORK', {}) or
|
|
||||||
getattr(settings, 'OPENSTACK_QUANTUM_NETWORK', {})
|
|
||||||
)
|
|
||||||
|
|
||||||
if network_config.get('enable_lb'):
|
dashboard.Project.register(LoadBalancer)
|
||||||
dashboard.Project.register(LoadBalancer)
|
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django import http
|
from django import http
|
||||||
from django.test.utils import override_settings
|
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
|
|
||||||
from horizon.workflows import views
|
from horizon.workflows import views
|
||||||
@ -291,7 +290,8 @@ class NetworkTests(test.TestCase):
|
|||||||
'<CreateSubnetDetail: createsubnetdetailaction>']
|
'<CreateSubnetDetail: createsubnetdetailaction>']
|
||||||
self.assertQuerysetEqual(workflow.steps, expected_objs)
|
self.assertQuerysetEqual(workflow.steps, expected_objs)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_get_with_profile(self):
|
def test_network_create_get_with_profile(self):
|
||||||
self.test_network_create_get(test_with_profile=True)
|
self.test_network_create_get(test_with_profile=True)
|
||||||
|
|
||||||
@ -325,7 +325,8 @@ class NetworkTests(test.TestCase):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_post_with_profile(self):
|
def test_network_create_post_with_profile(self):
|
||||||
self.test_network_create_post(test_with_profile=True)
|
self.test_network_create_post(test_with_profile=True)
|
||||||
|
|
||||||
@ -372,11 +373,12 @@ class NetworkTests(test.TestCase):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_post_with_subnet_w_profile(self):
|
def test_network_create_post_with_subnet_w_profile(self):
|
||||||
self.test_network_create_post_with_subnet(test_with_profile=True)
|
self.test_network_create_post_with_subnet(test_with_profile=True)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_ipv6': False})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_ipv6': False})
|
||||||
def test_create_network_with_ipv6_disabled(self):
|
def test_create_network_with_ipv6_disabled(self):
|
||||||
self.test_network_create_post_with_subnet(test_with_ipv6=False)
|
self.test_network_create_post_with_subnet(test_with_ipv6=False)
|
||||||
|
|
||||||
@ -410,7 +412,8 @@ class NetworkTests(test.TestCase):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_post_nw_exception_w_profile(self):
|
def test_network_create_post_nw_exception_w_profile(self):
|
||||||
self.test_network_create_post_network_exception(
|
self.test_network_create_post_network_exception(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
@ -447,7 +450,8 @@ class NetworkTests(test.TestCase):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_nw_create_post_w_subnet_nw_exception_w_profile(self):
|
def test_nw_create_post_w_subnet_nw_exception_w_profile(self):
|
||||||
self.test_network_create_post_with_subnet_network_exception(
|
self.test_network_create_post_with_subnet_network_exception(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
@ -496,7 +500,8 @@ class NetworkTests(test.TestCase):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_nw_create_post_w_subnet_subnet_exception_w_profile(self):
|
def test_nw_create_post_w_subnet_subnet_exception_w_profile(self):
|
||||||
self.test_network_create_post_with_subnet_subnet_exception(
|
self.test_network_create_post_with_subnet_subnet_exception(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
@ -526,7 +531,8 @@ class NetworkTests(test.TestCase):
|
|||||||
self.assertContains(res, escape('Specify "Network Address" or '
|
self.assertContains(res, escape('Specify "Network Address" or '
|
||||||
'clear "Create Subnet" checkbox.'))
|
'clear "Create Subnet" checkbox.'))
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_nw_create_post_w_subnet_no_cidr_w_profile(self):
|
def test_nw_create_post_w_subnet_no_cidr_w_profile(self):
|
||||||
self.test_network_create_post_with_subnet_nocidr(
|
self.test_network_create_post_with_subnet_nocidr(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
@ -558,7 +564,8 @@ class NetworkTests(test.TestCase):
|
|||||||
expected_msg = "The subnet in the Network Address is too small (/32)."
|
expected_msg = "The subnet in the Network Address is too small (/32)."
|
||||||
self.assertContains(res, expected_msg)
|
self.assertContains(res, expected_msg)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_nw_create_post_w_subnet_cidr_without_mask_w_profile(self):
|
def test_nw_create_post_w_subnet_cidr_without_mask_w_profile(self):
|
||||||
self.test_network_create_post_with_subnet_cidr_without_mask(
|
self.test_network_create_post_with_subnet_cidr_without_mask(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
@ -592,7 +599,8 @@ class NetworkTests(test.TestCase):
|
|||||||
expected_msg = 'Network Address and IP version are inconsistent.'
|
expected_msg = 'Network Address and IP version are inconsistent.'
|
||||||
self.assertContains(res, expected_msg)
|
self.assertContains(res, expected_msg)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_post_with_subnet_cidr_inconsistent_w_profile(self):
|
def test_network_create_post_with_subnet_cidr_inconsistent_w_profile(self):
|
||||||
self.test_network_create_post_with_subnet_cidr_inconsistent(
|
self.test_network_create_post_with_subnet_cidr_inconsistent(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
@ -625,7 +633,8 @@ class NetworkTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertContains(res, 'Gateway IP and IP version are inconsistent.')
|
self.assertContains(res, 'Gateway IP and IP version are inconsistent.')
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
@test.update_settings(
|
||||||
|
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||||
def test_network_create_post_with_subnet_gw_inconsistent_w_profile(self):
|
def test_network_create_post_with_subnet_gw_inconsistent_w_profile(self):
|
||||||
self.test_network_create_post_with_subnet_gw_inconsistent(
|
self.test_network_create_post_with_subnet_gw_inconsistent(
|
||||||
test_with_profile=True)
|
test_with_profile=True)
|
||||||
|
@ -20,7 +20,6 @@ import datetime
|
|||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django import http
|
from django import http
|
||||||
from django.test.utils import override_settings
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from mox import IsA # noqa
|
from mox import IsA # noqa
|
||||||
@ -273,15 +272,15 @@ class UsageViewTests(test.TestCase):
|
|||||||
self.assertTemplateUsed(res, 'project/overview/usage.html')
|
self.assertTemplateUsed(res, 'project/overview/usage.html')
|
||||||
self.assertTrue(isinstance(res.context['usage'], usage.ProjectUsage))
|
self.assertTrue(isinstance(res.context['usage'], usage.ProjectUsage))
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_usage_with_neutron(self):
|
def test_usage_with_neutron(self):
|
||||||
self._test_usage_with_neutron(neutron_sg_enabled=True)
|
self._test_usage_with_neutron(neutron_sg_enabled=True)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_usage_with_neutron_nova_security_group(self):
|
def test_usage_with_neutron_nova_security_group(self):
|
||||||
self._test_usage_with_neutron(neutron_sg_enabled=False)
|
self._test_usage_with_neutron(neutron_sg_enabled=False)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_usage_with_neutron_floating_ip_disabled(self):
|
def test_usage_with_neutron_floating_ip_disabled(self):
|
||||||
self._test_usage_with_neutron(neutron_fip_enabled=False)
|
self._test_usage_with_neutron(neutron_fip_enabled=False)
|
||||||
|
|
||||||
@ -344,7 +343,7 @@ class UsageViewTests(test.TestCase):
|
|||||||
max_security_groups = res_limits['maxSecurityGroups']
|
max_security_groups = res_limits['maxSecurityGroups']
|
||||||
self.assertEqual(max_security_groups, max_sg_expected)
|
self.assertEqual(max_security_groups, max_sg_expected)
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_usage_with_neutron_quotas_ext_error(self):
|
def test_usage_with_neutron_quotas_ext_error(self):
|
||||||
self._test_usage_with_neutron_prepare()
|
self._test_usage_with_neutron_prepare()
|
||||||
api.neutron.is_extension_supported(
|
api.neutron.is_extension_supported(
|
||||||
@ -353,7 +352,7 @@ class UsageViewTests(test.TestCase):
|
|||||||
self._test_usage_with_neutron_check(max_fip_expected=float("inf"),
|
self._test_usage_with_neutron_check(max_fip_expected=float("inf"),
|
||||||
max_sg_expected=float("inf"))
|
max_sg_expected=float("inf"))
|
||||||
|
|
||||||
@override_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_quotas': True})
|
||||||
def test_usage_with_neutron_sg_ext_error(self):
|
def test_usage_with_neutron_sg_ext_error(self):
|
||||||
self._test_usage_with_neutron_prepare()
|
self._test_usage_with_neutron_prepare()
|
||||||
api.neutron.is_extension_supported(
|
api.neutron.is_extension_supported(
|
||||||
|
@ -14,11 +14,11 @@
|
|||||||
#
|
#
|
||||||
# @author: Tatiana Mazur
|
# @author: Tatiana Mazur
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
import horizon
|
import horizon
|
||||||
|
|
||||||
|
from openstack_dashboard.api import neutron
|
||||||
from openstack_dashboard.dashboards.project import dashboard
|
from openstack_dashboard.dashboards.project import dashboard
|
||||||
|
|
||||||
|
|
||||||
@ -27,6 +27,17 @@ class VPN(horizon.Panel):
|
|||||||
slug = 'vpn'
|
slug = 'vpn'
|
||||||
permissions = ('openstack.services.network',)
|
permissions = ('openstack.services.network',)
|
||||||
|
|
||||||
|
def can_access(self, context):
|
||||||
|
request = context['request']
|
||||||
|
if not request.user.has_perms(self.permissions):
|
||||||
|
return False
|
||||||
|
if not neutron.is_service_enabled(request,
|
||||||
|
config_name='enable_vpn',
|
||||||
|
ext_name='vpnaas'):
|
||||||
|
return False
|
||||||
|
if not super(VPN, self).can_access(context):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
if getattr(settings, 'OPENSTACK_NEUTRON_NETWORK', {}).get('enable_vpn', False):
|
|
||||||
dashboard.Project.register(VPN)
|
dashboard.Project.register(VPN)
|
||||||
|
@ -180,12 +180,12 @@ OPENSTACK_CINDER_FEATURES = {
|
|||||||
# balancer service, security groups, quotas, VPN service.
|
# balancer service, security groups, quotas, VPN service.
|
||||||
OPENSTACK_NEUTRON_NETWORK = {
|
OPENSTACK_NEUTRON_NETWORK = {
|
||||||
'enable_router': True,
|
'enable_router': True,
|
||||||
'enable_lb': False,
|
|
||||||
'enable_firewall': False,
|
|
||||||
'enable_quotas': True,
|
'enable_quotas': True,
|
||||||
'enable_vpn': False,
|
|
||||||
'enable_ipv6': True,
|
'enable_ipv6': True,
|
||||||
'enable_distributed_router': True,
|
'enable_distributed_router': True,
|
||||||
|
'enable_lb': True,
|
||||||
|
'enable_firewall': True,
|
||||||
|
'enable_vpn': True,
|
||||||
# The profile_support option is used to detect if an external router can be
|
# The profile_support option is used to detect if an external router can be
|
||||||
# configured via the dashboard. When using specific plugins the
|
# configured via the dashboard. When using specific plugins the
|
||||||
# profile_support can be turned on if needed.
|
# profile_support can be turned on if needed.
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import collections
|
||||||
|
import copy
|
||||||
from functools import wraps # noqa
|
from functools import wraps # noqa
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@ -28,6 +30,7 @@ from django.core.handlers import wsgi
|
|||||||
from django.core import urlresolvers
|
from django.core import urlresolvers
|
||||||
from django import http
|
from django import http
|
||||||
from django.test.client import RequestFactory # noqa
|
from django.test.client import RequestFactory # noqa
|
||||||
|
from django.test import utils as django_test_utils
|
||||||
from django.utils.importlib import import_module # noqa
|
from django.utils.importlib import import_module # noqa
|
||||||
from django.utils import unittest
|
from django.utils import unittest
|
||||||
import glanceclient
|
import glanceclient
|
||||||
@ -490,3 +493,28 @@ class PluginTestCase(TestCase):
|
|||||||
urlresolvers.clear_url_caches()
|
urlresolvers.clear_url_caches()
|
||||||
reload(import_module(settings.ROOT_URLCONF))
|
reload(import_module(settings.ROOT_URLCONF))
|
||||||
base.Horizon._urls()
|
base.Horizon._urls()
|
||||||
|
|
||||||
|
|
||||||
|
class update_settings(django_test_utils.override_settings):
|
||||||
|
"""override_settings which allows override an item in dict.
|
||||||
|
|
||||||
|
django original override_settings replaces a dict completely,
|
||||||
|
however OpenStack dashboard setting has many dictionary configuration
|
||||||
|
and there are test case where we want to override only one item in
|
||||||
|
a dictionary and keep other items in the dictionary.
|
||||||
|
This version of override_settings allows this if keep_dict is True.
|
||||||
|
|
||||||
|
If keep_dict False is specified, the original behavior of
|
||||||
|
Django override_settings is used.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, keep_dict=True, **kwargs):
|
||||||
|
if keep_dict:
|
||||||
|
for key, new_value in kwargs.items():
|
||||||
|
value = getattr(settings, key, None)
|
||||||
|
if (isinstance(new_value, collections.Mapping) and
|
||||||
|
isinstance(value, collections.Mapping)):
|
||||||
|
copied = copy.copy(value)
|
||||||
|
copied.update(new_value)
|
||||||
|
kwargs[key] = copied
|
||||||
|
super(update_settings, self).__init__(**kwargs)
|
||||||
|
@ -105,10 +105,16 @@ OPENSTACK_CINDER_FEATURES = {
|
|||||||
|
|
||||||
OPENSTACK_NEUTRON_NETWORK = {
|
OPENSTACK_NEUTRON_NETWORK = {
|
||||||
'enable_router': True,
|
'enable_router': True,
|
||||||
'enable_lb': True,
|
|
||||||
'enable_firewall': True,
|
|
||||||
'enable_quotas': False, # Enabled in specific tests only
|
'enable_quotas': False, # Enabled in specific tests only
|
||||||
'enable_vpn': True,
|
# Parameters below (enable_lb, enable_firewall, enable_vpn)
|
||||||
|
# control if these panels are displayed or not,
|
||||||
|
# i.e. they only affect the navigation menu.
|
||||||
|
# These panels are registered even if enable_XXX is False,
|
||||||
|
# so we don't need to set them to True in most unit tests
|
||||||
|
# to avoid stubbing neutron extension check calls.
|
||||||
|
'enable_lb': False,
|
||||||
|
'enable_firewall': False,
|
||||||
|
'enable_vpn': False,
|
||||||
'profile_support': None,
|
'profile_support': None,
|
||||||
'enable_distributed_router': False,
|
'enable_distributed_router': False,
|
||||||
# 'profile_support': 'cisco'
|
# 'profile_support': 'cisco'
|
||||||
|
Loading…
Reference in New Issue
Block a user