diff --git a/api-ref/source/index.rst b/api-ref/source/index.rst index 11bc2692681d..3b1e438d5b76 100644 --- a/api-ref/source/index.rst +++ b/api-ref/source/index.rst @@ -63,7 +63,6 @@ the `API guide <http://developer.openstack.org/api-guide/compute/index.html>`_. .. include:: os-floating-ip-dns.inc .. include:: os-floating-ip-pools.inc .. include:: os-floating-ips.inc -.. include:: os-floating-ips-bulk.inc .. include:: os-security-groups.inc .. include:: os-security-group-default-rules.inc .. include:: os-security-group-rules.inc @@ -81,3 +80,4 @@ Compute API in the past, but no longer exist. .. include:: os-fping.inc .. include:: os-virtual-interfaces.inc .. include:: os-fixed-ips.inc +.. include:: os-floating-ips-bulk.inc diff --git a/api-ref/source/os-floating-ips-bulk.inc b/api-ref/source/os-floating-ips-bulk.inc index 653415f12dac..94ef9ca6c006 100644 --- a/api-ref/source/os-floating-ips-bulk.inc +++ b/api-ref/source/os-floating-ips-bulk.inc @@ -8,6 +8,7 @@ Since these APIs are only implemented for **nova-network**, they are deprecated. These will fail with a 404 starting from microversion 2.36. + It was removed in the 18.0.0 Rocky release. Bulk-creates, deletes, and lists floating IPs. Default pool name is ``nova``. @@ -24,7 +25,8 @@ Lists all floating IPs. Normal response codes: 200 -Error response codes: unauthorized(401), forbidden(403), itemNotFound(404) +Error response codes: unauthorized(401), forbidden(403), itemNotFound(404), +gone(410) Response -------- @@ -54,7 +56,7 @@ Bulk-creates floating IPs. Normal response codes: 200 Error response codes: badRequest(400), unauthorized(401), forbidden(403), -conflict(409) +conflict(409), gone(410) Request ------- @@ -96,7 +98,8 @@ Bulk-deletes floating IPs. Normal response codes: 200 -Error response codes: badRequest(400), unauthorized(401), forbidden(403), itemNotFound(404) +Error response codes: badRequest(400), unauthorized(401), forbidden(403), +itemNotFound(404), gone(410) Request ------- @@ -131,7 +134,8 @@ Lists all floating IPs for a host. Normal response codes: 200 -Error response codes: unauthorized(401), forbidden(403), itemNotFound(404) +Error response codes: unauthorized(401), forbidden(403), itemNotFound(404), +gone(410) Request ------- diff --git a/nova/api/openstack/compute/floating_ips_bulk.py b/nova/api/openstack/compute/floating_ips_bulk.py index 1b8708965085..25eea18dd41a 100644 --- a/nova/api/openstack/compute/floating_ips_bulk.py +++ b/nova/api/openstack/compute/floating_ips_bulk.py @@ -12,141 +12,25 @@ # License for the specific language governing permissions and limitations # under the License. -import netaddr -import six -import webob.exc +from webob import exc -from nova.api.openstack.api_version_request \ - import MAX_PROXY_API_SUPPORT_VERSION -from nova.api.openstack.compute.schemas import floating_ips_bulk from nova.api.openstack import wsgi -from nova.api import validation -import nova.conf -from nova import exception -from nova.i18n import _ -from nova import objects -from nova.policies import floating_ips_bulk as fib_policies - -CONF = nova.conf.CONF class FloatingIPBulkController(wsgi.Controller): - @wsgi.Controller.api_version("2.1", MAX_PROXY_API_SUPPORT_VERSION) - @wsgi.expected_errors(404) + @wsgi.expected_errors(410) def index(self, req): - """Return a list of all floating IPs.""" - context = req.environ['nova.context'] - context.can(fib_policies.BASE_POLICY_NAME) + raise exc.HTTPGone() - return self._get_floating_ip_info(context) - - @wsgi.Controller.api_version("2.1", MAX_PROXY_API_SUPPORT_VERSION) - @wsgi.expected_errors(404) + @wsgi.expected_errors(410) def show(self, req, id): - """Return a list of all floating IPs for a given host.""" - context = req.environ['nova.context'] - context.can(fib_policies.BASE_POLICY_NAME) + raise exc.HTTPGone() - return self._get_floating_ip_info(context, id) - - def _get_floating_ip_info(self, context, host=None): - floating_ip_info = {"floating_ip_info": []} - - if host is None: - try: - floating_ips = objects.FloatingIPList.get_all(context) - except exception.NoFloatingIpsDefined: - return floating_ip_info - else: - try: - floating_ips = objects.FloatingIPList.get_by_host(context, - host) - except exception.FloatingIpNotFoundForHost as e: - raise webob.exc.HTTPNotFound(explanation=e.format_message()) - - for floating_ip in floating_ips: - instance_uuid = None - fixed_ip = None - if floating_ip.fixed_ip: - instance_uuid = floating_ip.fixed_ip.instance_uuid - fixed_ip = str(floating_ip.fixed_ip.address) - - result = {'address': str(floating_ip.address), - 'pool': floating_ip.pool, - 'interface': floating_ip.interface, - 'project_id': floating_ip.project_id, - 'instance_uuid': instance_uuid, - 'fixed_ip': fixed_ip} - floating_ip_info['floating_ip_info'].append(result) - - return floating_ip_info - - @wsgi.Controller.api_version("2.1", MAX_PROXY_API_SUPPORT_VERSION) - @wsgi.expected_errors((400, 409)) - @validation.schema(floating_ips_bulk.create) + @wsgi.expected_errors(410) def create(self, req, body): - """Bulk create floating IPs.""" - context = req.environ['nova.context'] - context.can(fib_policies.BASE_POLICY_NAME) + raise exc.HTTPGone() - params = body['floating_ips_bulk_create'] - ip_range = params['ip_range'] - - pool = params.get('pool', CONF.default_floating_pool) - interface = params.get('interface', CONF.public_interface) - - try: - ips = [objects.FloatingIPList.make_ip_info(addr, pool, interface) - for addr in self._address_to_hosts(ip_range)] - except exception.InvalidInput as exc: - raise webob.exc.HTTPBadRequest(explanation=exc.format_message()) - - try: - objects.FloatingIPList.create(context, ips) - except exception.FloatingIpExists as exc: - raise webob.exc.HTTPConflict(explanation=exc.format_message()) - - return {"floating_ips_bulk_create": {"ip_range": ip_range, - "pool": pool, - "interface": interface}} - - @wsgi.Controller.api_version("2.1", MAX_PROXY_API_SUPPORT_VERSION) - @wsgi.expected_errors((400, 404)) - @validation.schema(floating_ips_bulk.delete) + @wsgi.expected_errors(410) def update(self, req, id, body): - """Bulk delete floating IPs.""" - context = req.environ['nova.context'] - context.can(fib_policies.BASE_POLICY_NAME) - - if id != "delete": - msg = _("Unknown action") - raise webob.exc.HTTPNotFound(explanation=msg) - ip_range = body['ip_range'] - try: - ips = (objects.FloatingIPList.make_ip_info(address, None, None) - for address in self._address_to_hosts(ip_range)) - except exception.InvalidInput as exc: - raise webob.exc.HTTPBadRequest(explanation=exc.format_message()) - objects.FloatingIPList.destroy(context, ips) - - return {"floating_ips_bulk_delete": ip_range} - - def _address_to_hosts(self, addresses): - """Iterate over hosts within an address range. - - If an explicit range specifier is missing, the parameter is - interpreted as a specific individual address. - """ - try: - return [netaddr.IPAddress(addresses)] - except ValueError: - net = netaddr.IPNetwork(addresses) - if net.size < 4: - reason = _("/%s should be specified as single address(es) " - "not in cidr format") % net.prefixlen - raise exception.InvalidInput(reason=reason) - else: - return net.iter_hosts() - except netaddr.AddrFormatError as exc: - raise exception.InvalidInput(reason=six.text_type(exc)) + raise exc.HTTPGone() diff --git a/nova/api/openstack/compute/schemas/floating_ips_bulk.py b/nova/api/openstack/compute/schemas/floating_ips_bulk.py deleted file mode 100644 index 2f4849568419..000000000000 --- a/nova/api/openstack/compute/schemas/floating_ips_bulk.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright 2014 IBM Corporation. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -ip_range = { - # TODO(eliqiao) need to find a better pattern - 'type': 'string', - 'pattern': '^[0-9./a-fA-F]*$', -} - -create = { - 'type': 'object', - 'properties': { - 'floating_ips_bulk_create': { - 'type': 'object', - 'properties': { - 'ip_range': ip_range, - 'pool': { - 'type': 'string', 'minLength': 1, 'maxLength': 255, - }, - 'interface': { - 'type': 'string', 'minLength': 1, 'maxLength': 255, - }, - }, - 'required': ['ip_range'], - 'additionalProperties': False, - }, - }, - 'required': ['floating_ips_bulk_create'], - 'additionalProperties': False, -} - - -delete = { - 'type': 'object', - 'properties': { - 'ip_range': ip_range, - }, - 'required': ['ip_range'], - 'additionalProperties': False, -} diff --git a/nova/policies/__init__.py b/nova/policies/__init__.py index 56a7834f71a8..56fea01dd62f 100644 --- a/nova/policies/__init__.py +++ b/nova/policies/__init__.py @@ -44,7 +44,6 @@ from nova.policies import flavors from nova.policies import floating_ip_dns from nova.policies import floating_ip_pools from nova.policies import floating_ips -from nova.policies import floating_ips_bulk from nova.policies import hide_server_addresses from nova.policies import hosts from nova.policies import hypervisors @@ -119,7 +118,6 @@ def list_rules(): floating_ip_dns.list_rules(), floating_ip_pools.list_rules(), floating_ips.list_rules(), - floating_ips_bulk.list_rules(), hide_server_addresses.list_rules(), hosts.list_rules(), hypervisors.list_rules(), diff --git a/nova/policies/floating_ips_bulk.py b/nova/policies/floating_ips_bulk.py deleted file mode 100644 index a9fdad3264a6..000000000000 --- a/nova/policies/floating_ips_bulk.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2016 Cloudbase Solutions Srl -# All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from oslo_policy import policy - -from nova.policies import base - - -BASE_POLICY_NAME = 'os_compute_api:os-floating-ips-bulk' - - -floating_ips_bulk_policies = [ - policy.DocumentedRuleDefault( - BASE_POLICY_NAME, - base.RULE_ADMIN_API, - "Bulk-create, delete, and list floating IPs. API is deprecated.", - [ - { - 'method': 'GET', - 'path': '/os-floating-ips-bulk' - }, - { - 'method': 'POST', - 'path': '/os-floating-ips-bulk' - }, - { - 'method': 'PUT', - 'path': '/os-floating-ips-bulk/delete' - }, - { - 'method': 'GET', - 'path': '/os-floating-ips-bulk/{host_name}' - }, - ]), -] - - -def list_rules(): - return floating_ips_bulk_policies diff --git a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-create-req.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-create-req.json.tpl deleted file mode 100644 index 2f16cf07cb9f..000000000000 --- a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-create-req.json.tpl +++ /dev/null @@ -1,7 +0,0 @@ -{ - "floating_ips_bulk_create": { - "ip_range": "%(ip_range)s", - "pool": "%(pool)s", - "interface": "%(interface)s" - } -} diff --git a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-create-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-create-resp.json.tpl deleted file mode 100644 index ef1cbfb17f31..000000000000 --- a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-create-resp.json.tpl +++ /dev/null @@ -1,7 +0,0 @@ -{ - "floating_ips_bulk_create": { - "interface": "eth0", - "ip_range": "192.168.1.0/24", - "pool": "nova" - } -} \ No newline at end of file diff --git a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-delete-req.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-delete-req.json.tpl deleted file mode 100644 index d630d669cda3..000000000000 --- a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-delete-req.json.tpl +++ /dev/null @@ -1,3 +0,0 @@ -{ - "ip_range": "%(ip_range)s" -} diff --git a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-delete-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-delete-resp.json.tpl deleted file mode 100644 index 166984b24a4f..000000000000 --- a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-delete-resp.json.tpl +++ /dev/null @@ -1,3 +0,0 @@ -{ - "floating_ips_bulk_delete": "192.168.1.0/24" -} \ No newline at end of file diff --git a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-list-by-host-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-list-by-host-resp.json.tpl deleted file mode 100644 index dff42df89496..000000000000 --- a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-list-by-host-resp.json.tpl +++ /dev/null @@ -1,12 +0,0 @@ -{ - "floating_ip_info": [ - { - "address": "10.10.10.3", - "instance_uuid": null, - "interface": "eth0", - "pool": "nova", - "fixed_ip": null, - "project_id": null - } - ] -} diff --git a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-list-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-list-resp.json.tpl deleted file mode 100644 index a61bc007d017..000000000000 --- a/nova/tests/functional/api_sample_tests/api_samples/os-floating-ips-bulk/floating-ips-bulk-list-resp.json.tpl +++ /dev/null @@ -1,28 +0,0 @@ -{ - "floating_ip_info": [ - { - "address": "10.10.10.1", - "instance_uuid": null, - "interface": "eth0", - "pool": "nova", - "fixed_ip": null, - "project_id": null - }, - { - "address": "10.10.10.2", - "instance_uuid": null, - "interface": "eth0", - "pool": "nova", - "fixed_ip": null, - "project_id": null - }, - { - "address": "10.10.10.3", - "instance_uuid": null, - "interface": "eth0", - "pool": "nova", - "fixed_ip": null, - "project_id": null - } - ] -} diff --git a/nova/tests/functional/api_sample_tests/test_floating_ips_bulk.py b/nova/tests/functional/api_sample_tests/test_floating_ips_bulk.py index aa891cad9d24..ce662f69f0d4 100644 --- a/nova/tests/functional/api_sample_tests/test_floating_ips_bulk.py +++ b/nova/tests/functional/api_sample_tests/test_floating_ips_bulk.py @@ -14,7 +14,7 @@ # under the License. import nova.conf -from nova import context +from nova.tests.functional.api import client as api_client from nova.tests.functional.api_sample_tests import api_sample_base CONF = nova.conf.CONF @@ -22,61 +22,30 @@ CONF = nova.conf.CONF class FloatingIpsBulkTest(api_sample_base.ApiSampleTestBaseV21): ADMIN_API = True - sample_dir = "os-floating-ips-bulk" - - def setUp(self): - super(FloatingIpsBulkTest, self).setUp() - pool = CONF.default_floating_pool - interface = CONF.public_interface - - self.ip_pool = [ - { - 'address': "10.10.10.1", - 'pool': pool, - 'interface': interface, - 'host': None - }, - { - 'address': "10.10.10.2", - 'pool': pool, - 'interface': interface, - 'host': None - }, - { - 'address': "10.10.10.3", - 'pool': pool, - 'interface': interface, - 'host': "testHost" - }, - ] - self.compute.db.floating_ip_bulk_create( - context.get_admin_context(), self.ip_pool) - - self.addCleanup(self.compute.db.floating_ip_bulk_destroy, - context.get_admin_context(), self.ip_pool) def test_floating_ips_bulk_list(self): - response = self._do_get('os-floating-ips-bulk') - self._verify_response('floating-ips-bulk-list-resp', - {}, response, 200) + ex = self.assertRaises(api_client.OpenStackApiException, + self.api.api_get, 'os-floating-ips-bulk') + self.assertEqual(410, ex.response.status_code) def test_floating_ips_bulk_list_by_host(self): - response = self._do_get('os-floating-ips-bulk/testHost') - self._verify_response('floating-ips-bulk-list-by-host-resp', - {}, response, 200) + ex = self.assertRaises(api_client.OpenStackApiException, + self.api.api_get, + 'os-floating-ips-bulk/testHost') + self.assertEqual(410, ex.response.status_code) def test_floating_ips_bulk_create(self): - response = self._do_post('os-floating-ips-bulk', - 'floating-ips-bulk-create-req', - {"ip_range": "192.168.1.0/24", - "pool": CONF.default_floating_pool, - "interface": CONF.public_interface}) - self._verify_response('floating-ips-bulk-create-resp', {}, - response, 200) + ex = self.assertRaises(api_client.OpenStackApiException, + self.api.api_post, + '/os-floating-ips-bulk', + {"ip_range": "192.168.1.0/24", + "pool": CONF.default_floating_pool, + "interface": CONF.public_interface}) + self.assertEqual(410, ex.response.status_code) def test_floating_ips_bulk_delete(self): - response = self._do_put('os-floating-ips-bulk/delete', - 'floating-ips-bulk-delete-req', - {"ip_range": "192.168.1.0/24"}) - self._verify_response('floating-ips-bulk-delete-resp', {}, - response, 200) + ex = self.assertRaises(api_client.OpenStackApiException, + self.api.api_put, + 'os-floating-ips-bulk/delete', + {"ip_range": "192.168.1.0/24"}) + self.assertEqual(410, ex.response.status_code) diff --git a/nova/tests/unit/api/openstack/compute/test_floating_ips_bulk.py b/nova/tests/unit/api/openstack/compute/test_floating_ips_bulk.py deleted file mode 100644 index 3265b432ef80..000000000000 --- a/nova/tests/unit/api/openstack/compute/test_floating_ips_bulk.py +++ /dev/null @@ -1,218 +0,0 @@ -# Copyright 2012 IBM Corp. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import mock -import netaddr -from oslo_config import cfg -import webob - -from nova.api.openstack.compute import floating_ips_bulk \ - as fipbulk_v21 -from nova import context -from nova import exception -from nova import objects -from nova import test -from nova.tests.unit.api.openstack import fakes -from nova.tests import uuidsentinel as uuids - -CONF = cfg.CONF - - -class FloatingIPBulkV21(test.TestCase): - - floating_ips_bulk = fipbulk_v21 - bad_request = exception.ValidationError - - def setUp(self): - super(FloatingIPBulkV21, self).setUp() - - self.context = context.get_admin_context() - self.controller = self.floating_ips_bulk.FloatingIPBulkController() - self.req = fakes.HTTPRequest.blank('') - - def _setup_floating_ips(self, ip_range): - body = {'floating_ips_bulk_create': {'ip_range': ip_range}} - res_dict = self.controller.create(self.req, body=body) - response = {"floating_ips_bulk_create": { - 'ip_range': ip_range, - 'pool': CONF.default_floating_pool, - 'interface': CONF.public_interface}} - self.assertEqual(res_dict, response) - - def test_create_ips(self): - ip_range = '192.168.1.0/28' - self._setup_floating_ips(ip_range) - - def test_create_ips_pool(self): - ip_range = '10.0.1.0/29' - pool = 'a new pool' - body = {'floating_ips_bulk_create': - {'ip_range': ip_range, - 'pool': pool}} - res_dict = self.controller.create(self.req, body=body) - response = {"floating_ips_bulk_create": { - 'ip_range': ip_range, - 'pool': pool, - 'interface': CONF.public_interface}} - self.assertEqual(res_dict, response) - - def test_list_ips(self): - self._test_list_ips(self.req) - - def _test_list_ips(self, req): - ip_range = '192.168.1.1/28' - self._setup_floating_ips(ip_range) - res_dict = self.controller.index(req) - - ip_info = [{'address': str(ip_addr), - 'pool': CONF.default_floating_pool, - 'interface': CONF.public_interface, - 'project_id': None, - 'instance_uuid': None, - 'fixed_ip': None} - for ip_addr in netaddr.IPNetwork(ip_range).iter_hosts()] - response = {'floating_ip_info': ip_info} - - self.assertEqual(res_dict, response) - - def test_list_ips_associated(self): - self._test_list_ips_associated(self.req) - - @mock.patch('nova.objects.FloatingIPList.get_all') - def _test_list_ips_associated(self, req, mock_get): - instance_uuid = uuids.instance - fixed_address = "10.0.0.1" - floating_address = "192.168.0.1" - fixed_ip = objects.FixedIP(instance_uuid=instance_uuid, - address=fixed_address) - floating_ip = objects.FloatingIP(address=floating_address, - fixed_ip=fixed_ip, - pool=CONF.default_floating_pool, - interface=CONF.public_interface, - project_id=None) - floating_list = objects.FloatingIPList(objects=[floating_ip]) - mock_get.return_value = floating_list - res_dict = self.controller.index(req) - - ip_info = [{'address': floating_address, - 'pool': CONF.default_floating_pool, - 'interface': CONF.public_interface, - 'project_id': None, - 'instance_uuid': instance_uuid, - 'fixed_ip': fixed_address}] - response = {'floating_ip_info': ip_info} - - self.assertEqual(res_dict, response) - - def test_list_ip_by_host(self): - self._test_list_ip_by_host(self.req) - - def _test_list_ip_by_host(self, req): - ip_range = '192.168.1.1/28' - self._setup_floating_ips(ip_range) - self.assertRaises(webob.exc.HTTPNotFound, - self.controller.show, req, 'host') - - def test_delete_ips(self): - self._test_delete_ips(self.req) - - def _test_delete_ips(self, req): - ip_range = '192.168.1.0/29' - self._setup_floating_ips(ip_range) - - body = {'ip_range': ip_range} - res_dict = self.controller.update(req, "delete", body=body) - - response = {"floating_ips_bulk_delete": ip_range} - self.assertEqual(res_dict, response) - - # Check that the IPs are actually deleted - res_dict = self.controller.index(req) - response = {'floating_ip_info': []} - self.assertEqual(res_dict, response) - - def test_create_duplicate_fail(self): - ip_range = '192.168.1.0/30' - self._setup_floating_ips(ip_range) - - ip_range = '192.168.1.0/29' - body = {'floating_ips_bulk_create': {'ip_range': ip_range}} - self.assertRaises(webob.exc.HTTPConflict, self.controller.create, - self.req, body=body) - - def test_create_bad_cidr_fail(self): - # netaddr can't handle /32 or 31 cidrs - ip_range = '192.168.1.1/32' - body = {'floating_ips_bulk_create': {'ip_range': ip_range}} - self.assertRaises(webob.exc.HTTPBadRequest, self.controller.create, - self.req, body=body) - - def test_create_invalid_cidr_fail(self): - ip_range = 'not a cidr' - body = {'floating_ips_bulk_create': {'ip_range': ip_range}} - self.assertRaises(self.bad_request, self.controller.create, - self.req, body=body) - - -class FloatingIPBulkPolicyEnforcementV21(test.NoDBTestCase): - - def setUp(self): - super(FloatingIPBulkPolicyEnforcementV21, self).setUp() - self.controller = fipbulk_v21.FloatingIPBulkController() - self.req = fakes.HTTPRequest.blank('') - - def _common_policy_check(self, func, *arg, **kwarg): - rule_name = "os_compute_api:os-floating-ips-bulk" - rule = {rule_name: "project:non_fake"} - self.policy.set_rules(rule) - exc = self.assertRaises( - exception.PolicyNotAuthorized, func, *arg, **kwarg) - self.assertEqual( - "Policy doesn't allow %s to be performed." % rule_name, - exc.format_message()) - - def test_index_policy_failed(self): - self._common_policy_check(self.controller.index, self.req) - - def test_show_ip_policy_failed(self): - self._common_policy_check(self.controller.show, self.req, "host") - - def test_create_policy_failed(self): - ip_range = '192.168.1.0/28' - body = {'floating_ips_bulk_create': {'ip_range': ip_range}} - self._common_policy_check(self.controller.create, self.req, body=body) - - def test_update_policy_failed(self): - ip_range = '192.168.1.0/29' - body = {'ip_range': ip_range} - self._common_policy_check(self.controller.update, self.req, - "delete", body=body) - - -class FloatingIPBulkDeprecationTest(test.NoDBTestCase): - - def setUp(self): - super(FloatingIPBulkDeprecationTest, self).setUp() - self.controller = fipbulk_v21.FloatingIPBulkController() - self.req = fakes.HTTPRequest.blank('', version='2.36') - - def test_all_apis_return_not_found(self): - self.assertRaises(exception.VersionNotFoundForAPIMethod, - self.controller.index, self.req) - self.assertRaises(exception.VersionNotFoundForAPIMethod, - self.controller.show, self.req, fakes.FAKE_UUID) - self.assertRaises(exception.VersionNotFoundForAPIMethod, - self.controller.create, self.req, {}) - self.assertRaises(exception.VersionNotFoundForAPIMethod, - self.controller.update, self.req, fakes.FAKE_UUID, {}) diff --git a/nova/tests/unit/fake_policy.py b/nova/tests/unit/fake_policy.py index dfbd730de6e3..6c00b1dc31fe 100644 --- a/nova/tests/unit/fake_policy.py +++ b/nova/tests/unit/fake_policy.py @@ -51,7 +51,6 @@ policy_data = """ "os_compute_api:os-floating-ip-dns:domain:delete": "", "os_compute_api:os-floating-ip-pools": "", "os_compute_api:os-floating-ips": "", - "os_compute_api:os-floating-ips-bulk": "", "os_compute_api:os-instance-actions": "", "os_compute_api:os-instance-usage-audit-log": "", diff --git a/nova/tests/unit/test_policy.py b/nova/tests/unit/test_policy.py index a21604fceed9..367aec8637d5 100644 --- a/nova/tests/unit/test_policy.py +++ b/nova/tests/unit/test_policy.py @@ -311,7 +311,6 @@ class RealRolePolicyTestCase(test.NoDBTestCase): "os_compute_api:os-flavor-manage:create", "os_compute_api:os-flavor-manage:update", "os_compute_api:os-flavor-manage:delete", -"os_compute_api:os-floating-ips-bulk", "os_compute_api:os-floating-ip-dns:domain:delete", "os_compute_api:os-floating-ip-dns:domain:update", "os_compute_api:os-hosts", diff --git a/releasenotes/notes/bp-remove-nova-network-api-removals-931ad60364f6f2a8.yaml b/releasenotes/notes/bp-remove-nova-network-api-removals-931ad60364f6f2a8.yaml index c209a6ae7838..ab9b881b785d 100644 --- a/releasenotes/notes/bp-remove-nova-network-api-removals-931ad60364f6f2a8.yaml +++ b/releasenotes/notes/bp-remove-nova-network-api-removals-931ad60364f6f2a8.yaml @@ -12,6 +12,10 @@ upgrade: * ``GET /os-fixed-ips/{fixed_ip}`` * ``POST /os-fixed-ips/{fixed_ip}/action (reserve)`` * ``POST /os-fixed-ips/{fixed_ip}/action (unreserve)`` + * ``GET /os-floating-ips-bulk`` + * ``GET /os-floating-ips-bulk/{host_name}`` + * ``POST /os-floating-ips-bulk`` + * ``PUT /os-floating-ips-bulk/delete`` In addition, the following configuration options have been removed.