summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nova/api/openstack/compute/access_ips.py121
-rw-r--r--nova/api/openstack/compute/extension_info.py5
-rw-r--r--nova/api/openstack/compute/helpers.py7
-rw-r--r--nova/api/openstack/compute/schemas/access_ips.py24
-rw-r--r--nova/api/openstack/compute/schemas/servers.py8
-rw-r--r--nova/api/openstack/compute/servers.py49
-rw-r--r--nova/api/openstack/compute/views/servers.py5
-rw-r--r--nova/api/validation/parameter_types.py10
-rw-r--r--nova/policies/__init__.py2
-rw-r--r--nova/policies/access_ips.py36
-rw-r--r--nova/tests/unit/api/openstack/compute/test_access_ips.py282
-rw-r--r--nova/tests/unit/api/openstack/compute/test_serversV21.py10
-rw-r--r--nova/tests/unit/fake_policy.py1
-rw-r--r--nova/tests/unit/test_policy.py2
-rw-r--r--releasenotes/notes/extensions_remove-37e9d4092981abbe.yaml10
-rw-r--r--setup.cfg6
16 files changed, 72 insertions, 506 deletions
diff --git a/nova/api/openstack/compute/access_ips.py b/nova/api/openstack/compute/access_ips.py
deleted file mode 100644
index 2944ce41f9..0000000000
--- a/nova/api/openstack/compute/access_ips.py
+++ /dev/null
@@ -1,121 +0,0 @@
-# Copyright 2013 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.
-
-from nova.api.openstack.compute.schemas import access_ips
-from nova.api.openstack import extensions
-from nova.api.openstack import wsgi
-
-ALIAS = "os-access-ips"
-authorize = extensions.os_compute_soft_authorizer(ALIAS)
-
-
-class AccessIPsController(wsgi.Controller):
- def _extend_server(self, req, server):
- db_instance = req.get_db_instance(server['id'])
- ip_v4 = db_instance.get('access_ip_v4')
- ip_v6 = db_instance.get('access_ip_v6')
- server['accessIPv4'] = str(ip_v4) if ip_v4 is not None else ''
- server['accessIPv6'] = str(ip_v6) if ip_v6 is not None else ''
-
- @wsgi.extends
- def show(self, req, resp_obj, id):
- context = req.environ['nova.context']
- if authorize(context):
- server = resp_obj.obj['server']
- self._extend_server(req, server)
-
- @wsgi.extends
- def update(self, req, resp_obj, id, body):
- context = req.environ['nova.context']
- if authorize(context):
- server = resp_obj.obj['server']
- self._extend_server(req, server)
-
- @wsgi.extends(action='rebuild')
- def rebuild(self, req, resp_obj, id, body):
- context = req.environ['nova.context']
- if authorize(context):
- server = resp_obj.obj['server']
- self._extend_server(req, server)
-
- @wsgi.extends
- def detail(self, req, resp_obj):
- context = req.environ['nova.context']
- if authorize(context):
- servers = resp_obj.obj['servers']
- for server in servers:
- self._extend_server(req, server)
-
-
-class AccessIPs(extensions.V21APIExtensionBase):
- """Access IPs support."""
-
- name = "AccessIPs"
- alias = ALIAS
- version = 1
- v4_key = 'accessIPv4'
- v6_key = 'accessIPv6'
-
- def get_controller_extensions(self):
- controller = AccessIPsController()
- extension = extensions.ControllerExtension(self, 'servers',
- controller)
- return [extension]
-
- def get_resources(self):
- return []
-
- def _extend_server(self, server_dict, create_kwargs):
- """Extends the server create/update/rebuild operations.
-
- This extends the server create/update/rebuild operations to
- add accessIPs into each of these.
- """
- if AccessIPs.v4_key in server_dict:
- access_ip_v4 = server_dict.get(AccessIPs.v4_key)
- if access_ip_v4:
- create_kwargs['access_ip_v4'] = access_ip_v4
- else:
- create_kwargs['access_ip_v4'] = None
- if AccessIPs.v6_key in server_dict:
- access_ip_v6 = server_dict.get(AccessIPs.v6_key)
- if access_ip_v6:
- create_kwargs['access_ip_v6'] = access_ip_v6
- else:
- create_kwargs['access_ip_v6'] = None
-
- # Extend server for the 3 extended points
-
- # NOTE(sdague): the server create extension point takes 3 args,
- # but as we throw away one, our unit tests only provide 2. Make
- # arg 3 optional given that we're going to tear all this out soon
- # once extensions are gone.
- def server_create(self, server_dict, create_kwargs, body_deprecated=None):
- self._extend_server(server_dict, create_kwargs)
-
- def server_update(self, server_dict, update_kwargs):
- self._extend_server(server_dict, update_kwargs)
-
- def server_rebuild(self, server_dict, rebuild_kwargs):
- self._extend_server(server_dict, rebuild_kwargs)
-
- # Extend schema for the 3 extended points
- def get_server_create_schema(self, version):
- return access_ips.server_create
-
- def get_server_update_schema(self, version):
- return access_ips.server_create
-
- def get_server_rebuild_schema(self, version):
- return access_ips.server_create
diff --git a/nova/api/openstack/compute/extension_info.py b/nova/api/openstack/compute/extension_info.py
index 64d291db7d..e145d223cb 100644
--- a/nova/api/openstack/compute/extension_info.py
+++ b/nova/api/openstack/compute/extension_info.py
@@ -108,7 +108,10 @@ v21_to_v2_alias_mapping = {
hardcoded_extensions = [
{'name': 'DiskConfig',
'alias': 'os-disk-config',
- 'description': 'Disk Management Extension.'}
+ 'description': 'Disk Management Extension.'},
+ {'name': 'AccessIPs',
+ 'description': 'Access IPs support.',
+ 'alias': 'os-access-ips'},
]
# V2.1 does not support XML but we need to keep an entry in the
diff --git a/nova/api/openstack/compute/helpers.py b/nova/api/openstack/compute/helpers.py
index af4f4e3903..fff7c6b6f7 100644
--- a/nova/api/openstack/compute/helpers.py
+++ b/nova/api/openstack/compute/helpers.py
@@ -17,6 +17,8 @@ from webob import exc
from nova.i18n import _
API_DISK_CONFIG = "OS-DCF:diskConfig"
+API_ACCESS_V4 = "accessIPv4"
+API_ACCESS_V6 = "accessIPv6"
def disk_config_from_api(value):
@@ -59,3 +61,8 @@ def translate_attributes(server_dict, operation_kwargs):
if auto_disk_config_raw is not None:
auto_disk_config = disk_config_from_api(auto_disk_config_raw)
operation_kwargs['auto_disk_config'] = auto_disk_config
+
+ if API_ACCESS_V4 in server_dict:
+ operation_kwargs['access_ip_v4'] = server_dict.pop(API_ACCESS_V4)
+ if API_ACCESS_V6 in server_dict:
+ operation_kwargs['access_ip_v6'] = server_dict.pop(API_ACCESS_V6)
diff --git a/nova/api/openstack/compute/schemas/access_ips.py b/nova/api/openstack/compute/schemas/access_ips.py
deleted file mode 100644
index 37d3eea4b1..0000000000
--- a/nova/api/openstack/compute/schemas/access_ips.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2014 NEC 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.
-
-server_create = {
- 'accessIPv4': {
- 'type': 'string',
- 'format': 'ipv4',
- },
- 'accessIPv6': {
- 'type': 'string',
- 'format': 'ipv6',
- }
-}
diff --git a/nova/api/openstack/compute/schemas/servers.py b/nova/api/openstack/compute/schemas/servers.py
index 61b7a005f8..1e7ca1f7f3 100644
--- a/nova/api/openstack/compute/schemas/servers.py
+++ b/nova/api/openstack/compute/schemas/servers.py
@@ -44,6 +44,8 @@ base_create = {
}
},
'OS-DCF:diskConfig': parameter_types.disk_config,
+ 'accessIPv4': parameter_types.accessIPv4,
+ 'accessIPv6': parameter_types.accessIPv6,
},
'required': ['name', 'flavorRef'],
'additionalProperties': False,
@@ -72,6 +74,8 @@ base_update = {
'properties': {
'name': parameter_types.name,
'OS-DCF:diskConfig': parameter_types.disk_config,
+ 'accessIPv4': parameter_types.accessIPv4,
+ 'accessIPv6': parameter_types.accessIPv6,
},
'additionalProperties': False,
},
@@ -100,7 +104,9 @@ base_rebuild = {
'adminPass': parameter_types.admin_password,
'metadata': parameter_types.metadata,
'preserve_ephemeral': parameter_types.boolean,
- 'OS-DCF:diskConfig': parameter_types.disk_config
+ 'OS-DCF:diskConfig': parameter_types.disk_config,
+ 'accessIPv4': parameter_types.accessIPv4,
+ 'accessIPv6': parameter_types.accessIPv6,
},
'required': ['imageRef'],
'additionalProperties': False,
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index 564b29105d..3998209cab 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -62,8 +62,6 @@ class ServersController(wsgi.Controller):
EXTENSION_REBUILD_NAMESPACE = 'nova.api.v21.extensions.server.rebuild'
- EXTENSION_UPDATE_NAMESPACE = 'nova.api.v21.extensions.server.update'
-
_view_builder_class = views_servers.ViewBuilderV21
schema_server_create = schema_servers.base_create
@@ -172,17 +170,6 @@ class ServersController(wsgi.Controller):
if not list(self.rebuild_extension_manager):
LOG.debug("Did not find any server rebuild extensions")
- # Look for implementation of extension point of server update
- self.update_extension_manager = \
- stevedore.enabled.EnabledExtensionManager(
- namespace=self.EXTENSION_UPDATE_NAMESPACE,
- check_func=_check_load_extension('server_update'),
- invoke_on_load=True,
- invoke_kwds={"extension_info": self.extension_info},
- propagate_map_exceptions=True)
- if not list(self.update_extension_manager):
- LOG.debug("Did not find any server update extensions")
-
# Look for API schema of server create extension
self.create_schema_manager = \
stevedore.enabled.EnabledExtensionManager(
@@ -203,26 +190,6 @@ class ServersController(wsgi.Controller):
else:
LOG.debug("Did not find any server create schemas")
- # Look for API schema of server update extension
- self.update_schema_manager = \
- stevedore.enabled.EnabledExtensionManager(
- namespace=self.EXTENSION_UPDATE_NAMESPACE,
- check_func=_check_load_extension('get_server_update_schema'),
- invoke_on_load=True,
- invoke_kwds={"extension_info": self.extension_info},
- propagate_map_exceptions=True)
- if list(self.update_schema_manager):
- self.update_schema_manager.map(self._update_extension_schema,
- self.schema_server_update_v219,
- '2.19')
- self.update_schema_manager.map(self._update_extension_schema,
- self.schema_server_update, '2.1')
- self.update_schema_manager.map(self._update_extension_schema,
- self.schema_server_update_v20,
- '2.0')
- else:
- LOG.debug("Did not find any server update schemas")
-
# Look for API schema of server rebuild extension
self.rebuild_schema_manager = \
stevedore.enabled.EnabledExtensionManager(
@@ -736,11 +703,6 @@ class ServersController(wsgi.Controller):
handler.server_rebuild(rebuild_dict, rebuild_kwargs)
- def _update_extension_point(self, ext, update_dict, update_kwargs):
- handler = ext.obj
- LOG.debug("Running _update_extension_point for %s", ext.obj)
- handler.server_update(update_dict, update_kwargs)
-
def _create_extension_schema(self, ext, create_schema, version):
handler = ext.obj
LOG.debug("Running _create_extension_schema for %s", ext.obj)
@@ -754,13 +716,6 @@ class ServersController(wsgi.Controller):
else:
create_schema['properties']['server']['properties'].update(schema)
- def _update_extension_schema(self, ext, update_schema, version):
- handler = ext.obj
- LOG.debug("Running _update_extension_schema for %s", ext.obj)
-
- schema = handler.get_server_update_schema(version)
- update_schema['properties']['server']['properties'].update(schema)
-
def _rebuild_extension_schema(self, ext, rebuild_schema, version):
handler = ext.obj
LOG.debug("Running _rebuild_extension_schema for %s", ext.obj)
@@ -801,10 +756,6 @@ class ServersController(wsgi.Controller):
# This is allowed to be None (remove description)
update_dict['display_description'] = body['server']['description']
- if list(self.update_extension_manager):
- self.update_extension_manager.map(self._update_extension_point,
- body['server'], update_dict)
-
helpers.translate_attributes(body['server'], update_dict)
instance = self._get_server(ctxt, req, id, is_detail=True)
diff --git a/nova/api/openstack/compute/views/servers.py b/nova/api/openstack/compute/views/servers.py
index 9f806cec5c..1370c28464 100644
--- a/nova/api/openstack/compute/views/servers.py
+++ b/nova/api/openstack/compute/views/servers.py
@@ -284,6 +284,9 @@ class ViewBuilderV21(ViewBuilder):
def show(self, request, instance, extend_address=True):
"""Detailed view of a single instance."""
+ ip_v4 = instance.get('access_ip_v4')
+ ip_v6 = instance.get('access_ip_v6')
+
server = {
"server": {
"id": instance["uuid"],
@@ -307,6 +310,8 @@ class ViewBuilderV21(ViewBuilder):
"updated": utils.isotime(instance["updated_at"]),
"addresses": self._get_addresses(request, instance,
extend_address),
+ "accessIPv4": str(ip_v4) if ip_v4 is not None else '',
+ "accessIPv6": str(ip_v6) if ip_v6 is not None else '',
"links": self._get_links(request,
instance["uuid"],
self._collection_name),
diff --git a/nova/api/validation/parameter_types.py b/nova/api/validation/parameter_types.py
index 712de2f642..7fada76676 100644
--- a/nova/api/validation/parameter_types.py
+++ b/nova/api/validation/parameter_types.py
@@ -362,6 +362,16 @@ disk_config = {
'enum': ['AUTO', 'MANUAL']
}
+accessIPv4 = {
+ 'type': 'string',
+ 'format': 'ipv4',
+}
+
+accessIPv6 = {
+ 'type': 'string',
+ 'format': 'ipv6',
+}
+
flavor_param_positive = copy.deepcopy(volume_size)
diff --git a/nova/policies/__init__.py b/nova/policies/__init__.py
index 66f301ca6b..21d46cfe1d 100644
--- a/nova/policies/__init__.py
+++ b/nova/policies/__init__.py
@@ -13,7 +13,6 @@
import itertools
-from nova.policies import access_ips
from nova.policies import admin_actions
from nova.policies import admin_password
from nova.policies import agents
@@ -101,7 +100,6 @@ from nova.policies import volumes_attachments
def list_rules():
return itertools.chain(
- access_ips.list_rules(),
admin_actions.list_rules(),
admin_password.list_rules(),
agents.list_rules(),
diff --git a/nova/policies/access_ips.py b/nova/policies/access_ips.py
deleted file mode 100644
index 15b40f161c..0000000000
--- a/nova/policies/access_ips.py
+++ /dev/null
@@ -1,36 +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-access-ips'
-POLICY_ROOT = 'os_compute_api:os-access-ips:%s'
-
-
-access_ips_policies = [
- policy.RuleDefault(
- name=POLICY_ROOT % 'discoverable',
- check_str=base.RULE_ANY),
- policy.RuleDefault(
- name=BASE_POLICY_NAME,
- check_str=base.RULE_ADMIN_OR_OWNER),
-]
-
-
-def list_rules():
- return access_ips_policies
diff --git a/nova/tests/unit/api/openstack/compute/test_access_ips.py b/nova/tests/unit/api/openstack/compute/test_access_ips.py
index 169deb8cb6..6a0e4a0748 100644
--- a/nova/tests/unit/api/openstack/compute/test_access_ips.py
+++ b/nova/tests/unit/api/openstack/compute/test_access_ips.py
@@ -12,149 +12,22 @@
# License for the specific language governing permissions and limitations
# under the License.
-from nova.api.openstack.compute import access_ips
from nova.api.openstack.compute import extension_info
from nova.api.openstack.compute import servers as servers_v21
-from nova.api.openstack import wsgi
from nova import exception
from nova import test
from nova.tests.unit.api.openstack import fakes
from nova.tests.unit.image import fake
+v4_key = "accessIPv4"
+v6_key = "accessIPv6"
-class AccessIPsExtTestV21(test.NoDBTestCase):
- def setUp(self):
- super(AccessIPsExtTestV21, self).setUp()
- self.access_ips_ext = access_ips.AccessIPs(None)
-
- def _test(self, func):
- server_dict = {access_ips.AccessIPs.v4_key: '1.1.1.1',
- access_ips.AccessIPs.v6_key: 'fe80::'}
- create_kwargs = {}
- func(server_dict, create_kwargs)
- self.assertEqual(create_kwargs, {'access_ip_v4': '1.1.1.1',
- 'access_ip_v6': 'fe80::'})
-
- def _test_with_ipv4_only(self, func):
- server_dict = {access_ips.AccessIPs.v4_key: '1.1.1.1'}
- create_kwargs = {}
- func(server_dict, create_kwargs)
- self.assertEqual(create_kwargs, {'access_ip_v4': '1.1.1.1'})
-
- def _test_with_ipv6_only(self, func):
- server_dict = {access_ips.AccessIPs.v6_key: 'fe80::'}
- create_kwargs = {}
- func(server_dict, create_kwargs)
- self.assertEqual(create_kwargs, {'access_ip_v6': 'fe80::'})
-
- def _test_without_ipv4_and_ipv6(self, func):
- server_dict = {}
- create_kwargs = {}
- func(server_dict, create_kwargs)
- self.assertEqual(create_kwargs, {})
-
- def _test_with_ipv4_null(self, func):
- server_dict = {access_ips.AccessIPs.v4_key: None}
- create_kwargs = {}
- func(server_dict, create_kwargs)
- self.assertEqual(create_kwargs, {'access_ip_v4': None})
-
- def _test_with_ipv6_null(self, func):
- server_dict = {access_ips.AccessIPs.v6_key: None}
- create_kwargs = {}
- func(server_dict, create_kwargs)
- self.assertEqual(create_kwargs, {'access_ip_v6': None})
-
- def _test_with_ipv4_blank(self, func):
- server_dict = {access_ips.AccessIPs.v4_key: ''}
- create_kwargs = {}
- func(server_dict, create_kwargs)
- self.assertEqual(create_kwargs, {'access_ip_v4': None})
-
- def _test_with_ipv6_blank(self, func):
- server_dict = {access_ips.AccessIPs.v6_key: ''}
- create_kwargs = {}
- func(server_dict, create_kwargs)
- self.assertEqual(create_kwargs, {'access_ip_v6': None})
-
- def test_server_create(self):
- self._test(self.access_ips_ext.server_create)
-
- def test_server_create_with_ipv4_only(self):
- self._test_with_ipv4_only(self.access_ips_ext.server_create)
-
- def test_server_create_with_ipv6_only(self):
- self._test_with_ipv6_only(self.access_ips_ext.server_create)
-
- def test_server_create_without_ipv4_and_ipv6(self):
- self._test_without_ipv4_and_ipv6(self.access_ips_ext.server_create)
-
- def test_server_create_with_ipv4_null(self):
- self._test_with_ipv4_null(self.access_ips_ext.server_create)
-
- def test_server_create_with_ipv6_null(self):
- self._test_with_ipv6_null(self.access_ips_ext.server_create)
-
- def test_server_create_with_ipv4_blank(self):
- self._test_with_ipv4_blank(self.access_ips_ext.server_create)
-
- def test_server_create_with_ipv6_blank(self):
- self._test_with_ipv6_blank(self.access_ips_ext.server_create)
-
- def test_server_update(self):
- self._test(self.access_ips_ext.server_update)
-
- def test_server_update_with_ipv4_only(self):
- self._test_with_ipv4_only(self.access_ips_ext.server_update)
-
- def test_server_update_with_ipv6_only(self):
- self._test_with_ipv6_only(self.access_ips_ext.server_update)
-
- def test_server_update_without_ipv4_and_ipv6(self):
- self._test_without_ipv4_and_ipv6(self.access_ips_ext.server_update)
-
- def test_server_update_with_ipv4_null(self):
- self._test_with_ipv4_null(self.access_ips_ext.server_update)
-
- def test_server_update_with_ipv6_null(self):
- self._test_with_ipv6_null(self.access_ips_ext.server_update)
-
- def test_server_update_with_ipv4_blank(self):
- self._test_with_ipv4_blank(self.access_ips_ext.server_update)
- def test_server_update_with_ipv6_blank(self):
- self._test_with_ipv6_blank(self.access_ips_ext.server_update)
-
- def test_server_rebuild(self):
- self._test(self.access_ips_ext.server_rebuild)
-
- def test_server_rebuild_with_ipv4_only(self):
- self._test_with_ipv4_only(self.access_ips_ext.server_rebuild)
-
- def test_server_rebuild_with_ipv6_only(self):
- self._test_with_ipv6_only(self.access_ips_ext.server_rebuild)
-
- def test_server_rebuild_without_ipv4_and_ipv6(self):
- self._test_without_ipv4_and_ipv6(self.access_ips_ext.server_rebuild)
-
- def test_server_rebuild_with_ipv4_null(self):
- self._test_with_ipv4_null(self.access_ips_ext.server_rebuild)
-
- def test_server_rebuild_with_ipv6_null(self):
- self._test_with_ipv6_null(self.access_ips_ext.server_rebuild)
-
- def test_server_rebuild_with_ipv4_blank(self):
- self._test_with_ipv4_blank(self.access_ips_ext.server_rebuild)
-
- def test_server_rebuild_with_ipv6_blank(self):
- self._test_with_ipv6_blank(self.access_ips_ext.server_rebuild)
-
-
-class AccessIPsExtAPIValidationTestV21(test.TestCase):
+class AccessIPsAPIValidationTestV21(test.TestCase):
validation_error = exception.ValidationError
def setUp(self):
- super(AccessIPsExtAPIValidationTestV21, self).setUp()
+ super(AccessIPsAPIValidationTestV21, self).setUp()
def fake_save(context, **kwargs):
pass
@@ -176,11 +49,10 @@ class AccessIPsExtAPIValidationTestV21(test.TestCase):
self.controller = servers_v21.ServersController(
extension_info=ext_info)
- # Note(gmann): V2.1 has Access IP as separate extension. This class tests
- # calls controller directly so Access IPs will not be present in server
- # response. Those are being tested in AccessIPsExtTest class.
def _verify_update_access_ip(self, res_dict, params):
- pass
+ for key, value in params.items():
+ value = value or ''
+ self.assertEqual(res_dict['server'][key], value)
def _test_create(self, params):
body = {
@@ -214,173 +86,61 @@ class AccessIPsExtAPIValidationTestV21(test.TestCase):
self.controller._action_rebuild(self.req, fakes.FAKE_UUID, body=body)
def test_create_server_with_access_ipv4(self):
- params = {access_ips.AccessIPs.v4_key: '192.168.0.10'}
+ params = {v4_key: '192.168.0.10'}
self._test_create(params)
def test_create_server_with_access_ip_pass_disabled(self):
# test with admin passwords disabled See lp bug 921814
self.flags(enable_instance_password=False)
- params = {access_ips.AccessIPs.v4_key: '192.168.0.10',
- access_ips.AccessIPs.v6_key: '2001:db8::9abc'}
+ params = {v4_key: '192.168.0.10',
+ v6_key: '2001:db8::9abc'}
res = self._test_create(params)
server = res['server']
self.assertNotIn("admin_password", server)
def test_create_server_with_invalid_access_ipv4(self):
- params = {access_ips.AccessIPs.v4_key: '1.1.1.1.1.1'}
+ params = {v4_key: '1.1.1.1.1.1'}
self.assertRaises(self.validation_error, self._test_create, params)
def test_create_server_with_access_ipv6(self):
- params = {access_ips.AccessIPs.v6_key: '2001:db8::9abc'}
+ params = {v6_key: '2001:db8::9abc'}
self._test_create(params)
def test_create_server_with_invalid_access_ipv6(self):
- params = {access_ips.AccessIPs.v6_key: 'fe80:::::::'}
+ params = {v6_key: 'fe80:::::::'}
self.assertRaises(self.validation_error, self._test_create, params)
def test_update_server_with_access_ipv4(self):
- params = {access_ips.AccessIPs.v4_key: '192.168.0.10'}
+ params = {v4_key: '192.168.0.10'}
self._test_update(params)
def test_update_server_with_invalid_access_ipv4(self):
- params = {access_ips.AccessIPs.v4_key: '1.1.1.1.1.1'}
+ params = {v4_key: '1.1.1.1.1.1'}
self.assertRaises(self.validation_error, self._test_update, params)
def test_update_server_with_access_ipv6(self):
- params = {access_ips.AccessIPs.v6_key: '2001:db8::9abc'}
+ params = {v6_key: '2001:db8::9abc'}
self._test_update(params)
def test_update_server_with_invalid_access_ipv6(self):
- params = {access_ips.AccessIPs.v6_key: 'fe80:::::::'}
+ params = {v6_key: 'fe80:::::::'}
self.assertRaises(self.validation_error, self._test_update, params)
def test_rebuild_server_with_access_ipv4(self):
- params = {access_ips.AccessIPs.v4_key: '192.168.0.10'}
+ params = {v4_key: '192.168.0.10'}
self._test_rebuild(params)
def test_rebuild_server_with_invalid_access_ipv4(self):
- params = {access_ips.AccessIPs.v4_key: '1.1.1.1.1.1'}
+ params = {v4_key: '1.1.1.1.1.1'}
self.assertRaises(self.validation_error, self._test_rebuild,
params)
def test_rebuild_server_with_access_ipv6(self):
- params = {access_ips.AccessIPs.v6_key: '2001:db8::9abc'}
+ params = {v6_key: '2001:db8::9abc'}
self._test_rebuild(params)
def test_rebuild_server_with_invalid_access_ipv6(self):
- params = {access_ips.AccessIPs.v6_key: 'fe80:::::::'}
+ params = {v6_key: 'fe80:::::::'}
self.assertRaises(self.validation_error, self._test_rebuild,
params)
-
-
-class AccessIPsControllerTestV21(test.NoDBTestCase):
- def setUp(self):
- super(AccessIPsControllerTestV21, self).setUp()
- self.controller = access_ips.AccessIPsController()
-
- def _test_with_access_ips(self, func, kwargs={'id': 'fake'}):
- req = wsgi.Request({'nova.context':
- fakes.FakeRequestContext('fake_user', 'fake',
- is_admin=True)})
- instance = {'uuid': 'fake',
- 'access_ip_v4': '1.1.1.1',
- 'access_ip_v6': 'fe80::'}
- req.cache_db_instance(instance)
- resp_obj = wsgi.ResponseObject(
- {"server": {'id': 'fake'}})
- func(req, resp_obj, **kwargs)
- self.assertEqual(resp_obj.obj['server'][access_ips.AccessIPs.v4_key],
- '1.1.1.1')
- self.assertEqual(resp_obj.obj['server'][access_ips.AccessIPs.v6_key],
- 'fe80::')
-
- def _test_without_access_ips(self, func, kwargs={'id': 'fake'}):
- req = wsgi.Request({'nova.context':
- fakes.FakeRequestContext('fake_user', 'fake',
- is_admin=True)})
- instance = {'uuid': 'fake',
- 'access_ip_v4': None,
- 'access_ip_v6': None}
- req.cache_db_instance(instance)
- resp_obj = wsgi.ResponseObject(
- {"server": {'id': 'fake'}})
- func(req, resp_obj, **kwargs)
- self.assertEqual(resp_obj.obj['server'][access_ips.AccessIPs.v4_key],
- '')
- self.assertEqual(resp_obj.obj['server'][access_ips.AccessIPs.v6_key],
- '')
-
- def test_show(self):
- self._test_with_access_ips(self.controller.show)
-
- def test_show_without_access_ips(self):
- self._test_without_access_ips(self.controller.show)
-
- def test_detail(self):
- req = wsgi.Request({'nova.context':
- fakes.FakeRequestContext('fake_user', 'fake',
- is_admin=True)})
- instance1 = {'uuid': 'fake1',
- 'access_ip_v4': '1.1.1.1',
- 'access_ip_v6': 'fe80::'}
- instance2 = {'uuid': 'fake2',
- 'access_ip_v4': '1.1.1.2',
- 'access_ip_v6': 'fe81::'}
- req.cache_db_instance(instance1)
- req.cache_db_instance(instance2)
- resp_obj = wsgi.ResponseObject(
- {"servers": [{'id': 'fake1'}, {'id': 'fake2'}]})
- self.controller.detail(req, resp_obj)
- self.assertEqual(
- resp_obj.obj['servers'][0][access_ips.AccessIPs.v4_key],
- '1.1.1.1')
- self.assertEqual(
- resp_obj.obj['servers'][0][access_ips.AccessIPs.v6_key],
- 'fe80::')
- self.assertEqual(
- resp_obj.obj['servers'][1][access_ips.AccessIPs.v4_key],
- '1.1.1.2')
- self.assertEqual(
- resp_obj.obj['servers'][1][access_ips.AccessIPs.v6_key],
- 'fe81::')
-
- def test_detail_without_access_ips(self):
- req = wsgi.Request({'nova.context':
- fakes.FakeRequestContext('fake_user', 'fake',
- is_admin=True)})
- instance1 = {'uuid': 'fake1',
- 'access_ip_v4': None,
- 'access_ip_v6': None}
- instance2 = {'uuid': 'fake2',
- 'access_ip_v4': None,
- 'access_ip_v6': None}
- req.cache_db_instance(instance1)
- req.cache_db_instance(instance2)
- resp_obj = wsgi.ResponseObject(
- {"servers": [{'id': 'fake1'}, {'id': 'fake2'}]})
- self.controller.detail(req, resp_obj)
- self.assertEqual(
- resp_obj.obj['servers'][0][access_ips.AccessIPs.v4_key], '')
- self.assertEqual(
- resp_obj.obj['servers'][0][access_ips.AccessIPs.v6_key], '')
- self.assertEqual(
- resp_obj.obj['servers'][1][access_ips.AccessIPs.v4_key], '')
- self.assertEqual(
- resp_obj.obj['servers'][1][access_ips.AccessIPs.v6_key], '')
-
- def test_update(self):
- self._test_with_access_ips(self.controller.update, {'id': 'fake',
- 'body': {}})
-
- def test_update_without_access_ips(self):
- self._test_without_access_ips(self.controller.update, {'id': 'fake',
- 'body': {}})
-
- def test_rebuild(self):
- self._test_with_access_ips(self.controller.rebuild, {'id': 'fake',
- 'body': {}})
-
- def test_rebuild_without_access_ips(self):
- self._test_without_access_ips(self.controller.rebuild, {'id': 'fake',
- 'body': {}})
diff --git a/nova/tests/unit/api/openstack/compute/test_serversV21.py b/nova/tests/unit/api/openstack/compute/test_serversV21.py
index 2bb49274dd..dcf5ae5171 100644
--- a/nova/tests/unit/api/openstack/compute/test_serversV21.py
+++ b/nova/tests/unit/api/openstack/compute/test_serversV21.py
@@ -393,6 +393,8 @@ class ServersControllerTest(ControllerTest):
},
],
"OS-DCF:diskConfig": "MANUAL",
+ "accessIPv4": '',
+ "accessIPv6": '',
}
}
@@ -3697,6 +3699,8 @@ class ServersViewBuilderTest(test.TestCase):
},
],
"OS-DCF:diskConfig": "MANUAL",
+ "accessIPv4": '',
+ "accessIPv6": '',
}
}
@@ -3774,6 +3778,8 @@ class ServersViewBuilderTest(test.TestCase):
"details": "Stock details for test",
},
"OS-DCF:diskConfig": "MANUAL",
+ "accessIPv4": '',
+ "accessIPv6": '',
}
}
@@ -3927,6 +3933,8 @@ class ServersViewBuilderTest(test.TestCase):
},
],
"OS-DCF:diskConfig": "MANUAL",
+ "accessIPv4": '',
+ "accessIPv6": '',
}
}
@@ -4001,6 +4009,8 @@ class ServersViewBuilderTest(test.TestCase):
},
],
"OS-DCF:diskConfig": "MANUAL",
+ "accessIPv4": '',
+ "accessIPv6": '',
}
}
diff --git a/nova/tests/unit/fake_policy.py b/nova/tests/unit/fake_policy.py
index add9270c48..7e7f8bb9ba 100644
--- a/nova/tests/unit/fake_policy.py
+++ b/nova/tests/unit/fake_policy.py
@@ -26,7 +26,6 @@ policy_data = """
"os_compute_api:servers:migrations:force_complete": "",
"os_compute_api:servers:migrations:index": "rule:admin_api",
"os_compute_api:servers:migrations:show": "rule:admin_api",
- "os_compute_api:os-access-ips": "",
"os_compute_api:os-admin-actions:inject_network_info": "",
"os_compute_api:os-admin-actions:reset_network": "",
"os_compute_api:os-admin-actions:reset_state": "",
diff --git a/nova/tests/unit/test_policy.py b/nova/tests/unit/test_policy.py
index 1b04d7b600..841e4f40c8 100644
--- a/nova/tests/unit/test_policy.py
+++ b/nova/tests/unit/test_policy.py
@@ -364,7 +364,6 @@ class RealRolePolicyTestCase(test.NoDBTestCase):
"os_compute_api:servers:show",
"os_compute_api:servers:update",
"os_compute_api:servers:create_image:allow_volume_backed",
-"os_compute_api:os-access-ips",
"os_compute_api:os-admin-password",
"os_compute_api:os-attach-interfaces",
"os_compute_api:os-certificates:create",
@@ -417,7 +416,6 @@ class RealRolePolicyTestCase(test.NoDBTestCase):
self.allow_all_rules = (
"os_compute_api:os-quota-sets:defaults",
"os_compute_api:extensions:discoverable",
-"os_compute_api:os-access-ips:discoverable",
"os_compute_api:os-admin-actions:discoverable",
"os_compute_api:os-admin-password:discoverable",
"os_compute_api:os-aggregates:discoverable",
diff --git a/releasenotes/notes/extensions_remove-37e9d4092981abbe.yaml b/releasenotes/notes/extensions_remove-37e9d4092981abbe.yaml
index 12a8637d1f..7a8ac5a5d3 100644
--- a/releasenotes/notes/extensions_remove-37e9d4092981abbe.yaml
+++ b/releasenotes/notes/extensions_remove-37e9d4092981abbe.yaml
@@ -8,9 +8,15 @@ upgrade:
shown / accepted.
* os_compute_api:os-disk-config - show / accept
- ``OS-DCF:diskConfig`` parameter
+ ``OS-DCF:diskConfig`` parameter on servers
+
+ * os-access-ips - show / accept ``accessIPv4`` and ``accessIPv6``
+ parameters on servers
The following entry points have been removed
* nova.api.v21.extensions.server.resize - allowed accepting
- additional parameters on resize requests.
+ additional parameters on server resize requests.
+
+ * nova.api.v21.extensions.server.update - allowed accepting
+ additional parameters on server update requests.
diff --git a/setup.cfg b/setup.cfg
index 73bc8debb3..07454ec8da 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -65,7 +65,6 @@ console_scripts =
nova-xvpvncproxy = nova.cmd.xvpvncproxy:main
nova.api.v21.extensions =
- access_ips = nova.api.openstack.compute.access_ips:AccessIPs
admin_actions = nova.api.openstack.compute.admin_actions:AdminActions
admin_password = nova.api.openstack.compute.admin_password:AdminPassword
agents = nova.api.openstack.compute.agents:Agents
@@ -153,7 +152,6 @@ nova.api.v21.extensions =
volumes = nova.api.openstack.compute.volumes:Volumes
nova.api.v21.extensions.server.create =
- access_ips = nova.api.openstack.compute.access_ips:AccessIPs
availability_zone = nova.api.openstack.compute.availability_zone:AvailabilityZone
block_device_mapping = nova.api.openstack.compute.block_device_mapping:BlockDeviceMapping
block_device_mapping_v1 = nova.api.openstack.compute.block_device_mapping_v1:BlockDeviceMappingV1
@@ -166,13 +164,9 @@ nova.api.v21.extensions.server.create =
user_data = nova.api.openstack.compute.user_data:UserData
nova.api.v21.extensions.server.rebuild =
- access_ips = nova.api.openstack.compute.access_ips:AccessIPs
personality = nova.api.openstack.compute.personality:Personality
preserve_ephemeral_rebuild = nova.api.openstack.compute.preserve_ephemeral_rebuild:PreserveEphemeralRebuild
-nova.api.v21.extensions.server.update =
- access_ips = nova.api.openstack.compute.access_ips:AccessIPs
-
nova.api.v21.test_extensions =
basic = nova.tests.unit.api.openstack.compute.basic:Basic
microversions = nova.tests.unit.api.openstack.compute.microversions:Microversions