Merge "Remove all remaining vendor specific code"
This commit is contained in:
commit
8738c6db72
@ -1312,15 +1312,6 @@ 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``
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Default: ``None``
|
||||
|
||||
This option specifies a type of network port profile support. Currently the
|
||||
available value is either ``None`` or ``"cisco"``. ``None`` means to disable
|
||||
port profile support. ``cisco`` can be used with Neutron Cisco plugins.
|
||||
|
||||
``supported_provider_types``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -135,12 +135,6 @@ class PortAllowedAddressPair(NeutronAPIDictWrapper):
|
||||
self.id = addr_pair['ip_address']
|
||||
|
||||
|
||||
class Profile(NeutronAPIDictWrapper):
|
||||
"""Wrapper for neutron profiles."""
|
||||
_attrs = ['profile_id', 'name', 'segment_type', 'segment_range',
|
||||
'sub_type', 'multicast_ip_index', 'multicast_ip_range']
|
||||
|
||||
|
||||
class Router(NeutronAPIDictWrapper):
|
||||
"""Wrapper for neutron routers."""
|
||||
|
||||
@ -711,9 +705,6 @@ def network_create(request, **kwargs):
|
||||
:returns: Network object
|
||||
"""
|
||||
LOG.debug("network_create(): kwargs = %s" % kwargs)
|
||||
# In the case network profiles are being used, profile id is needed.
|
||||
if 'net_profile_id' in kwargs:
|
||||
kwargs['n1kv:profile'] = kwargs.pop('net_profile_id')
|
||||
if 'tenant_id' not in kwargs:
|
||||
kwargs['tenant_id'] = request.user.project_id
|
||||
body = {'network': kwargs}
|
||||
@ -900,9 +891,6 @@ def port_create(request, network_id, **kwargs):
|
||||
:returns: Port object
|
||||
"""
|
||||
LOG.debug("port_create(): netid=%s, kwargs=%s" % (network_id, kwargs))
|
||||
# In the case policy profiles are being used, profile id is needed.
|
||||
if 'policy_profile_id' in kwargs:
|
||||
kwargs['n1kv:profile'] = kwargs.pop('policy_profile_id')
|
||||
kwargs = unescape_port_kwargs(**kwargs)
|
||||
body = {'port': {'network_id': network_id}}
|
||||
if 'tenant_id' not in kwargs:
|
||||
@ -927,71 +915,6 @@ def port_update(request, port_id, **kwargs):
|
||||
return Port(port)
|
||||
|
||||
|
||||
@profiler.trace
|
||||
def profile_list(request, type_p, **params):
|
||||
LOG.debug("profile_list(): "
|
||||
"profile_type=%(profile_type)s, params=%(params)s",
|
||||
{'profile_type': type_p, 'params': params})
|
||||
if type_p == 'network':
|
||||
profiles = neutronclient(request).list_network_profiles(
|
||||
**params).get('network_profiles')
|
||||
elif type_p == 'policy':
|
||||
profiles = neutronclient(request).list_policy_profiles(
|
||||
**params).get('policy_profiles')
|
||||
return [Profile(n) for n in profiles]
|
||||
|
||||
|
||||
@profiler.trace
|
||||
def profile_get(request, profile_id, **params):
|
||||
LOG.debug("profile_get(): "
|
||||
"profileid=%(profileid)s, params=%(params)s",
|
||||
{'profileid': profile_id, 'params': params})
|
||||
profile = neutronclient(request).show_network_profile(
|
||||
profile_id, **params).get('network_profile')
|
||||
return Profile(profile)
|
||||
|
||||
|
||||
@profiler.trace
|
||||
def profile_create(request, **kwargs):
|
||||
LOG.debug("profile_create(): kwargs=%s", kwargs)
|
||||
body = {'network_profile': {}}
|
||||
body['network_profile'].update(kwargs)
|
||||
profile = neutronclient(request).create_network_profile(
|
||||
body=body).get('network_profile')
|
||||
return Profile(profile)
|
||||
|
||||
|
||||
@profiler.trace
|
||||
def profile_delete(request, profile_id):
|
||||
LOG.debug("profile_delete(): profile_id=%s", profile_id)
|
||||
neutronclient(request).delete_network_profile(profile_id)
|
||||
|
||||
|
||||
@profiler.trace
|
||||
def profile_update(request, profile_id, **kwargs):
|
||||
LOG.debug("profile_update(): "
|
||||
"profileid=%(profileid)s, kwargs=%(kwargs)s",
|
||||
{'profileid': profile_id, 'kwargs': kwargs})
|
||||
body = {'network_profile': kwargs}
|
||||
profile = neutronclient(request).update_network_profile(
|
||||
profile_id, body=body).get('network_profile')
|
||||
return Profile(profile)
|
||||
|
||||
|
||||
@profiler.trace
|
||||
def profile_bindings_list(request, type_p, **params):
|
||||
LOG.debug("profile_bindings_list(): "
|
||||
"profile_type=%(profile_type)s params=%(params)s",
|
||||
{'profile_type': type_p, 'params': params})
|
||||
if type_p == 'network':
|
||||
bindings = neutronclient(request).list_network_profile_bindings(
|
||||
**params).get('network_profile_bindings')
|
||||
elif type_p == 'policy':
|
||||
bindings = neutronclient(request).list_policy_profile_bindings(
|
||||
**params).get('policy_profile_bindings')
|
||||
return [Profile(n) for n in bindings]
|
||||
|
||||
|
||||
@profiler.trace
|
||||
def router_create(request, **kwargs):
|
||||
LOG.debug("router_create():, kwargs=%s" % kwargs)
|
||||
@ -1303,23 +1226,6 @@ 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
|
||||
# turned on if needed to configure and/or use profiles.
|
||||
# Since this is a temporary mechanism used to detect profile_support
|
||||
# @memorize is not being used.
|
||||
# TODO(absubram): Change this config variable check with
|
||||
# subplugin/plugin detection API when it becomes available.
|
||||
def is_port_profiles_supported():
|
||||
network_config = getattr(settings, 'OPENSTACK_NEUTRON_NETWORK', {})
|
||||
# Can be used to check for vendor specific plugin
|
||||
profile_support = network_config.get('profile_support', None)
|
||||
if str(profile_support).lower() == 'cisco':
|
||||
return True
|
||||
|
||||
|
||||
# FEATURE_MAP is used to define:
|
||||
# - related neutron extension name (key: "extension")
|
||||
# - corresponding dashboard config (key: "config")
|
||||
|
@ -51,7 +51,6 @@ class Networks(generic.View):
|
||||
network, which is up (true) or down (false).
|
||||
:param name (optional): The network name. A request body is optional:
|
||||
If you include it, it can specify this optional attribute.
|
||||
:param net_profile_id (optional): network profile id
|
||||
:param shared (optional): Indicates whether this network is shared
|
||||
across all tenants. By default, only administrative users can
|
||||
change this value.
|
||||
@ -64,8 +63,6 @@ class Networks(generic.View):
|
||||
|
||||
:return: JSON representation of a Network
|
||||
"""
|
||||
if not api.neutron.is_port_profiles_supported():
|
||||
request.DATA.pop("net_profile_id", None)
|
||||
new_network = api.neutron.network_create(request, **request.DATA)
|
||||
return rest_utils.CreatedResponse(
|
||||
'/api/neutron/networks/%s' % new_network.id,
|
||||
|
@ -94,13 +94,6 @@ class CreateNetwork(forms.SelfHandlingForm):
|
||||
label=_("Name"),
|
||||
required=False)
|
||||
tenant_id = forms.ThemableChoiceField(label=_("Project"))
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
widget = None
|
||||
else:
|
||||
widget = forms.HiddenInput()
|
||||
net_profile_id = forms.ChoiceField(label=_("Network Profile"),
|
||||
required=False,
|
||||
widget=widget)
|
||||
network_type = forms.ChoiceField(
|
||||
label=_("Provider Network Type"),
|
||||
help_text=_("The physical mechanism by which the virtual "
|
||||
@ -161,9 +154,6 @@ class CreateNetwork(forms.SelfHandlingForm):
|
||||
tenant_choices.append((tenant.id, tenant.name))
|
||||
self.fields['tenant_id'].choices = tenant_choices
|
||||
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
self.fields['net_profile_id'].choices = (
|
||||
self.get_network_profile_choices(request))
|
||||
try:
|
||||
is_extension_supported = \
|
||||
api.neutron.is_extension_supported(request, 'provider')
|
||||
@ -248,21 +238,6 @@ class CreateNetwork(forms.SelfHandlingForm):
|
||||
else:
|
||||
self.fields['network_type'].choices = network_type_choices
|
||||
|
||||
def get_network_profile_choices(self, request):
|
||||
profile_choices = [('', _("Select a profile"))]
|
||||
for profile in self._get_profiles(request, 'network'):
|
||||
profile_choices.append((profile.id, profile.name))
|
||||
return profile_choices
|
||||
|
||||
def _get_profiles(self, request, type_p):
|
||||
profiles = []
|
||||
try:
|
||||
profiles = api.neutron.profile_list(request, type_p)
|
||||
except Exception:
|
||||
msg = _('Network Profiles could not be retrieved.')
|
||||
exceptions.handle(request, msg)
|
||||
return profiles
|
||||
|
||||
def _hide_provider_network_type(self):
|
||||
self.fields['network_type'].widget = forms.HiddenInput()
|
||||
self.fields['physical_network'].widget = forms.HiddenInput()
|
||||
@ -278,8 +253,6 @@ class CreateNetwork(forms.SelfHandlingForm):
|
||||
'admin_state_up': (data['admin_state'] == 'True'),
|
||||
'shared': data['shared'],
|
||||
'router:external': data['external']}
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
params['net_profile_id'] = data['net_profile_id']
|
||||
if api.neutron.is_extension_supported(request, 'provider'):
|
||||
network_type = data['network_type']
|
||||
params['provider:network_type'] = network_type
|
||||
|
@ -364,18 +364,12 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
subnets = res.context['subnets_table'].data
|
||||
self.assertItemsEqual(subnets, [self.subnets.first()])
|
||||
|
||||
@test.create_stubs({api.neutron: ('profile_list',
|
||||
'is_extension_supported',),
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',),
|
||||
api.keystone: ('tenant_list',)})
|
||||
def test_network_create_get(self,
|
||||
test_with_profile=False):
|
||||
def test_network_create_get(self):
|
||||
tenants = self.tenants.list()
|
||||
api.keystone.tenant_list(IsA(
|
||||
http.HttpRequest)).AndReturn([tenants, False])
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\
|
||||
AndReturn(True)
|
||||
self.mox.ReplayAll()
|
||||
@ -385,18 +379,11 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
|
||||
self.assertTemplateUsed(res, 'horizon/common/_workflow_base.html')
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_get_with_profile(self):
|
||||
self.test_network_create_get(test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list'),
|
||||
api.keystone: ('tenant_list',)})
|
||||
def test_network_create_post(self,
|
||||
test_with_profile=False):
|
||||
def test_network_create_post(self):
|
||||
tenants = self.tenants.list()
|
||||
tenant_id = self.tenants.first().id
|
||||
network = self.networks.first()
|
||||
@ -410,12 +397,6 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
'shared': True,
|
||||
'provider:network_type': 'local',
|
||||
'with_subnet': False}
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\
|
||||
MultipleTimes().AndReturn(True)
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
@ -434,8 +415,6 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
'external': True,
|
||||
'shared': True,
|
||||
'network_type': 'local'}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
url = reverse('horizon:admin:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
@ -444,12 +423,10 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'subnet_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list'),
|
||||
api.keystone: ('tenant_list',)})
|
||||
def test_network_create_post_with_subnet(self,
|
||||
test_with_profile=False):
|
||||
def test_network_create_post_with_subnet(self):
|
||||
tenants = self.tenants.list()
|
||||
tenant_id = self.tenants.first().id
|
||||
network = self.networks.first()
|
||||
@ -465,12 +442,6 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
api.keystone.tenant_list(IsA(http.HttpRequest))\
|
||||
.AndReturn([tenants, False])
|
||||
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\
|
||||
MultipleTimes().AndReturn(True)
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
@ -489,8 +460,6 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
'shared': True,
|
||||
'network_type': 'local',
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
form_data.update(tests.form_data_subnet(subnet, allocation_pools=[]))
|
||||
url = reverse('horizon:admin:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
@ -498,18 +467,11 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_with_profile(self):
|
||||
self.test_network_create_post(test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list'),
|
||||
api.keystone: ('tenant_list',)})
|
||||
def test_network_create_post_network_exception(self,
|
||||
test_with_profile=False):
|
||||
def test_network_create_post_network_exception(self):
|
||||
tenants = self.tenants.list()
|
||||
tenant_id = self.tenants.first().id
|
||||
network = self.networks.first()
|
||||
@ -523,12 +485,6 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
'shared': False,
|
||||
'provider:network_type': 'local',
|
||||
'with_subnet': False}
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\
|
||||
MultipleTimes().AndReturn(True)
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
@ -546,20 +502,12 @@ class NetworkTests(test.BaseAdminViewTests):
|
||||
'external': True,
|
||||
'shared': False,
|
||||
'network_type': 'local'}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
url = reverse('horizon:admin:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_network_exception_with_profile(self):
|
||||
self.test_network_create_post_network_exception(
|
||||
test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',),
|
||||
api.keystone: ('tenant_list',)})
|
||||
def test_network_create_vlan_segmentation_id_invalid(self):
|
||||
|
@ -44,7 +44,7 @@ class CreateNetworkInfoAction(network_workflows.CreateNetworkInfoAction):
|
||||
|
||||
class CreateNetworkInfo(network_workflows.CreateNetworkInfo):
|
||||
action_class = CreateNetworkInfoAction
|
||||
contributes = ("net_name", "admin_state", "net_profile_id", "with_subnet")
|
||||
contributes = ("net_name", "admin_state", "with_subnet")
|
||||
|
||||
def __init__(self, workflow):
|
||||
self.contributes = tuple(workflow.create_network_form.fields.keys())
|
||||
|
@ -1564,7 +1564,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
cinder: ('volume_snapshot_list',
|
||||
'volume_list',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.glance: ('image_list_detailed',),
|
||||
quotas: ('tenant_limit_usages',)})
|
||||
@ -1575,8 +1574,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
only_one_network=False,
|
||||
disk_config=True,
|
||||
config_drive=True,
|
||||
config_drive_default=False,
|
||||
test_with_profile=False):
|
||||
config_drive_default=False):
|
||||
image = self.versioned_images.first()
|
||||
|
||||
api.nova.extension_supported('BlockDeviceMappingV2Boot',
|
||||
@ -1615,10 +1613,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
network_id=net.id) \
|
||||
.AndReturn(self.ports.list())
|
||||
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(disk_config)
|
||||
@ -1796,11 +1790,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
def test_launch_instance_get_with_only_one_network(self):
|
||||
self.test_launch_instance_get(only_one_network=True)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_instance_get_with_profile(self):
|
||||
self.test_launch_instance_get(test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
'keypair_list',
|
||||
@ -1810,7 +1799,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
cinder: ('volume_snapshot_list',
|
||||
'volume_list',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.glance: ('image_list_detailed',),
|
||||
quotas: ('tenant_limit_usages',)})
|
||||
@ -1818,8 +1806,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
block_device_mapping_v2=True,
|
||||
only_one_network=False,
|
||||
disk_config=True,
|
||||
config_drive=True,
|
||||
test_with_profile=False):
|
||||
config_drive=True):
|
||||
api.nova.extension_supported('BlockDeviceMappingV2Boot',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(block_device_mapping_v2)
|
||||
@ -1856,10 +1843,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
api.neutron.port_list(IsA(http.HttpRequest),
|
||||
network_id=net.id) \
|
||||
.AndReturn(self.ports.list())
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(disk_config)
|
||||
@ -1902,14 +1885,8 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
def test_launch_instance_get_bootable_volumes_glance_v1(self):
|
||||
self.test_launch_instance_get_bootable_volumes()
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_instance_get_bootable_volumes_with_profile(self):
|
||||
self.test_launch_instance_get_bootable_volumes(test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
@ -1924,9 +1901,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def test_launch_instance_post(self,
|
||||
disk_config=True,
|
||||
config_drive=True,
|
||||
test_with_profile=False,
|
||||
test_with_multi_nics=False):
|
||||
config_drive=True):
|
||||
flavor = self.flavors.first()
|
||||
image = self.versioned_images.first()
|
||||
keypair = self.keypairs.first()
|
||||
@ -1940,27 +1915,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
self._mock_nova_glance_neutron_lists()
|
||||
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
policy_profile_id = self.policy_profiles.first().id
|
||||
port_one = self.ports.first()
|
||||
nics = [{"port-id": port_one.id}]
|
||||
api.neutron.profile_list(
|
||||
IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.neutron.port_create(IsA(http.HttpRequest),
|
||||
self.networks.first().id,
|
||||
policy_profile_id=policy_profile_id) \
|
||||
.AndReturn(port_one)
|
||||
if test_with_multi_nics:
|
||||
port_two = self.ports.get(name="port5")
|
||||
nics = [{"port-id": port_one.id},
|
||||
{"port-id": port_two.id}]
|
||||
# Add a second port to test multiple nics
|
||||
api.neutron.port_create(IsA(http.HttpRequest),
|
||||
self.networks.get(name="net4")['id'],
|
||||
policy_profile_id=policy_profile_id) \
|
||||
.AndReturn(port_two)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(disk_config)
|
||||
@ -2026,11 +1980,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
form_data['disk_config'] = 'AUTO'
|
||||
if config_drive:
|
||||
form_data['config_drive'] = True
|
||||
if test_with_profile:
|
||||
form_data['profile'] = self.policy_profiles.first().id
|
||||
if test_with_multi_nics:
|
||||
form_data['network'] = [self.networks.first().id,
|
||||
self.networks.get(name="net4")['id']]
|
||||
url = reverse('horizon:project:instances:launch')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
@ -2047,148 +1996,8 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
def test_launch_instance_post_no_config_drive_supported(self):
|
||||
self.test_launch_instance_post(config_drive=False)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_instance_post_with_profile(self):
|
||||
self.test_launch_instance_post(test_with_profile=True)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_instance_post_with_profile_and_multi_nics(self):
|
||||
self.test_launch_instance_post(test_with_profile=True,
|
||||
test_with_multi_nics=True)
|
||||
|
||||
def _test_launch_instance_post_with_profile_and_port_error(
|
||||
self,
|
||||
test_with_multi_nics=False,
|
||||
):
|
||||
flavor = self.flavors.first()
|
||||
image = self.versioned_images.first()
|
||||
keypair = self.keypairs.first()
|
||||
server = self.servers.first()
|
||||
sec_group = self.security_groups.first()
|
||||
avail_zone = self.availability_zones.first()
|
||||
customization_script = 'user data'
|
||||
quota_usages = self.quota_usages.first()
|
||||
|
||||
self._mock_nova_glance_neutron_lists()
|
||||
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
policy_profile_id = self.policy_profiles.first().id
|
||||
port_one = self.ports.first()
|
||||
api.neutron.profile_list(
|
||||
IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
if test_with_multi_nics:
|
||||
api.neutron.port_create(IsA(http.HttpRequest),
|
||||
self.networks.first().id,
|
||||
policy_profile_id=policy_profile_id) \
|
||||
.AndReturn(port_one)
|
||||
# Add a second port which has the exception to test multiple nics
|
||||
api.neutron.port_create(IsA(http.HttpRequest),
|
||||
self.networks.get(name="net4")['id'],
|
||||
policy_profile_id=policy_profile_id) \
|
||||
.AndRaise(self.exceptions.neutron)
|
||||
# Delete the first port
|
||||
api.neutron.port_delete(IsA(http.HttpRequest),
|
||||
port_one.id)
|
||||
else:
|
||||
api.neutron.port_create(IsA(http.HttpRequest),
|
||||
self.networks.first().id,
|
||||
policy_profile_id=policy_profile_id) \
|
||||
.AndRaise(self.exceptions.neutron)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
api.nova.extension_supported('ConfigDrive',
|
||||
IsA(http.HttpRequest)).AndReturn(True)
|
||||
api.nova.extension_supported('ServerGroups',
|
||||
IsA(http.HttpRequest)).AndReturn(False)
|
||||
cinder.volume_list(IsA(http.HttpRequest),
|
||||
search_opts=VOLUME_SEARCH_OPTS) \
|
||||
.AndReturn([])
|
||||
cinder.volume_snapshot_list(IsA(http.HttpRequest),
|
||||
search_opts=SNAPSHOT_SEARCH_OPTS) \
|
||||
.AndReturn([])
|
||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)) \
|
||||
.AndReturn(quota_usages)
|
||||
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||
.AndReturn(self.flavors.list())
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
form_data = {'flavor': flavor.id,
|
||||
'source_type': 'image_id',
|
||||
'image_id': image.id,
|
||||
'keypair': keypair.name,
|
||||
'name': server.name,
|
||||
'script_source': 'raw',
|
||||
'script_data': customization_script,
|
||||
'project_id': self.tenants.first().id,
|
||||
'user_id': self.user.id,
|
||||
'groups': str(sec_group.id),
|
||||
'availability_zone': avail_zone.zoneName,
|
||||
'volume_type': '',
|
||||
'network': self.networks.first().id,
|
||||
'count': 1,
|
||||
'disk_config': 'AUTO',
|
||||
'config_drive': True,
|
||||
'profile': self.policy_profiles.first().id}
|
||||
if test_with_multi_nics:
|
||||
form_data['network'] = [self.networks.first().id,
|
||||
self.networks.get(name="net4")['id']]
|
||||
url = reverse('horizon:project:instances:launch')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_delete',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
'keypair_list',
|
||||
'availability_zone_list',),
|
||||
api.network: ('security_group_list',),
|
||||
cinder: ('volume_list',
|
||||
'volume_snapshot_list',),
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def test_launch_instance_post_with_profile_and_port_error(self):
|
||||
self._test_launch_instance_post_with_profile_and_port_error()
|
||||
|
||||
@override_settings(OPENSTACK_API_VERSIONS={'image': 1})
|
||||
def test_launch_instance_post_with_profile_and_port_error_glance_v1(self):
|
||||
self.test_launch_instance_post_with_profile_and_port_error()
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_delete',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
'keypair_list',
|
||||
'availability_zone_list',),
|
||||
api.network: ('security_group_list',),
|
||||
cinder: ('volume_list',
|
||||
'volume_snapshot_list',),
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def test_lnch_inst_post_w_profile_and_multi_nics_w_port_error(self):
|
||||
self._test_launch_instance_post_with_profile_and_port_error(
|
||||
test_with_multi_nics=True)
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
@ -2202,7 +2011,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def test_launch_instance_post_boot_from_volume(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
test_with_bdmv2=False
|
||||
):
|
||||
flavor = self.flavors.first()
|
||||
@ -2238,18 +2046,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||
.AndReturn(self.flavors.list())
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
policy_profile_id = self.policy_profiles.first().id
|
||||
port = self.ports.first()
|
||||
api.neutron.profile_list(
|
||||
IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.neutron.port_create(
|
||||
IsA(http.HttpRequest),
|
||||
self.networks.first().id,
|
||||
policy_profile_id=policy_profile_id).AndReturn(port)
|
||||
nics = [{"port-id": port.id}]
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -2308,8 +2104,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'count': 1,
|
||||
'disk_config': 'AUTO',
|
||||
'config_drive': True}
|
||||
if test_with_profile:
|
||||
form_data['profile'] = self.policy_profiles.first().id
|
||||
url = reverse('horizon:project:instances:launch')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
@ -2323,14 +2117,8 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
def test_launch_instance_post_boot_from_volume_with_bdmv2(self):
|
||||
self.test_launch_instance_post_boot_from_volume(test_with_bdmv2=True)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_instance_post_boot_from_volume_with_profile(self):
|
||||
self.test_launch_instance_post_boot_from_volume(test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_list'),
|
||||
api.nova: ('server_create',
|
||||
@ -2343,10 +2131,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
cinder: ('volume_list',
|
||||
'volume_snapshot_list',),
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def test_launch_instance_post_no_images_available_boot_from_volume(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
):
|
||||
def test_launch_instance_post_no_images_available_boot_from_volume(self):
|
||||
flavor = self.flavors.first()
|
||||
keypair = self.keypairs.first()
|
||||
server = self.servers.first()
|
||||
@ -2364,18 +2149,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||
.AndReturn(self.flavors.list())
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
policy_profile_id = self.policy_profiles.first().id
|
||||
port = self.ports.first()
|
||||
api.neutron.profile_list(
|
||||
IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.neutron.port_create(
|
||||
IsA(http.HttpRequest),
|
||||
self.networks.first().id,
|
||||
policy_profile_id=policy_profile_id).AndReturn(port)
|
||||
nics = [{"port-id": port.id}]
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -2435,8 +2208,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'count': 1,
|
||||
'disk_config': 'MANUAL',
|
||||
'config_drive': True}
|
||||
if test_with_profile:
|
||||
form_data['profile'] = self.policy_profiles.first().id
|
||||
url = reverse('horizon:project:instances:launch')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
@ -2447,15 +2218,8 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
def test_lnch_inst_post_no_images_avail_boot_from_volume_glance_v1(self):
|
||||
self.test_launch_instance_post_no_images_available_boot_from_volume()
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
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(
|
||||
test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
@ -2466,8 +2230,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'volume_snapshot_list',),
|
||||
quotas: ('tenant_quota_usages',
|
||||
'tenant_limit_usages')})
|
||||
def test_launch_instance_post_no_images_available(self,
|
||||
test_with_profile=False):
|
||||
def test_launch_instance_post_no_images_available(self):
|
||||
flavor = self.flavors.first()
|
||||
keypair = self.keypairs.first()
|
||||
server = self.servers.first()
|
||||
@ -2489,10 +2252,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||
.AndReturn(self.flavors.list())
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -2533,16 +2292,9 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
self.assertFormErrors(res, 1, "You must select an image.")
|
||||
self.assertTemplateUsed(res, views.WorkflowView.template_name)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_instance_post_no_images_available_with_profile(self):
|
||||
self.test_launch_instance_post_no_images_available(
|
||||
test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({
|
||||
api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
@ -2557,7 +2309,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def test_launch_instance_post_boot_from_snapshot(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
test_with_bdmv2=False
|
||||
):
|
||||
flavor = self.flavors.first()
|
||||
@ -2594,18 +2345,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||
.AndReturn(self.flavors.list())
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
policy_profile_id = self.policy_profiles.first().id
|
||||
port = self.ports.first()
|
||||
api.neutron.profile_list(
|
||||
IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.neutron.port_create(
|
||||
IsA(http.HttpRequest),
|
||||
self.networks.first().id,
|
||||
policy_profile_id=policy_profile_id).AndReturn(port)
|
||||
nics = [{"port-id": port.id}]
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -2665,8 +2404,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'count': 1,
|
||||
'disk_config': 'AUTO',
|
||||
'config_drive': True}
|
||||
if test_with_profile:
|
||||
form_data['profile'] = self.policy_profiles.first().id
|
||||
url = reverse('horizon:project:instances:launch')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
@ -2680,19 +2417,11 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
def test_launch_instance_post_boot_from_snapshot_with_bdmv2(self):
|
||||
self.test_launch_instance_post_boot_from_snapshot(test_with_bdmv2=True)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_instance_post_boot_from_snapshot_with_profile(self):
|
||||
self.test_launch_instance_post_boot_from_snapshot(
|
||||
test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({
|
||||
api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_list',
|
||||
'is_port_profiles_supported'),
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
'keypair_list',
|
||||
@ -2704,10 +2433,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'volume_snapshot_list',
|
||||
'tenant_absolute_limits'),
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def test_launch_instance_post_boot_from_snapshot_error(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
):
|
||||
def test_launch_instance_post_boot_from_snapshot_error(self):
|
||||
flavor = self.flavors.first()
|
||||
keypair = self.keypairs.first()
|
||||
server = self.servers.first()
|
||||
@ -2727,9 +2453,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)) \
|
||||
.AndReturn(quota_usages)
|
||||
|
||||
api.neutron.is_port_profiles_supported()\
|
||||
.MultipleTimes().AndReturn(test_with_profile)
|
||||
|
||||
self._mock_neutron_network_and_port_list()
|
||||
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
@ -2757,7 +2480,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'image_id': '',
|
||||
'device_name': 'vda',
|
||||
'count': 1,
|
||||
'profile': '',
|
||||
'customization_script': ''}
|
||||
|
||||
url = reverse('horizon:project:instances:launch')
|
||||
@ -2767,7 +2489,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
cinder: ('volume_list',
|
||||
'volume_snapshot_list',),
|
||||
@ -2777,8 +2498,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'keypair_list',
|
||||
'availability_zone_list',),
|
||||
quotas: ('tenant_limit_usages',)})
|
||||
def test_launch_flavorlist_error(self,
|
||||
test_with_profile=False):
|
||||
def test_launch_flavorlist_error(self):
|
||||
api.nova.extension_supported('BlockDeviceMappingV2Boot',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -2792,10 +2512,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
self._mock_glance_image_list_detailed(self.versioned_images.list())
|
||||
self._mock_neutron_network_and_port_list()
|
||||
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -2827,14 +2543,8 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
def test_launch_flavorlist_error_glance_v1(self):
|
||||
self.test_launch_flavorlist_error()
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_flavorlist_error_with_profile(self):
|
||||
self.test_launch_flavorlist_error(test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_delete',
|
||||
'port_list'),
|
||||
@ -2848,8 +2558,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
cinder: ('volume_list',
|
||||
'volume_snapshot_list',),
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def test_launch_form_keystone_exception(self,
|
||||
test_with_profile=False):
|
||||
def test_launch_form_keystone_exception(self):
|
||||
flavor = self.flavors.first()
|
||||
image = self.versioned_images.first()
|
||||
keypair = self.keypairs.first()
|
||||
@ -2883,18 +2592,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
self._mock_glance_image_list_detailed(self.versioned_images.list())
|
||||
self._mock_neutron_network_and_port_list()
|
||||
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
policy_profile_id = self.policy_profiles.first().id
|
||||
port = self.ports.first()
|
||||
api.neutron.profile_list(
|
||||
IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.neutron.port_create(
|
||||
IsA(http.HttpRequest),
|
||||
self.networks.first().id,
|
||||
policy_profile_id=policy_profile_id).AndReturn(port)
|
||||
nics = [{"port-id": port.id}]
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -2919,8 +2616,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
config_drive=False,
|
||||
scheduler_hints={}) \
|
||||
.AndRaise(self.exceptions.keystone)
|
||||
if test_with_profile:
|
||||
api.neutron.port_delete(IsA(http.HttpRequest), port.id)
|
||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)) \
|
||||
.AndReturn(quota_usages)
|
||||
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||
@ -2948,25 +2643,17 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'confirm_admin_pass': 'password',
|
||||
'disk_config': 'AUTO',
|
||||
'config_drive': False}
|
||||
if test_with_profile:
|
||||
form_data['profile'] = self.policy_profiles.first().id
|
||||
url = reverse('horizon:project:instances:launch')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@override_settings(OPENSTACK_API_VERSIONS={'image': 1})
|
||||
def test_launch_form_keystone_exception_with_profile_glance_v1(self):
|
||||
def test_launch_form_keystone_exception_with_glance_v1(self):
|
||||
self.test_launch_form_keystone_exception()
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_form_keystone_exception_with_profile(self):
|
||||
self.test_launch_form_keystone_exception(test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
@ -2977,8 +2664,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'volume_snapshot_list',),
|
||||
quotas: ('tenant_limit_usages',
|
||||
'tenant_quota_usages')})
|
||||
def test_launch_form_instance_count_error(self,
|
||||
test_with_profile=False):
|
||||
def test_launch_form_instance_count_error(self):
|
||||
flavor = self.flavors.first()
|
||||
image = self.versioned_images.first()
|
||||
keypair = self.keypairs.first()
|
||||
@ -2993,10 +2679,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
self._mock_nova_glance_neutron_lists()
|
||||
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -3050,7 +2732,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
@ -3062,8 +2743,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
'volume_snapshot_list',),
|
||||
quotas: ('tenant_quota_usages',
|
||||
'tenant_limit_usages')})
|
||||
def _test_launch_form_count_error(self, resource,
|
||||
avail, test_with_profile=False):
|
||||
def _test_launch_form_count_error(self, resource, avail):
|
||||
flavor = self.flavors.first()
|
||||
image = self.versioned_images.first()
|
||||
keypair = self.keypairs.first()
|
||||
@ -3083,10 +2763,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
self._mock_nova_glance_neutron_lists()
|
||||
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -3147,26 +2823,20 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
self.assertContains(res, msg)
|
||||
|
||||
def test_launch_form_cores_count_error_glance_v2(self):
|
||||
self._test_launch_form_count_error('cores', 1, test_with_profile=False)
|
||||
self._test_launch_form_count_error('cores', 1)
|
||||
|
||||
@override_settings(OPENSTACK_API_VERSIONS={'image': 1})
|
||||
def test_launch_form_cores_count_error_glance_v1(self):
|
||||
self._test_launch_form_count_error('cores', 1, test_with_profile=False)
|
||||
self._test_launch_form_count_error('cores', 1)
|
||||
|
||||
def test_launch_form_ram_count_error(self):
|
||||
self._test_launch_form_count_error('ram', 512, test_with_profile=False)
|
||||
self._test_launch_form_count_error('ram', 512)
|
||||
|
||||
def test_launch_form_ram_cores_count_error(self):
|
||||
self._test_launch_form_count_error('both', 1, test_with_profile=False)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
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_count_error('both', 1)
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
@ -3178,7 +2848,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
quotas: ('tenant_quota_usages',
|
||||
'tenant_limit_usages')})
|
||||
def _test_launch_form_instance_requirement_error(self, image, flavor,
|
||||
test_with_profile=False,
|
||||
keypair_require=False):
|
||||
keypair = self.keypairs.first()
|
||||
server = self.servers.first()
|
||||
@ -3191,10 +2860,7 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
quota_usages = self.quota_usages.first()
|
||||
|
||||
self._mock_nova_glance_neutron_lists()
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -3248,47 +2914,26 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
msg = "The flavor '%s' is too small" % flavor.name
|
||||
self.assertContains(res, msg)
|
||||
|
||||
def test_launch_form_instance_requirement_error_disk(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
):
|
||||
def test_launch_form_instance_requirement_error_disk(self):
|
||||
flavor = self.flavors.first()
|
||||
image = self.versioned_images.first()
|
||||
image.min_ram = flavor.ram
|
||||
image.min_disk = flavor.disk + 1
|
||||
self._test_launch_form_instance_requirement_error(image, flavor,
|
||||
test_with_profile)
|
||||
self._test_launch_form_instance_requirement_error(image, flavor)
|
||||
|
||||
@override_settings(OPENSTACK_API_VERSIONS={'image': 1})
|
||||
def test_launch_form_instance_requirement_error_disk_glance_v1(self):
|
||||
self.test_launch_form_instance_requirement_error_disk()
|
||||
|
||||
def test_launch_form_instance_requirement_error_ram(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
):
|
||||
def test_launch_form_instance_requirement_error_ram(self):
|
||||
flavor = self.flavors.first()
|
||||
image = self.versioned_images.first()
|
||||
image.min_ram = flavor.ram + 1
|
||||
image.min_disk = flavor.disk
|
||||
self._test_launch_form_instance_requirement_error(image, flavor,
|
||||
test_with_profile)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_form_instance_requirement_error_disk_with_profile(self):
|
||||
self.test_launch_form_instance_requirement_error_disk(
|
||||
test_with_profile=True)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_form_instance_requirement_error_ram_with_profile(self):
|
||||
self.test_launch_form_instance_requirement_error_ram(
|
||||
test_with_profile=True)
|
||||
self._test_launch_form_instance_requirement_error(image, flavor)
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
@ -3432,7 +3077,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
@ -3445,7 +3089,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
quotas: ('tenant_quota_usages',
|
||||
'tenant_limit_usages')})
|
||||
def _test_launch_form_instance_volume_size(self, image, volume_size, msg,
|
||||
test_with_profile=False,
|
||||
volumes=None):
|
||||
flavor = self.flavors.get(name='m1.massive')
|
||||
keypair = self.keypairs.first()
|
||||
@ -3475,10 +3118,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
self._mock_glance_image_list_detailed(self.versioned_images.list())
|
||||
self._mock_neutron_network_and_port_list()
|
||||
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
@ -3529,43 +3168,27 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
res = self.client.post(url, form_data)
|
||||
self.assertContains(res, msg)
|
||||
|
||||
def test_launch_form_instance_volume_size_error(self,
|
||||
test_with_profile=False):
|
||||
def test_launch_form_instance_volume_size_error(self):
|
||||
image = self.versioned_images.get(name='protected_images')
|
||||
volume_size = image.min_disk // 2
|
||||
msg = ("The Volume size is too small for the '%s' image" %
|
||||
image.name)
|
||||
self._test_launch_form_instance_volume_size(image, volume_size, msg,
|
||||
test_with_profile)
|
||||
self._test_launch_form_instance_volume_size(image, volume_size, msg)
|
||||
|
||||
@override_settings(OPENSTACK_API_VERSIONS={'image': 1})
|
||||
def test_launch_form_instance_volume_size_error_glance_v1(self):
|
||||
self.test_launch_form_instance_volume_size_error()
|
||||
|
||||
def test_launch_form_instance_non_int_volume_size(self,
|
||||
test_with_profile=False):
|
||||
def test_launch_form_instance_non_int_volume_size(self):
|
||||
image = self.versioned_images.get(name='protected_images')
|
||||
msg = "Enter a whole number."
|
||||
self._test_launch_form_instance_volume_size(image, 1.5, msg,
|
||||
test_with_profile)
|
||||
self._test_launch_form_instance_volume_size(image, 1.5, msg)
|
||||
|
||||
def test_launch_form_instance_volume_exceed_quota(self):
|
||||
image = self.versioned_images.get(name='protected_images')
|
||||
msg = "Requested volume exceeds quota: Available: 0, Requested: 1"
|
||||
self._test_launch_form_instance_volume_size(image, image.min_disk,
|
||||
msg, False, 0)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_form_instance_volume_size_error_with_profile(self):
|
||||
self.test_launch_form_instance_volume_size_error(
|
||||
test_with_profile=True)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_launch_form_instance_non_int_volume_size_with_profile(self):
|
||||
self.test_launch_form_instance_non_int_volume_size(
|
||||
test_with_profile=True)
|
||||
msg, 0)
|
||||
|
||||
@helpers.create_stubs({
|
||||
api.nova: ('flavor_list', 'server_list', 'tenant_absolute_limits',
|
||||
@ -3809,12 +3432,10 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
cinder: ('volume_snapshot_list',
|
||||
'volume_list',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_list'),
|
||||
api.glance: ('image_list_detailed',),
|
||||
quotas: ('tenant_limit_usages',)})
|
||||
def test_select_default_keypair_if_only_one(self,
|
||||
test_with_profile=False):
|
||||
def test_select_default_keypair_if_only_one(self):
|
||||
keypair = self.keypairs.first()
|
||||
|
||||
cinder.volume_list(IsA(http.HttpRequest),
|
||||
@ -3827,10 +3448,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
self._mock_glance_image_list_detailed(self.versioned_images.list())
|
||||
self._mock_neutron_network_and_port_list()
|
||||
|
||||
if test_with_profile:
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'policy').AndReturn(policy_profiles)
|
||||
quotas.tenant_limit_usages(IsA(http.HttpRequest))\
|
||||
.AndReturn(self.limits['absolute'])
|
||||
api.nova.extension_supported('BlockDeviceMappingV2Boot',
|
||||
@ -3861,11 +3478,6 @@ class InstanceTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
def test_select_default_keypair_if_only_one_glance_v1(self):
|
||||
self.test_select_default_keypair_if_only_one()
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_select_default_keypair_if_only_one_with_profile(self):
|
||||
self.test_select_default_keypair_if_only_one(test_with_profile=True)
|
||||
|
||||
@helpers.create_stubs({api.network: ('floating_ip_target_get_by_instance',
|
||||
'tenant_floating_ip_allocate',
|
||||
'floating_ip_associate',
|
||||
@ -4842,156 +4454,3 @@ class ConsoleManagerTests(helpers.ResetImageAPIVersionMixin, helpers.TestCase):
|
||||
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@helpers.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
@helpers.create_stubs({api.glance: ('image_list_detailed',),
|
||||
api.neutron: ('network_list',
|
||||
'profile_list',
|
||||
'port_create',
|
||||
'port_delete',
|
||||
'port_list'),
|
||||
api.nova: ('extension_supported',
|
||||
'flavor_list',
|
||||
'keypair_list',
|
||||
'availability_zone_list',
|
||||
'server_group_list',
|
||||
'server_create',),
|
||||
api.network: ('security_group_list',),
|
||||
cinder: ('volume_list',
|
||||
'volume_snapshot_list',),
|
||||
quotas: ('tenant_quota_usages',)})
|
||||
def _test_port_cleanup_called_on_failed_vm_launch(self, image, images):
|
||||
flavor = self.flavors.first()
|
||||
keypair = self.keypairs.first()
|
||||
server = self.servers.first()
|
||||
sec_group = self.security_groups.first()
|
||||
avail_zone = self.availability_zones.first()
|
||||
customization_script = 'user data'
|
||||
quota_usages = self.quota_usages.first()
|
||||
|
||||
api.nova.extension_supported('BlockDeviceMappingV2Boot',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
volumes = [v for v in self.volumes.list() if (v.status == AVAILABLE
|
||||
and v.bootable ==
|
||||
'true')]
|
||||
cinder.volume_list(IsA(http.HttpRequest),
|
||||
search_opts=VOLUME_SEARCH_OPTS) \
|
||||
.AndReturn(volumes)
|
||||
volumes = [v for v in self.volumes.list() if (v.status == AVAILABLE)]
|
||||
cinder.volume_snapshot_list(IsA(http.HttpRequest),
|
||||
search_opts=SNAPSHOT_SEARCH_OPTS) \
|
||||
.AndReturn(volumes)
|
||||
api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
|
||||
api.nova.keypair_list(IgnoreArg()).AndReturn(self.keypairs.list())
|
||||
api.network.security_group_list(IsA(http.HttpRequest)) \
|
||||
.AndReturn(self.security_groups.list())
|
||||
api.nova.availability_zone_list(IsA(http.HttpRequest)) \
|
||||
.AndReturn(self.availability_zones.list())
|
||||
api.glance.image_list_detailed(
|
||||
IsA(http.HttpRequest),
|
||||
filters={'is_public': True, 'status': 'active'}) \
|
||||
.AndReturn([images, False, False])
|
||||
api.glance.image_list_detailed(
|
||||
IsA(http.HttpRequest),
|
||||
filters={'property-owner_id': self.tenant.id,
|
||||
'status': 'active'}) \
|
||||
.AndReturn([[], False, False])
|
||||
api.neutron.network_list(IsA(http.HttpRequest),
|
||||
tenant_id=self.tenant.id,
|
||||
shared=False) \
|
||||
.AndReturn(self.networks.list()[:1])
|
||||
api.neutron.network_list(IsA(http.HttpRequest),
|
||||
shared=True) \
|
||||
.AndReturn(self.networks.list()[1:])
|
||||
api.neutron.network_list(IsA(http.HttpRequest),
|
||||
tenant_id=self.tenant.id,
|
||||
shared=False) \
|
||||
.AndReturn(self.networks.list()[:1])
|
||||
api.neutron.network_list(IsA(http.HttpRequest),
|
||||
shared=True) \
|
||||
.AndReturn(self.networks.list()[1:])
|
||||
for net in self.networks.list():
|
||||
api.neutron.port_list(IsA(http.HttpRequest),
|
||||
network_id=net.id) \
|
||||
.AndReturn(self.ports.list())
|
||||
policy_profiles = self.policy_profiles.list()
|
||||
policy_profile_id = self.policy_profiles.first().id
|
||||
port = self.ports.first()
|
||||
api.neutron.profile_list(
|
||||
IsA(http.HttpRequest), 'policy').AndReturn(policy_profiles)
|
||||
api.neutron.port_create(
|
||||
IsA(http.HttpRequest),
|
||||
self.networks.first().id,
|
||||
policy_profile_id=policy_profile_id).AndReturn(port)
|
||||
nics = [{"port-id": port.id}]
|
||||
api.nova.extension_supported('DiskConfig',
|
||||
IsA(http.HttpRequest)) \
|
||||
.AndReturn(True)
|
||||
api.nova.extension_supported('ConfigDrive',
|
||||
IsA(http.HttpRequest)).AndReturn(True)
|
||||
api.nova.extension_supported('ServerGroups',
|
||||
IsA(http.HttpRequest)).AndReturn(True)
|
||||
api.nova.server_group_list(IsA(http.HttpRequest)).AndReturn([])
|
||||
api.nova.server_create(IsA(http.HttpRequest),
|
||||
server.name,
|
||||
image.id,
|
||||
flavor.id,
|
||||
keypair.name,
|
||||
customization_script,
|
||||
[str(sec_group.id)],
|
||||
block_device_mapping=None,
|
||||
block_device_mapping_v2=None,
|
||||
nics=nics,
|
||||
availability_zone=avail_zone.zoneName,
|
||||
instance_count=IsA(int),
|
||||
admin_pass='password',
|
||||
disk_config='AUTO',
|
||||
config_drive=False,
|
||||
scheduler_hints={}) \
|
||||
.AndRaise(self.exceptions.neutron)
|
||||
api.neutron.port_delete(IsA(http.HttpRequest), port.id)
|
||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)) \
|
||||
.AndReturn(quota_usages)
|
||||
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||
.AndReturn(self.flavors.list())
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
form_data = {'flavor': flavor.id,
|
||||
'source_type': 'image_id',
|
||||
'source_id': image.id,
|
||||
'volume_size': '1',
|
||||
'image_id': image.id,
|
||||
'availability_zone': avail_zone.zoneName,
|
||||
'keypair': keypair.name,
|
||||
'name': server.name,
|
||||
'script_source': 'raw',
|
||||
'script_data': customization_script,
|
||||
'project_id': self.tenants.first().id,
|
||||
'user_id': self.user.id,
|
||||
'groups': [str(sec_group.id)],
|
||||
'volume_type': '',
|
||||
'network': self.networks.first().id,
|
||||
'count': 1,
|
||||
'admin_pass': 'password',
|
||||
'confirm_admin_pass': 'password',
|
||||
'disk_config': 'AUTO',
|
||||
'config_drive': False,
|
||||
'profile': self.policy_profiles.first().id}
|
||||
url = reverse('horizon:project:instances:launch')
|
||||
res = self.client.post(url, form_data)
|
||||
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@override_settings(OPENSTACK_API_VERSIONS={'image': 1})
|
||||
def test_port_cleanup_called_on_failed_vm_launch_v1(self):
|
||||
image = self.images.first()
|
||||
images = self.images.list()
|
||||
self._test_port_cleanup_called_on_failed_vm_launch(image, images)
|
||||
|
||||
def test_port_cleanup_called_on_failed_vm_launch_v2(self):
|
||||
image = self.imagesV2.first()
|
||||
images = self.imagesV2.list()
|
||||
self._test_port_cleanup_called_on_failed_vm_launch(image, images)
|
||||
|
@ -713,24 +713,12 @@ class SetNetworkAction(workflows.Action):
|
||||
" be specified.")},
|
||||
help_text=_("Launch instance with"
|
||||
" these networks"))
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
widget = None
|
||||
else:
|
||||
widget = forms.HiddenInput()
|
||||
profile = forms.ChoiceField(label=_("Policy Profiles"),
|
||||
required=False,
|
||||
widget=widget,
|
||||
help_text=_("Launch instance with "
|
||||
"this policy profile"))
|
||||
|
||||
def __init__(self, request, *args, **kwargs):
|
||||
super(SetNetworkAction, self).__init__(request, *args, **kwargs)
|
||||
network_list = self.fields["network"].choices
|
||||
if len(network_list) == 1:
|
||||
self.fields['network'].initial = [network_list[0][0]]
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
self.fields['profile'].choices = (
|
||||
self.get_policy_profile_choices(request))
|
||||
|
||||
class Meta(object):
|
||||
name = _("Networking")
|
||||
@ -740,32 +728,11 @@ class SetNetworkAction(workflows.Action):
|
||||
def populate_network_choices(self, request, context):
|
||||
return instance_utils.network_field_data(request)
|
||||
|
||||
def get_policy_profile_choices(self, request):
|
||||
profile_choices = [('', _("Select a profile"))]
|
||||
for profile in self._get_profiles(request, 'policy'):
|
||||
profile_choices.append((profile.id, profile.name))
|
||||
return profile_choices
|
||||
|
||||
def _get_profiles(self, request, type_p):
|
||||
profiles = []
|
||||
try:
|
||||
profiles = api.neutron.profile_list(request, type_p)
|
||||
except Exception:
|
||||
msg = _('Network Profiles could not be retrieved.')
|
||||
exceptions.handle(request, msg)
|
||||
return profiles
|
||||
|
||||
|
||||
class SetNetwork(workflows.Step):
|
||||
action_class = SetNetworkAction
|
||||
# Disabling the template drag/drop only in the case port profiles
|
||||
# are used till the issue with the drag/drop affecting the
|
||||
# profile_id detection is fixed.
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
contributes = ("network_id", "profile_id",)
|
||||
else:
|
||||
template_name = "project/instances/_update_networks.html"
|
||||
contributes = ("network_id",)
|
||||
template_name = "project/instances/_update_networks.html"
|
||||
contributes = ("network_id",)
|
||||
|
||||
def contribute(self, data, context):
|
||||
if data:
|
||||
@ -775,9 +742,6 @@ class SetNetwork(workflows.Step):
|
||||
networks = [n for n in networks if n != '']
|
||||
if networks:
|
||||
context['network_id'] = networks
|
||||
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
context['profile_id'] = data.get('profile', None)
|
||||
return context
|
||||
|
||||
|
||||
@ -977,13 +941,6 @@ class LaunchInstance(workflows.Workflow):
|
||||
if server_group:
|
||||
scheduler_hints['group'] = server_group
|
||||
|
||||
port_profiles_supported = api.neutron.is_port_profiles_supported()
|
||||
|
||||
if port_profiles_supported:
|
||||
nics = self.set_network_port_profiles(request,
|
||||
context['network_id'],
|
||||
context['profile_id'])
|
||||
|
||||
ports = context.get('ports')
|
||||
if ports:
|
||||
if nics is None:
|
||||
@ -1009,54 +966,9 @@ class LaunchInstance(workflows.Workflow):
|
||||
scheduler_hints=scheduler_hints)
|
||||
return True
|
||||
except Exception:
|
||||
if port_profiles_supported:
|
||||
ports_failing_deletes = _cleanup_ports_on_failed_vm_launch(
|
||||
request, nics)
|
||||
if ports_failing_deletes:
|
||||
ports_str = ', '.join(ports_failing_deletes)
|
||||
msg = (_('Port cleanup failed for these port-ids (%s).')
|
||||
% ports_str)
|
||||
exceptions.handle(request, msg)
|
||||
exceptions.handle(request)
|
||||
return False
|
||||
|
||||
def set_network_port_profiles(self, request, net_ids, profile_id):
|
||||
# Create port with Network ID and Port Profile
|
||||
# for the use with the plugin supporting port profiles.
|
||||
nics = []
|
||||
for net_id in net_ids:
|
||||
try:
|
||||
port = api.neutron.port_create(
|
||||
request,
|
||||
net_id,
|
||||
policy_profile_id=profile_id,
|
||||
)
|
||||
except Exception as e:
|
||||
msg = (_('Unable to create port for profile '
|
||||
'"%(profile_id)s": %(reason)s'),
|
||||
{'profile_id': profile_id,
|
||||
'reason': e})
|
||||
for nic in nics:
|
||||
try:
|
||||
port_id = nic['port-id']
|
||||
api.neutron.port_delete(request, port_id)
|
||||
except Exception:
|
||||
msg = (msg +
|
||||
_(' Also failed to delete port %s') % port_id)
|
||||
redirect = self.success_url
|
||||
exceptions.handle(request, msg, redirect=redirect)
|
||||
|
||||
if port:
|
||||
nics.append({"port-id": port.id})
|
||||
LOG.debug("Created Port %(portid)s with "
|
||||
"network %(netid)s "
|
||||
"policy profile %(profile_id)s",
|
||||
{'portid': port.id,
|
||||
'netid': net_id,
|
||||
'profile_id': profile_id})
|
||||
|
||||
return nics
|
||||
|
||||
|
||||
def _cleanup_ports_on_failed_vm_launch(request, nics):
|
||||
ports_failing_deletes = []
|
||||
|
@ -341,20 +341,14 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
subnets = res.context['subnets_table'].data
|
||||
self.assertItemsEqual(subnets, [self.subnets.first()])
|
||||
|
||||
@test.create_stubs({api.neutron: ('profile_list',
|
||||
'is_extension_supported',
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_get(self,
|
||||
test_with_profile=False):
|
||||
def test_network_create_get(self):
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
api.neutron.subnetpool_list(IsA(http.HttpRequest)).\
|
||||
AndReturn(self.subnetpools.list())
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
url = reverse('horizon:project:networks:create')
|
||||
@ -368,27 +362,14 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'<CreateSubnetDetail: createsubnetdetailaction>']
|
||||
self.assertQuerysetEqual(workflow.steps, expected_objs)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_get_with_profile(self):
|
||||
self.test_network_create_get(test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_post(self,
|
||||
test_with_profile=False):
|
||||
def test_network_create_post(self):
|
||||
network = self.networks.first()
|
||||
params = {'name': network.name,
|
||||
'admin_state_up': network.admin_state_up,
|
||||
'shared': False}
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -403,8 +384,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'shared': False,
|
||||
# subnet
|
||||
'with_subnet': False}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
form_data.update(form_data_no_subnet())
|
||||
url = reverse('horizon:project:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
@ -413,20 +392,13 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_post_with_shared(self, test_with_profile=False):
|
||||
def test_network_create_post_with_shared(self):
|
||||
network = self.networks.first()
|
||||
params = {'name': network.name,
|
||||
'admin_state_up': network.admin_state_up,
|
||||
'shared': True}
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -441,8 +413,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'shared': True,
|
||||
# subnet
|
||||
'with_subnet': False}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
form_data.update(form_data_no_subnet())
|
||||
url = reverse('horizon:project:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
@ -450,18 +420,11 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_with_profile(self):
|
||||
self.test_network_create_post(test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'subnet_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_post_with_subnet(self,
|
||||
test_with_profile=False,
|
||||
test_with_ipv6=True):
|
||||
network = self.networks.first()
|
||||
subnet = self.subnets.first()
|
||||
@ -474,12 +437,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'ip_version': subnet.ip_version,
|
||||
'gateway_ip': subnet.gateway_ip,
|
||||
'enable_dhcp': subnet.enable_dhcp}
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
if not test_with_ipv6:
|
||||
subnet.ip_version = 4
|
||||
subnet_params['ip_version'] = subnet.ip_version
|
||||
@ -498,8 +455,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'admin_state': network.admin_state_up,
|
||||
'shared': False,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
form_data.update(form_data_subnet(subnet, allocation_pools=[]))
|
||||
url = reverse('horizon:project:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
@ -507,31 +462,18 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_with_subnet_w_profile(self):
|
||||
self.test_network_create_post_with_subnet(test_with_profile=True)
|
||||
|
||||
@test.update_settings(OPENSTACK_NEUTRON_NETWORK={'enable_ipv6': False})
|
||||
def test_create_network_with_ipv6_disabled(self):
|
||||
self.test_network_create_post_with_subnet(test_with_ipv6=False)
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_post_network_exception(self,
|
||||
test_with_profile=False):
|
||||
def test_network_create_post_network_exception(self):
|
||||
network = self.networks.first()
|
||||
params = {'name': network.name,
|
||||
'shared': False,
|
||||
'admin_state_up': network.admin_state_up}
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -546,8 +488,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
# subnet
|
||||
'shared': False,
|
||||
'with_subnet': False}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
form_data.update(form_data_no_subnet())
|
||||
url = reverse('horizon:project:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
@ -555,19 +495,11 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_nw_exception_w_profile(self):
|
||||
self.test_network_create_post_network_exception(
|
||||
test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_post_with_subnet_network_exception(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
test_with_subnetpool=False,
|
||||
):
|
||||
network = self.networks.first()
|
||||
@ -575,12 +507,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
params = {'name': network.name,
|
||||
'shared': False,
|
||||
'admin_state_up': network.admin_state_up}
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -594,8 +520,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'admin_state': network.admin_state_up,
|
||||
'shared': False,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
form_data.update(form_data_subnet(subnet, allocation_pools=[]))
|
||||
url = reverse('horizon:project:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
@ -603,33 +527,17 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_nw_create_post_w_subnet_nw_exception_w_profile(self):
|
||||
self.test_network_create_post_with_subnet_network_exception(
|
||||
test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'network_delete',
|
||||
'subnet_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list',)})
|
||||
def test_network_create_post_with_subnet_subnet_exception(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
):
|
||||
def test_network_create_post_with_subnet_subnet_exception(self):
|
||||
network = self.networks.first()
|
||||
subnet = self.subnets.first()
|
||||
params = {'name': network.name,
|
||||
'shared': False,
|
||||
'admin_state_up': network.admin_state_up}
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -653,8 +561,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'admin_state': network.admin_state_up,
|
||||
'shared': False,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
form_data.update(form_data_subnet(subnet, allocation_pools=[]))
|
||||
url = reverse('horizon:project:networks:create')
|
||||
res = self.client.post(url, form_data)
|
||||
@ -662,25 +568,12 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_nw_create_post_w_subnet_subnet_exception_w_profile(self):
|
||||
self.test_network_create_post_with_subnet_subnet_exception(
|
||||
test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('profile_list',
|
||||
'is_extension_supported',
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||
'subnetpool_list',)})
|
||||
def test_network_create_post_with_subnet_nocidr(self,
|
||||
test_with_profile=False,
|
||||
test_with_snpool=False):
|
||||
network = self.networks.first()
|
||||
subnet = self.subnets.first()
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -692,8 +585,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'admin_state': network.admin_state_up,
|
||||
'shared': False,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
if test_with_snpool:
|
||||
form_data['subnetpool_id'] = ''
|
||||
form_data['prefixlen'] = ''
|
||||
@ -706,31 +597,18 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'clear "Create Subnet" checkbox'
|
||||
' in previous step.'))
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_nw_create_post_w_subnet_no_cidr_w_profile(self):
|
||||
self.test_network_create_post_with_subnet_nocidr(
|
||||
test_with_profile=True)
|
||||
|
||||
def test_network_create_post_with_subnet_nocidr_nosubnetpool(self):
|
||||
self.test_network_create_post_with_subnet_nocidr(
|
||||
test_with_snpool=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('profile_list',
|
||||
'is_extension_supported',
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||
'subnetpool_list',)})
|
||||
def test_network_create_post_with_subnet_cidr_without_mask(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
test_with_subnetpool=False,
|
||||
):
|
||||
network = self.networks.first()
|
||||
subnet = self.subnets.first()
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -742,8 +620,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'shared': False,
|
||||
'admin_state': network.admin_state_up,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
if test_with_subnetpool:
|
||||
subnetpool = self.subnetpools.first()
|
||||
form_data['subnetpool'] = subnetpool.id
|
||||
@ -756,12 +632,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
expected_msg = "The subnet in the Network Address is too small (/32)."
|
||||
self.assertContains(res, expected_msg)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_nw_create_post_w_subnet_cidr_without_mask_w_profile(self):
|
||||
self.test_network_create_post_with_subnet_cidr_without_mask(
|
||||
test_with_profile=True)
|
||||
|
||||
def test_network_create_post_with_subnet_cidr_without_mask_w_snpool(self):
|
||||
self.test_network_create_post_with_subnet_cidr_without_mask(
|
||||
test_with_subnetpool=True)
|
||||
@ -769,20 +639,13 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
@test.update_settings(
|
||||
ALLOWED_PRIVATE_SUBNET_CIDR={'ipv4': ['192.168.0.0/16']})
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||
'profile_list',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_post_with_subnet_cidr_invalid_v4_range(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
test_with_subnetpool=False
|
||||
):
|
||||
network = self.networks.first()
|
||||
subnet = self.subnets.first()
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
@ -795,8 +658,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'shared': False,
|
||||
'admin_state': network.admin_state_up,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
if test_with_subnetpool:
|
||||
subnetpool = self.subnetpools.first()
|
||||
form_data['subnetpool'] = subnetpool.id
|
||||
@ -811,15 +672,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
"are 192.168.0.0/16.")
|
||||
self.assertContains(res, expected_msg)
|
||||
|
||||
@test.update_settings(
|
||||
ALLOWED_PRIVATE_SUBNET_CIDR={'ipv4': ['192.168.0.0/16']})
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_with_subnet_cidr_invalid_v4_range_w_profile(
|
||||
self):
|
||||
self.test_network_create_post_with_subnet_cidr_invalid_v4_range(
|
||||
test_with_profile=True)
|
||||
|
||||
@test.update_settings(
|
||||
ALLOWED_PRIVATE_SUBNET_CIDR={'ipv4': ['192.168.0.0/16']})
|
||||
def test_network_create_post_with_subnet_cidr_invalid_v4_range_w_snpool(
|
||||
@ -829,22 +681,14 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
|
||||
@test.update_settings(ALLOWED_PRIVATE_SUBNET_CIDR={'ipv6': ['fc00::/9']})
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||
'profile_list',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_post_with_subnet_cidr_invalid_v6_range(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
test_with_subnetpool=False
|
||||
):
|
||||
network = self.networks.first()
|
||||
subnet_v6 = self.subnets.list()[3]
|
||||
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -856,8 +700,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'shared': False,
|
||||
'admin_state': network.admin_state_up,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
if test_with_subnetpool:
|
||||
subnetpool = self.subnetpools.first()
|
||||
form_data['subnetpool'] = subnetpool.id
|
||||
@ -872,14 +714,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
"are fc00::/9.")
|
||||
self.assertContains(res, expected_msg)
|
||||
|
||||
@test.update_settings(ALLOWED_PRIVATE_SUBNET_CIDR={'ipv6': ['fc00::/9']})
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_with_subnet_cidr_invalid_v6_range_w_profile(
|
||||
self):
|
||||
self.test_network_create_post_with_subnet_cidr_invalid_v6_range(
|
||||
test_with_profile=True)
|
||||
|
||||
@test.update_settings(ALLOWED_PRIVATE_SUBNET_CIDR={'ipv6': ['fc00::/9']})
|
||||
def test_network_create_post_with_subnet_cidr_invalid_v6_range_w_snpool(
|
||||
self):
|
||||
@ -888,13 +722,9 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
|
||||
@test.create_stubs({api.neutron: ('network_create',
|
||||
'subnet_create',
|
||||
'profile_list',
|
||||
'is_extension_supported',
|
||||
'subnetpool_list')})
|
||||
def test_network_create_post_with_subnet_cidr_not_restrict(
|
||||
self,
|
||||
test_with_profile=False
|
||||
):
|
||||
def test_network_create_post_with_subnet_cidr_not_restrict(self):
|
||||
network = self.networks.first()
|
||||
subnet = self.subnets.first()
|
||||
cidr = '30.30.30.0/24'
|
||||
@ -909,12 +739,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'gateway_ip': gateway_ip,
|
||||
'enable_dhcp': subnet.enable_dhcp}
|
||||
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
params['net_profile_id'] = net_profile_id
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
AndReturn(True)
|
||||
@ -931,9 +755,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'shared': False,
|
||||
'with_subnet': True}
|
||||
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
|
||||
form_data.update(form_data_subnet(subnet, cidr=cidr,
|
||||
gateway_ip=gateway_ip,
|
||||
allocation_pools=[]))
|
||||
@ -943,27 +764,14 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_with_subnet_cidr_not_restrict_w_profile(self):
|
||||
self.test_network_create_post_with_subnet_cidr_not_restrict(
|
||||
test_with_profile=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('profile_list',
|
||||
'is_extension_supported',
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||
'subnetpool_list',)})
|
||||
def test_network_create_post_with_subnet_cidr_inconsistent(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
test_with_subnetpool=False
|
||||
):
|
||||
network = self.networks.first()
|
||||
subnet = self.subnets.first()
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
@ -978,8 +786,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'shared': False,
|
||||
'admin_state': network.admin_state_up,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
if test_with_subnetpool:
|
||||
subnetpool = self.subnetpools.first()
|
||||
form_data['subnetpool'] = subnetpool.id
|
||||
@ -992,31 +798,18 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
expected_msg = 'Network Address and IP version are inconsistent.'
|
||||
self.assertContains(res, expected_msg)
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_with_subnet_cidr_inconsistent_w_profile(self):
|
||||
self.test_network_create_post_with_subnet_cidr_inconsistent(
|
||||
test_with_profile=True)
|
||||
|
||||
def test_network_create_post_with_subnet_cidr_inconsistent_w_snpool(self):
|
||||
self.test_network_create_post_with_subnet_cidr_inconsistent(
|
||||
test_with_subnetpool=True)
|
||||
|
||||
@test.create_stubs({api.neutron: ('profile_list',
|
||||
'is_extension_supported',
|
||||
@test.create_stubs({api.neutron: ('is_extension_supported',
|
||||
'subnetpool_list',)})
|
||||
def test_network_create_post_with_subnet_gw_inconsistent(
|
||||
self,
|
||||
test_with_profile=False,
|
||||
test_with_subnetpool=False,
|
||||
):
|
||||
network = self.networks.first()
|
||||
subnet = self.subnets.first()
|
||||
if test_with_profile:
|
||||
net_profiles = self.net_profiles.list()
|
||||
net_profile_id = self.net_profiles.first().id
|
||||
api.neutron.profile_list(IsA(http.HttpRequest),
|
||||
'network').AndReturn(net_profiles)
|
||||
|
||||
api.neutron.is_extension_supported(IsA(http.HttpRequest),
|
||||
'subnet_allocation').\
|
||||
@ -1031,8 +824,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
'shared': False,
|
||||
'admin_state': network.admin_state_up,
|
||||
'with_subnet': True}
|
||||
if test_with_profile:
|
||||
form_data['net_profile_id'] = net_profile_id
|
||||
if test_with_subnetpool:
|
||||
subnetpool = self.subnetpools.first()
|
||||
form_data['subnetpool'] = subnetpool.id
|
||||
@ -1044,12 +835,6 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
|
||||
|
||||
self.assertContains(res, 'Gateway IP and IP version are inconsistent.')
|
||||
|
||||
@test.update_settings(
|
||||
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
|
||||
def test_network_create_post_with_subnet_gw_inconsistent_w_profile(self):
|
||||
self.test_network_create_post_with_subnet_gw_inconsistent(
|
||||
test_with_profile=True)
|
||||
|
||||
def test_network_create_post_with_subnet_gw_inconsistent_w_snpool(self):
|
||||
self.test_network_create_post_with_subnet_gw_inconsistent(
|
||||
test_with_subnetpool=True)
|
||||
|
@ -37,14 +37,6 @@ class CreateNetworkInfoAction(workflows.Action):
|
||||
net_name = forms.CharField(max_length=255,
|
||||
label=_("Network Name"),
|
||||
required=False)
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
widget = None
|
||||
else:
|
||||
widget = forms.HiddenInput()
|
||||
net_profile_id = forms.ThemableChoiceField(label=_("Network Profile"),
|
||||
required=False,
|
||||
widget=widget)
|
||||
|
||||
admin_state = forms.ThemableChoiceField(
|
||||
choices=[(True, _('UP')),
|
||||
(False, _('DOWN'))],
|
||||
@ -72,30 +64,9 @@ class CreateNetworkInfoAction(workflows.Action):
|
||||
def __init__(self, request, *args, **kwargs):
|
||||
super(CreateNetworkInfoAction, self).__init__(request,
|
||||
*args, **kwargs)
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
self.fields['net_profile_id'].choices = (
|
||||
self.get_network_profile_choices(request))
|
||||
|
||||
if not policy.check((("network", "create_network:shared"),), request):
|
||||
self.fields['shared'].widget = forms.HiddenInput()
|
||||
|
||||
def get_network_profile_choices(self, request):
|
||||
profile_choices = [('', _("Select a profile"))]
|
||||
for profile in self._get_profiles(request, 'network'):
|
||||
profile_choices.append((profile.id, profile.name))
|
||||
return profile_choices
|
||||
|
||||
def _get_profiles(self, request, type_p):
|
||||
profiles = []
|
||||
try:
|
||||
profiles = api.neutron.profile_list(request, type_p)
|
||||
except Exception:
|
||||
msg = _('Network Profiles could not be retrieved.')
|
||||
exceptions.handle(request, msg)
|
||||
return profiles
|
||||
# TODO(absubram): Add ability to view network profile information
|
||||
# in the network detail if a profile is used.
|
||||
|
||||
class Meta(object):
|
||||
name = _("Network")
|
||||
help_text = _('Create a new network. '
|
||||
@ -105,8 +76,7 @@ class CreateNetworkInfoAction(workflows.Action):
|
||||
|
||||
class CreateNetworkInfo(workflows.Step):
|
||||
action_class = CreateNetworkInfoAction
|
||||
contributes = ("net_name", "admin_state", "net_profile_id", "with_subnet",
|
||||
"shared")
|
||||
contributes = ("net_name", "admin_state", "with_subnet", "shared")
|
||||
|
||||
|
||||
class CreateSubnetInfoAction(workflows.Action):
|
||||
@ -495,8 +465,6 @@ class CreateNetwork(workflows.Workflow):
|
||||
params = {'name': data['net_name'],
|
||||
'admin_state_up': (data['admin_state'] == 'True'),
|
||||
'shared': data['shared']}
|
||||
if api.neutron.is_port_profiles_supported():
|
||||
params['net_profile_id'] = data['net_profile_id']
|
||||
network = api.neutron.network_create(request, **params)
|
||||
self.context['net_id'] = network.id
|
||||
msg = (_('Network "%s" was successfully created.') %
|
||||
|
@ -137,7 +137,6 @@
|
||||
allowedBootSources: [],
|
||||
images: [],
|
||||
allowCreateVolumeFromImage: false,
|
||||
arePortProfilesSupported: false,
|
||||
imageSnapshots: [],
|
||||
keypairs: [],
|
||||
metadataDefs: {
|
||||
@ -151,7 +150,6 @@
|
||||
ports: [],
|
||||
neutronEnabled: false,
|
||||
novaLimits: {},
|
||||
profiles: [],
|
||||
securityGroups: [],
|
||||
serverGroups: [],
|
||||
volumeBootable: false,
|
||||
@ -187,7 +185,6 @@
|
||||
name: null,
|
||||
networks: [],
|
||||
ports: [],
|
||||
profile: {},
|
||||
scheduler_hints: {},
|
||||
// REQUIRED Server Key. May be empty.
|
||||
security_groups: [],
|
||||
|
@ -345,7 +345,7 @@
|
||||
it('has empty arrays for all data', function() {
|
||||
var datasets = ['availabilityZones', 'flavors', 'allowedBootSources',
|
||||
'images', 'imageSnapshots', 'keypairs', 'networks',
|
||||
'profiles', 'securityGroups', 'serverGroups', 'volumes',
|
||||
'securityGroups', 'serverGroups', 'volumes',
|
||||
'volumeSnapshots'];
|
||||
|
||||
datasets.forEach(function(name) {
|
||||
@ -366,10 +366,6 @@
|
||||
expect(model.allowCreateVolumeFromImage).toBe(false);
|
||||
});
|
||||
|
||||
it('defaults "are port profiles supported" to false', function() {
|
||||
expect(model.arePortProfilesSupported).toBe(false);
|
||||
});
|
||||
|
||||
it('defaults "volume bootable" to false', function() {
|
||||
expect(model.volumeBootable).toBe(false);
|
||||
});
|
||||
@ -746,7 +742,7 @@
|
||||
// This is here to ensure that as people add/change items, they
|
||||
// don't forget to implement tests for them.
|
||||
it('has the right number of properties', function() {
|
||||
expect(Object.keys(model.newInstanceSpec).length).toBe(21);
|
||||
expect(Object.keys(model.newInstanceSpec).length).toBe(20);
|
||||
});
|
||||
|
||||
it('sets availability zone to null', function() {
|
||||
@ -793,10 +789,6 @@
|
||||
expect(model.newInstanceSpec.ports).toEqual([]);
|
||||
});
|
||||
|
||||
it('sets profile to an empty object', function() {
|
||||
expect(model.newInstanceSpec.profile).toEqual({});
|
||||
});
|
||||
|
||||
it('sets security groups to an empty array', function() {
|
||||
expect(model.newInstanceSpec.security_groups).toEqual([]);
|
||||
});
|
||||
|
@ -3,13 +3,6 @@
|
||||
Networks provide the communication channels for instances in the cloud.
|
||||
</p>
|
||||
|
||||
<div class="form-group" ng-if="model.arePortProfilesSupported">
|
||||
<label class="control-label" for="profile" translate>Profile</label>
|
||||
<select class="form-control" id="profile" ng-model="model.newInstanceSpec.profile" ng-options="profile.name for profile in model.profiles">
|
||||
<option value="" translate>(None)</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<transfer-table tr-model="ctrl.tableDataMulti" help-text="ctrl.tableHelpText" limits="ctrl.tableLimits">
|
||||
<allocated validate-number-min="{$ ctrl.tableDataMulti.minItems $}" ng-model="ctrl.tableDataMulti.allocated.length">
|
||||
<table st-table="ctrl.tableDataMulti.displayedAllocated" st-safe-src="ctrl.tableDataMulti.allocated" hz-table
|
||||
|
@ -297,12 +297,6 @@ OPENSTACK_NEUTRON_NETWORK = {
|
||||
# real deployments
|
||||
# 'default_dns_nameservers': ["8.8.8.8", "8.8.4.4", "208.67.222.222"],
|
||||
|
||||
# The profile_support option is used to detect if an external router can be
|
||||
# configured via the dashboard. When using specific plugins the
|
||||
# profile_support can be turned on if needed.
|
||||
'profile_support': None,
|
||||
#'profile_support': 'cisco',
|
||||
|
||||
# Set which provider network types are supported. Only the network types
|
||||
# in this list will be available to choose from when creating a network.
|
||||
# Network types include local, flat, vlan, gre, vxlan and geneve.
|
||||
|
@ -94,7 +94,6 @@
|
||||
* {
|
||||
* "name": "myNewNetwork",
|
||||
* "admin_state_up": true,
|
||||
* "net_profile_id" : "asdsarafssdaser",
|
||||
* "shared": true,
|
||||
* "tenant_id": "4fd44f30292945e481c7b8a0c8908869
|
||||
* }
|
||||
@ -108,9 +107,6 @@
|
||||
* The administrative state of the network, which is up (true) or
|
||||
* down (false). Optional.
|
||||
*
|
||||
* @property {string} newNetwork.net_profile_id
|
||||
* The network profile id. Optional.
|
||||
*
|
||||
* @property {boolean} newNetwork.shared
|
||||
* Indicates whether this network is shared across all tenants.
|
||||
* By default, only adminstative users can change this value. Optional.
|
||||
|
@ -171,41 +171,16 @@ class NeutronApiTests(test.APITestCase):
|
||||
ret_val = api.neutron.network_get(self.request, network_id)
|
||||
self.assertIsInstance(ret_val, api.neutron.Network)
|
||||
|
||||
def _test_network_create(self, with_n1kv=False):
|
||||
def test_network_create(self):
|
||||
network = {'network': self.api_networks.first()}
|
||||
form_data = {'network': {'name': 'net1',
|
||||
'tenant_id': self.request.user.project_id}}
|
||||
neutronclient = self.stub_neutronclient()
|
||||
if with_n1kv:
|
||||
n1kv_profile = 'n1kv:profile'
|
||||
test_net_profile = 'test_net_profile'
|
||||
network['network'][n1kv_profile] = test_net_profile
|
||||
form_data['network'][n1kv_profile] = test_net_profile
|
||||
neutronclient.create_network(body=form_data).AndReturn(network)
|
||||
self.mox.ReplayAll()
|
||||
ret_val = api.neutron.network_create(
|
||||
self.request,
|
||||
name='net1',
|
||||
net_profile_id=test_net_profile)
|
||||
# assert that when 'net_profile_id' is passed as a param to
|
||||
# network_create function, 'n1kv:profile' is appended as a key to
|
||||
# the returned network dictionary with value TEST_NET_PROFILE
|
||||
self.assertEqual(test_net_profile, ret_val[n1kv_profile])
|
||||
# also assert that 'net_profile_id' isn't there in the returned
|
||||
# network dictionary
|
||||
self.assertNotIn('net_profile_id', [k for k, _ in ret_val.items()])
|
||||
else:
|
||||
neutronclient.create_network(body=form_data).AndReturn(network)
|
||||
self.mox.ReplayAll()
|
||||
ret_val = api.neutron.network_create(self.request, name='net1')
|
||||
neutronclient.create_network(body=form_data).AndReturn(network)
|
||||
self.mox.ReplayAll()
|
||||
ret_val = api.neutron.network_create(self.request, name='net1')
|
||||
self.assertIsInstance(ret_val, api.neutron.Network)
|
||||
|
||||
def test_network_create(self):
|
||||
self._test_network_create()
|
||||
|
||||
def test_network_create_with_net_profile(self):
|
||||
self._test_network_create(with_n1kv=True)
|
||||
|
||||
def test_network_update(self):
|
||||
network = {'network': self.api_networks.first()}
|
||||
network_id = self.api_networks.first()['id']
|
||||
@ -402,7 +377,7 @@ class NeutronApiTests(test.APITestCase):
|
||||
ret_val = api.neutron.port_get(self.request, port_id)
|
||||
self.assertIsInstance(ret_val, api.neutron.Port)
|
||||
|
||||
def _test_port_create(self, with_n1kv=False):
|
||||
def test_port_create(self):
|
||||
port = {'port': self.api_ports.first()}
|
||||
params = {'network_id': port['port']['network_id'],
|
||||
'tenant_id': port['port']['tenant_id'],
|
||||
@ -410,39 +385,12 @@ class NeutronApiTests(test.APITestCase):
|
||||
'device_id': port['port']['device_id']}
|
||||
|
||||
neutronclient = self.stub_neutronclient()
|
||||
if with_n1kv:
|
||||
n1kv_profile = 'n1kv:profile'
|
||||
test_policy_profile = 'test_policy_profile'
|
||||
port['port'][n1kv_profile] = test_policy_profile
|
||||
body = {k: v for (k, v) in params.items()}
|
||||
body[n1kv_profile] = port['port'][n1kv_profile]
|
||||
neutronclient.create_port(body={'port': body}).AndReturn(port)
|
||||
self.mox.ReplayAll()
|
||||
ret_val = api.neutron.port_create(
|
||||
self.request,
|
||||
policy_profile_id=test_policy_profile,
|
||||
**params)
|
||||
# assert that when 'policy_profile_id' is passed as a param to
|
||||
# port_create function, 'n1kv:profile' is appended as a key to the
|
||||
# returned port dictionary with value TEST_POLICY_PROFILE
|
||||
self.assertEqual(test_policy_profile, ret_val[n1kv_profile])
|
||||
# also assert that 'policy_profile_id' isn't there in the returned
|
||||
# port dictionary
|
||||
self.assertNotIn('policy_profile_id',
|
||||
[k for k, _ in ret_val.items()])
|
||||
else:
|
||||
neutronclient.create_port(body={'port': params}).AndReturn(port)
|
||||
self.mox.ReplayAll()
|
||||
ret_val = api.neutron.port_create(self.request, **params)
|
||||
neutronclient.create_port(body={'port': params}).AndReturn(port)
|
||||
self.mox.ReplayAll()
|
||||
ret_val = api.neutron.port_create(self.request, **params)
|
||||
self.assertIsInstance(ret_val, api.neutron.Port)
|
||||
self.assertEqual(api.neutron.Port(port['port']).id, ret_val.id)
|
||||
|
||||
def test_port_create(self):
|
||||
self._test_port_create()
|
||||
|
||||
def test_port_create_with_policy_profile(self):
|
||||
self._test_port_create(with_n1kv=True)
|
||||
|
||||
def test_port_update(self):
|
||||
port_data = self.api_ports.first()
|
||||
port_id = port_data['id']
|
||||
|
@ -172,9 +172,7 @@ OPENSTACK_NEUTRON_NETWORK = {
|
||||
# to avoid stubbing neutron extension check calls.
|
||||
'enable_firewall': False,
|
||||
'enable_vpn': False,
|
||||
'profile_support': None,
|
||||
'enable_distributed_router': False,
|
||||
# 'profile_support': 'cisco'
|
||||
}
|
||||
|
||||
OPENSTACK_HYPERVISOR_FEATURES = {
|
||||
|
@ -44,10 +44,6 @@ def data(TEST):
|
||||
TEST.monitors = utils.TestDataContainer()
|
||||
TEST.neutron_quotas = utils.TestDataContainer()
|
||||
TEST.neutron_quota_usages = utils.TestDataContainer()
|
||||
TEST.net_profiles = utils.TestDataContainer()
|
||||
TEST.policy_profiles = utils.TestDataContainer()
|
||||
TEST.network_profile_binding = utils.TestDataContainer()
|
||||
TEST.policy_profile_binding = utils.TestDataContainer()
|
||||
TEST.vpnservices = utils.TestDataContainer()
|
||||
TEST.ikepolicies = utils.TestDataContainer()
|
||||
TEST.ipsecpolicies = utils.TestDataContainer()
|
||||
@ -73,10 +69,6 @@ def data(TEST):
|
||||
TEST.api_members = utils.TestDataContainer()
|
||||
TEST.api_monitors = utils.TestDataContainer()
|
||||
TEST.api_extensions = utils.TestDataContainer()
|
||||
TEST.api_net_profiles = utils.TestDataContainer()
|
||||
TEST.api_policy_profiles = utils.TestDataContainer()
|
||||
TEST.api_network_profile_binding = utils.TestDataContainer()
|
||||
TEST.api_policy_profile_binding = utils.TestDataContainer()
|
||||
TEST.api_vpnservices = utils.TestDataContainer()
|
||||
TEST.api_ikepolicies = utils.TestDataContainer()
|
||||
TEST.api_ipsecpolicies = utils.TestDataContainer()
|
||||
@ -117,47 +109,6 @@ def data(TEST):
|
||||
TEST.networks.add(neutron.Network(network))
|
||||
TEST.subnets.add(subnet)
|
||||
|
||||
# Network profile for network when using the cisco n1k plugin.
|
||||
net_profile_dict = {'name': 'net_profile_test1',
|
||||
'segment_type': 'vlan',
|
||||
'physical_network': 'phys1',
|
||||
'segment_range': '3000-3100',
|
||||
'id':
|
||||
'00000000-1111-1111-1111-000000000000',
|
||||
'project': TEST.networks.get(name="net1")['tenant_id'],
|
||||
# vlan profiles have no sub_type or multicast_ip_range
|
||||
'multicast_ip_range': None,
|
||||
'sub_type': None}
|
||||
|
||||
TEST.api_net_profiles.add(net_profile_dict)
|
||||
TEST.net_profiles.add(neutron.Profile(net_profile_dict))
|
||||
|
||||
# Policy profile for port when using the cisco n1k plugin.
|
||||
policy_profile_dict = {'name': 'policy_profile_test1',
|
||||
'id':
|
||||
'00000000-9999-9999-9999-000000000000'}
|
||||
|
||||
TEST.api_policy_profiles.add(policy_profile_dict)
|
||||
TEST.policy_profiles.add(neutron.Profile(policy_profile_dict))
|
||||
|
||||
# Network profile binding.
|
||||
network_profile_binding_dict = {'profile_id':
|
||||
'00000000-1111-1111-1111-000000000000',
|
||||
'tenant_id': network_dict['tenant_id']}
|
||||
|
||||
TEST.api_network_profile_binding.add(network_profile_binding_dict)
|
||||
TEST.network_profile_binding.add(neutron.Profile(
|
||||
network_profile_binding_dict))
|
||||
|
||||
# Policy profile binding.
|
||||
policy_profile_binding_dict = {'profile_id':
|
||||
'00000000-9999-9999-9999-000000000000',
|
||||
'tenant_id': network_dict['tenant_id']}
|
||||
|
||||
TEST.api_policy_profile_binding.add(policy_profile_binding_dict)
|
||||
TEST.policy_profile_binding.add(neutron.Profile(
|
||||
policy_profile_binding_dict))
|
||||
|
||||
# Ports on 1st network.
|
||||
port_dict = {'admin_state_up': True,
|
||||
'device_id': 'af75c8e5-a1cc-4567-8d04-44fcd6922890',
|
||||
@ -951,167 +902,19 @@ def data(TEST):
|
||||
fw2._apidict['policy'] = policy1
|
||||
TEST.firewalls.add(fw2)
|
||||
|
||||
# Additional Cisco N1K profiles.
|
||||
|
||||
# 2nd network profile for network when using the cisco n1k plugin.
|
||||
# Profile applied on 1st network.
|
||||
net_profile_dict = {'name': 'net_profile_test2',
|
||||
'segment_type': 'overlay',
|
||||
'sub_type': 'native_vxlan',
|
||||
'segment_range': '10000-10100',
|
||||
'multicast_ip_range': '144.0.0.0-144.0.0.100',
|
||||
'id':
|
||||
'00000000-2222-2222-2222-000000000000',
|
||||
'project': '1',
|
||||
# overlay profiles have no physical_network
|
||||
'physical_network': None}
|
||||
|
||||
TEST.api_net_profiles.add(net_profile_dict)
|
||||
TEST.net_profiles.add(neutron.Profile(net_profile_dict))
|
||||
|
||||
# 2nd network profile binding.
|
||||
network_profile_binding_dict = {'profile_id':
|
||||
'00000000-2222-2222-2222-000000000000',
|
||||
'tenant_id': '1'}
|
||||
|
||||
TEST.api_network_profile_binding.add(network_profile_binding_dict)
|
||||
TEST.network_profile_binding.add(neutron.Profile(
|
||||
network_profile_binding_dict))
|
||||
|
||||
# 3rd network profile for network when using the cisco n1k plugin
|
||||
# Profile applied on 1st network
|
||||
net_profile_dict = {'name': 'net_profile_test3',
|
||||
'segment_type': 'overlay',
|
||||
'sub_type': 'other',
|
||||
'other_subtype': 'GRE',
|
||||
'segment_range': '11000-11100',
|
||||
'id':
|
||||
'00000000-3333-3333-3333-000000000000',
|
||||
'project': '1'}
|
||||
|
||||
TEST.api_net_profiles.add(net_profile_dict)
|
||||
TEST.net_profiles.add(neutron.Profile(net_profile_dict))
|
||||
|
||||
# 3rd network profile binding
|
||||
network_profile_binding_dict = {'profile_id':
|
||||
'00000000-3333-3333-3333-000000000000',
|
||||
'tenant_id': '1'}
|
||||
|
||||
TEST.api_network_profile_binding.add(network_profile_binding_dict)
|
||||
TEST.network_profile_binding.add(neutron.Profile(
|
||||
network_profile_binding_dict))
|
||||
|
||||
# 4th network profile for network when using the cisco n1k plugin
|
||||
# Profile applied on 1st network
|
||||
net_profile_dict = {'name': 'net_profile_test4',
|
||||
'segment_type': 'trunk',
|
||||
'sub_type_trunk': 'vlan',
|
||||
'id':
|
||||
'00000000-4444-4444-4444-000000000000',
|
||||
'project': '1'}
|
||||
|
||||
TEST.api_net_profiles.add(net_profile_dict)
|
||||
TEST.net_profiles.add(neutron.Profile(net_profile_dict))
|
||||
|
||||
# 4th network profile binding
|
||||
network_profile_binding_dict = {'profile_id':
|
||||
'00000000-4444-4444-4444-000000000000',
|
||||
'tenant_id': '1'}
|
||||
|
||||
TEST.api_network_profile_binding.add(network_profile_binding_dict)
|
||||
TEST.network_profile_binding.add(neutron.Profile(
|
||||
network_profile_binding_dict))
|
||||
|
||||
# Adding a new network and new network and policy profile
|
||||
# similar to the first to test launching an instance with multiple
|
||||
# nics and multiple profiles.
|
||||
|
||||
# 4th network to use for testing instances with multiple-nics & profiles
|
||||
network_dict = {'admin_state_up': True,
|
||||
'id': '7aa23d91-ffff-abab-dcdc-3411ae767e8a',
|
||||
'name': 'net4',
|
||||
'status': 'ACTIVE',
|
||||
'subnets': ['31be4a21-aadd-73da-6422-821ff249a4bb'],
|
||||
'tenant_id': '1',
|
||||
'router:external': False,
|
||||
'shared': False}
|
||||
subnet_dict = {'allocation_pools': [{'end': '11.10.0.254',
|
||||
'start': '11.10.0.2'}],
|
||||
'dns_nameservers': [],
|
||||
'host_routes': [],
|
||||
'cidr': '11.10.0.0/24',
|
||||
'enable_dhcp': True,
|
||||
'gateway_ip': '11.10.0.1',
|
||||
'id': network_dict['subnets'][0],
|
||||
'ip_version': 4,
|
||||
'name': 'mysubnet4',
|
||||
'network_id': network_dict['id'],
|
||||
'tenant_id': network_dict['tenant_id']}
|
||||
|
||||
TEST.api_networks.add(network_dict)
|
||||
TEST.api_subnets.add(subnet_dict)
|
||||
|
||||
network = copy.deepcopy(network_dict)
|
||||
subnet = neutron.Subnet(subnet_dict)
|
||||
network['subnets'] = [subnet]
|
||||
TEST.networks.add(neutron.Network(network))
|
||||
TEST.subnets.add(subnet)
|
||||
|
||||
# 5th network profile for network when using the cisco n1k plugin
|
||||
# Network Profile applied on 4th network
|
||||
net_profile_dict = {'name': 'net_profile_test5',
|
||||
'segment_type': 'vlan',
|
||||
'physical_network': 'phys5',
|
||||
'segment_range': '400-450',
|
||||
'id':
|
||||
'00000000-5555-5555-5555-000000000000',
|
||||
'project': TEST.networks.get(name="net4")['tenant_id']}
|
||||
|
||||
TEST.api_net_profiles.add(net_profile_dict)
|
||||
TEST.net_profiles.add(neutron.Profile(net_profile_dict))
|
||||
|
||||
# 2nd policy profile for port when using the cisco n1k plugin
|
||||
policy_profile_dict = {'name': 'policy_profile_test2',
|
||||
'id':
|
||||
'11111111-9999-9999-9999-111111111111'}
|
||||
|
||||
TEST.api_policy_profiles.add(policy_profile_dict)
|
||||
TEST.policy_profiles.add(neutron.Profile(policy_profile_dict))
|
||||
|
||||
# network profile binding
|
||||
network_profile_binding_dict = {'profile_id':
|
||||
'00000000-5555-5555-5555-000000000000',
|
||||
'tenant_id':
|
||||
TEST.networks.get(name="net4")['tenant_id']
|
||||
}
|
||||
|
||||
TEST.api_network_profile_binding.add(network_profile_binding_dict)
|
||||
TEST.network_profile_binding.add(neutron.Profile(
|
||||
network_profile_binding_dict))
|
||||
|
||||
# policy profile binding
|
||||
policy_profile_binding_dict = {'profile_id':
|
||||
'11111111-9999-9999-9999-111111111111',
|
||||
'tenant_id':
|
||||
TEST.networks.get(name="net4")['tenant_id']}
|
||||
|
||||
TEST.api_policy_profile_binding.add(policy_profile_binding_dict)
|
||||
TEST.policy_profile_binding.add(neutron.Profile(
|
||||
policy_profile_binding_dict))
|
||||
|
||||
# ports on 4th network
|
||||
port_dict = {'admin_state_up': True,
|
||||
'device_id': '9872faaa-b2b2-eeee-9911-21332eedaa77',
|
||||
'device_owner': 'network:dhcp',
|
||||
'fixed_ips': [{'ip_address': '11.10.0.3',
|
||||
'subnet_id':
|
||||
TEST.subnets.get(name="mysubnet4")['id']}],
|
||||
TEST.subnets.first().id}],
|
||||
'id': 'a21dcd22-6733-cccc-aa32-22adafaf16a2',
|
||||
'mac_address': '78:22:ff:1a:ba:23',
|
||||
'name': 'port5',
|
||||
'network_id': TEST.networks.get(name="net4")['id'],
|
||||
'network_id': TEST.networks.first().id,
|
||||
'status': 'ACTIVE',
|
||||
'tenant_id': TEST.networks.get(name="net4")['tenant_id'],
|
||||
'tenant_id': TEST.networks.first().tenant_id,
|
||||
'binding:vnic_type': 'normal',
|
||||
'binding:host_id': 'host'}
|
||||
TEST.api_ports.add(port_dict)
|
||||
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
upgrade:
|
||||
- The ``profile_support`` setting has been removed from the
|
||||
``OPENSTACK_NEUTRON_NETWORK`` dict, and any usages have been removed from
|
||||
the Horizon code base. If you were relying on this being set by default,
|
||||
you will now need to manually set the value in your plugin/customisation.
|
Loading…
Reference in New Issue
Block a user