Merge "Remove Newton-era min compute checks for server create with device tags"
This commit is contained in:
commit
c9bc00b364
|
@ -43,12 +43,10 @@ from nova.i18n import _
|
|||
from nova.image import api as image_api
|
||||
from nova import network as network_api
|
||||
from nova import objects
|
||||
from nova.objects import service as service_obj
|
||||
from nova.policies import servers as server_policies
|
||||
from nova import utils
|
||||
|
||||
TAG_SEARCH_FILTERS = ('tags', 'tags-any', 'not-tags', 'not-tags-any')
|
||||
DEVICE_TAGGING_MIN_COMPUTE_VERSION = 14
|
||||
PARTIAL_CONSTRUCT_FOR_CELL_DOWN_MIN_VERSION = '2.69'
|
||||
PAGING_SORTING_PARAMS = ('sort_key', 'sort_dir', 'limit', 'marker')
|
||||
|
||||
|
@ -398,8 +396,7 @@ class ServersController(wsgi.Controller):
|
|||
expl = _("Duplicate networks (%s) are not allowed") % net_id
|
||||
raise exc.HTTPBadRequest(explanation=expl)
|
||||
|
||||
def _get_requested_networks(self, requested_networks,
|
||||
supports_device_tagging=False):
|
||||
def _get_requested_networks(self, requested_networks):
|
||||
"""Create a list of requested networks from the networks attribute."""
|
||||
|
||||
# Starting in the 2.37 microversion, requested_networks is either a
|
||||
|
@ -422,9 +419,6 @@ class ServersController(wsgi.Controller):
|
|||
request.port_id = network.get('port', None)
|
||||
|
||||
request.tag = network.get('tag', None)
|
||||
if request.tag and not supports_device_tagging:
|
||||
msg = _('Network interface tags are not yet supported.')
|
||||
raise exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
if request.port_id:
|
||||
request.network_id = None
|
||||
|
@ -474,8 +468,7 @@ class ServersController(wsgi.Controller):
|
|||
|
||||
@staticmethod
|
||||
def _process_bdms_for_create(
|
||||
context, target, server_dict, create_kwargs,
|
||||
supports_device_tagging):
|
||||
context, target, server_dict, create_kwargs):
|
||||
"""Processes block_device_mapping(_v2) req parameters for server create
|
||||
|
||||
:param context: The nova auth request context
|
||||
|
@ -483,8 +476,6 @@ class ServersController(wsgi.Controller):
|
|||
:param server_dict: The POST /servers request body "server" entry
|
||||
:param create_kwargs: dict that gets populated by this method and
|
||||
passed to nova.comptue.api.API.create()
|
||||
:param supports_device_tagging: True if a suitable microversion was
|
||||
provided for bdm tags during server create, False otherwise
|
||||
:raises: webob.exc.HTTPBadRequest if the request parameters are invalid
|
||||
:raises: nova.exception.Forbidden if a policy check fails
|
||||
"""
|
||||
|
@ -526,14 +517,9 @@ class ServersController(wsgi.Controller):
|
|||
if block_device_mapping:
|
||||
context.can(server_policies.SERVERS % 'create:attach_volume',
|
||||
target)
|
||||
for bdm in block_device_mapping:
|
||||
if bdm.get('tag', None) and not supports_device_tagging:
|
||||
msg = _('Block device tags are not yet supported.')
|
||||
raise exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
def _process_networks_for_create(
|
||||
self, context, target, server_dict, create_kwargs,
|
||||
supports_device_tagging):
|
||||
self, context, target, server_dict, create_kwargs):
|
||||
"""Processes networks request parameter for server create
|
||||
|
||||
:param context: The nova auth request context
|
||||
|
@ -541,8 +527,6 @@ class ServersController(wsgi.Controller):
|
|||
:param server_dict: The POST /servers request body "server" entry
|
||||
:param create_kwargs: dict that gets populated by this method and
|
||||
passed to nova.comptue.api.API.create()
|
||||
:param supports_device_tagging: True if a suitable microversion was
|
||||
provided for VIF tags during server create, False otherwise
|
||||
:raises: webob.exc.HTTPBadRequest if the request parameters are invalid
|
||||
:raises: nova.exception.Forbidden if a policy check fails
|
||||
"""
|
||||
|
@ -550,7 +534,7 @@ class ServersController(wsgi.Controller):
|
|||
|
||||
if requested_networks is not None:
|
||||
requested_networks = self._get_requested_networks(
|
||||
requested_networks, supports_device_tagging)
|
||||
requested_networks)
|
||||
|
||||
# Skip policy check for 'create:attach_network' if there is no
|
||||
# network allocation request.
|
||||
|
@ -687,23 +671,13 @@ class ServersController(wsgi.Controller):
|
|||
self._process_hosts_for_create(context, target, server_dict,
|
||||
create_kwargs, host, node)
|
||||
|
||||
# NOTE(danms): Don't require an answer from all cells here, as
|
||||
# we assume that if a cell isn't reporting we won't schedule into
|
||||
# it anyway. A bit of a gamble, but a reasonable one.
|
||||
min_compute_version = service_obj.get_minimum_version_all_cells(
|
||||
nova_context.get_admin_context(), ['nova-compute'])
|
||||
supports_device_tagging = (min_compute_version >=
|
||||
DEVICE_TAGGING_MIN_COMPUTE_VERSION)
|
||||
|
||||
self._process_bdms_for_create(
|
||||
context, target, server_dict, create_kwargs,
|
||||
supports_device_tagging)
|
||||
context, target, server_dict, create_kwargs)
|
||||
|
||||
image_uuid = self._image_from_req_data(server_dict, create_kwargs)
|
||||
|
||||
self._process_networks_for_create(
|
||||
context, target, server_dict, create_kwargs,
|
||||
supports_device_tagging)
|
||||
context, target, server_dict, create_kwargs)
|
||||
|
||||
flavor_id = self._flavor_id_from_req_data(body)
|
||||
try:
|
||||
|
|
|
@ -6226,10 +6226,8 @@ class ServersControllerCreateTestV232(test.NoDBTestCase):
|
|||
self.req.body = jsonutils.dump_as_bytes(self.body)
|
||||
self.controller.create(self.req, body=self.body)
|
||||
|
||||
def test_create_server_no_tags_old_compute(self):
|
||||
def test_create_server_no_tags(self):
|
||||
with test.nested(
|
||||
mock.patch('nova.objects.service.get_minimum_version_all_cells',
|
||||
return_value=13),
|
||||
mock.patch.object(nova.compute.flavors, 'get_flavor_by_flavor_id',
|
||||
return_value=objects.Flavor()),
|
||||
mock.patch.object(
|
||||
|
@ -6240,22 +6238,8 @@ class ServersControllerCreateTestV232(test.NoDBTestCase):
|
|||
):
|
||||
self._create_server()
|
||||
|
||||
@mock.patch('nova.objects.service.get_minimum_version_all_cells',
|
||||
return_value=13)
|
||||
def test_create_server_tagged_nic_old_compute_fails(self, get_min_ver):
|
||||
self.body['server']['networks'][0]['tag'] = 'foo'
|
||||
self.assertRaises(webob.exc.HTTPBadRequest, self._create_server)
|
||||
|
||||
@mock.patch('nova.objects.service.get_minimum_version_all_cells',
|
||||
return_value=13)
|
||||
def test_create_server_tagged_bdm_old_compute_fails(self, get_min_ver):
|
||||
self.body['server']['block_device_mapping_v2'][0]['tag'] = 'foo'
|
||||
self.assertRaises(webob.exc.HTTPBadRequest, self._create_server)
|
||||
|
||||
def test_create_server_tagged_nic_new_compute(self):
|
||||
def test_create_server_tagged_nic(self):
|
||||
with test.nested(
|
||||
mock.patch('nova.objects.service.get_minimum_version_all_cells',
|
||||
return_value=14),
|
||||
mock.patch.object(nova.compute.flavors, 'get_flavor_by_flavor_id',
|
||||
return_value=objects.Flavor()),
|
||||
mock.patch.object(
|
||||
|
@ -6267,10 +6251,8 @@ class ServersControllerCreateTestV232(test.NoDBTestCase):
|
|||
self.body['server']['networks'][0]['tag'] = 'foo'
|
||||
self._create_server()
|
||||
|
||||
def test_create_server_tagged_bdm_new_compute(self):
|
||||
def test_create_server_tagged_bdm(self):
|
||||
with test.nested(
|
||||
mock.patch('nova.objects.service.get_minimum_version_all_cells',
|
||||
return_value=14),
|
||||
mock.patch.object(nova.compute.flavors, 'get_flavor_by_flavor_id',
|
||||
return_value=objects.Flavor()),
|
||||
mock.patch.object(
|
||||
|
|
Loading…
Reference in New Issue