Remove deprecated [neutron]/url option
The url option was deprecated in Queens: I41724a612a5f3eabd504f3eaa9d2f9d141ca3f69 The same functionality is available in the endpoint_override option so tests and docs are updated to use that where they were using url before. Note that because the logic in the get_client method changed, some small changes were made to the test_withtoken and test_withtoken_context_is_admin unit tests to differentiate from when there is a context with a token that is not admin and an admin context that does not have a token which was otherwise determined by asserting the default region name. Change-Id: I6c068a84c4c0bd88f088f9328d7897bfc1f843f1
This commit is contained in:

committed by
Eric Fried

parent
7bf7597601
commit
8f53a051cc
@@ -370,7 +370,7 @@ on Hyper-V. Below is a sample ``nova.conf`` for Windows:
|
|||||||
[glance]
|
[glance]
|
||||||
api_servers = http://IP_ADDRESS:9292
|
api_servers = http://IP_ADDRESS:9292
|
||||||
[neutron]
|
[neutron]
|
||||||
url = http://IP_ADDRESS:9696
|
endpoint_override = http://IP_ADDRESS:9696
|
||||||
auth_strategy = keystone
|
auth_strategy = keystone
|
||||||
project_name = service
|
project_name = service
|
||||||
username = neutron
|
username = neutron
|
||||||
|
@@ -30,25 +30,6 @@ Configuration options for neutron (network connectivity as a service).
|
|||||||
""")
|
""")
|
||||||
|
|
||||||
neutron_opts = [
|
neutron_opts = [
|
||||||
cfg.URIOpt('url',
|
|
||||||
sample_default='http://127.0.0.1:9696',
|
|
||||||
deprecated_for_removal=True,
|
|
||||||
deprecated_since='17.0.0',
|
|
||||||
deprecated_reason='Endpoint lookup uses the service catalog via '
|
|
||||||
'common keystoneauth1 Adapter configuration '
|
|
||||||
'options. In the current release, "url" will '
|
|
||||||
'override this behavior, but will be ignored and/or '
|
|
||||||
'removed in a future release. To achieve the same '
|
|
||||||
'result, use the endpoint_override option instead.',
|
|
||||||
help="""
|
|
||||||
This option specifies the URL for connecting to Neutron.
|
|
||||||
|
|
||||||
Possible values:
|
|
||||||
|
|
||||||
* Any valid URL that points to the Neutron API service is appropriate here.
|
|
||||||
This typically matches the URL returned for the 'network' service type
|
|
||||||
from the Keystone service catalog.
|
|
||||||
"""),
|
|
||||||
cfg.StrOpt('ovs_bridge',
|
cfg.StrOpt('ovs_bridge',
|
||||||
default='br-int',
|
default='br-int',
|
||||||
help="""
|
help="""
|
||||||
@@ -147,10 +128,6 @@ ALL_OPTS = (neutron_opts + metadata_proxy_opts)
|
|||||||
def register_opts(conf):
|
def register_opts(conf):
|
||||||
conf.register_group(neutron_group)
|
conf.register_group(neutron_group)
|
||||||
conf.register_opts(ALL_OPTS, group=neutron_group)
|
conf.register_opts(ALL_OPTS, group=neutron_group)
|
||||||
# NOTE(efried): We don't pass `url` as a deprecated opt because that would
|
|
||||||
# make CONF.neutron.url indistinguishable from
|
|
||||||
# CONF.neutron.endpoint_override in the code, and we need to be able to use
|
|
||||||
# the former to trigger the legacy behavior.
|
|
||||||
confutils.register_ksa_opts(conf, neutron_group, DEFAULT_SERVICE_TYPE)
|
confutils.register_ksa_opts(conf, neutron_group, DEFAULT_SERVICE_TYPE)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -174,28 +174,19 @@ def get_client(context, admin=False):
|
|||||||
auth=auth_plugin,
|
auth=auth_plugin,
|
||||||
global_request_id=context.global_id)
|
global_request_id=context.global_id)
|
||||||
|
|
||||||
if CONF.neutron.url:
|
# NOTE(efried): We build an adapter
|
||||||
# TODO(efried): Remove in Rocky
|
# to pull conf options
|
||||||
client_args = dict(client_args,
|
# to pass to neutronclient
|
||||||
endpoint_override=CONF.neutron.url,
|
# which uses them to build an Adapter.
|
||||||
# NOTE(efried): The legacy behavior was to default
|
# This should be unwound at some point.
|
||||||
# region_name in the conf.
|
adap = utils.get_ksa_adapter(
|
||||||
region_name=CONF.neutron.region_name or 'RegionOne')
|
'network', ksa_auth=auth_plugin, ksa_session=session)
|
||||||
else:
|
client_args = dict(client_args,
|
||||||
# The new way
|
service_type=adap.service_type,
|
||||||
# NOTE(efried): We build an adapter
|
service_name=adap.service_name,
|
||||||
# to pull conf options
|
interface=adap.interface,
|
||||||
# to pass to neutronclient
|
region_name=adap.region_name,
|
||||||
# which uses them to build an Adapter.
|
endpoint_override=adap.endpoint_override)
|
||||||
# This should be unwound at some point.
|
|
||||||
adap = utils.get_ksa_adapter(
|
|
||||||
'network', ksa_auth=auth_plugin, ksa_session=session)
|
|
||||||
client_args = dict(client_args,
|
|
||||||
service_type=adap.service_type,
|
|
||||||
service_name=adap.service_name,
|
|
||||||
interface=adap.interface,
|
|
||||||
region_name=adap.region_name,
|
|
||||||
endpoint_override=adap.endpoint_override)
|
|
||||||
|
|
||||||
return ClientWrapper(clientv20.Client(**client_args),
|
return ClientWrapper(clientv20.Client(**client_args),
|
||||||
admin=admin or context.is_admin)
|
admin=admin or context.is_admin)
|
||||||
|
@@ -162,16 +162,17 @@ class TestNeutronClient(test.NoDBTestCase):
|
|||||||
self.assertEqual('eo', cl.httpclient.endpoint_override)
|
self.assertEqual('eo', cl.httpclient.endpoint_override)
|
||||||
|
|
||||||
def test_withtoken(self):
|
def test_withtoken(self):
|
||||||
self.flags(url='http://anyhost/', group='neutron')
|
self.flags(endpoint_override='http://anyhost/', group='neutron')
|
||||||
self.flags(timeout=30, group='neutron')
|
self.flags(timeout=30, group='neutron')
|
||||||
|
# Will use the token rather than load auth from config.
|
||||||
my_context = context.RequestContext('userid',
|
my_context = context.RequestContext('userid',
|
||||||
uuids.my_tenant,
|
uuids.my_tenant,
|
||||||
auth_token='token')
|
auth_token='token')
|
||||||
cl = neutronapi.get_client(my_context)
|
cl = neutronapi.get_client(my_context)
|
||||||
|
|
||||||
self.assertEqual(CONF.neutron.url, cl.httpclient.endpoint_override)
|
self.assertEqual(CONF.neutron.endpoint_override,
|
||||||
# Specifying 'url' defaults 'region_name'
|
cl.httpclient.endpoint_override)
|
||||||
self.assertEqual('RegionOne', cl.httpclient.region_name)
|
self.assertEqual(CONF.neutron.region_name, cl.httpclient.region_name)
|
||||||
self.assertEqual(my_context.auth_token, cl.httpclient.auth.auth_token)
|
self.assertEqual(my_context.auth_token, cl.httpclient.auth.auth_token)
|
||||||
self.assertEqual(CONF.neutron.timeout, cl.httpclient.session.timeout)
|
self.assertEqual(CONF.neutron.timeout, cl.httpclient.session.timeout)
|
||||||
|
|
||||||
@@ -228,21 +229,23 @@ class TestNeutronClient(test.NoDBTestCase):
|
|||||||
self.assertIsInstance(exc.format_message(), six.text_type)
|
self.assertIsInstance(exc.format_message(), six.text_type)
|
||||||
|
|
||||||
def test_withtoken_context_is_admin(self):
|
def test_withtoken_context_is_admin(self):
|
||||||
self.flags(url='http://anyhost/', group='neutron')
|
self.flags(endpoint_override='http://anyhost/', group='neutron')
|
||||||
self.flags(timeout=30, group='neutron')
|
self.flags(timeout=30, group='neutron')
|
||||||
|
# No auth_token set but is_admin will load auth from config.
|
||||||
my_context = context.RequestContext('userid',
|
my_context = context.RequestContext('userid',
|
||||||
uuids.my_tenant,
|
uuids.my_tenant,
|
||||||
auth_token='token',
|
|
||||||
is_admin=True)
|
is_admin=True)
|
||||||
cl = neutronapi.get_client(my_context)
|
with mock.patch.object(neutronapi, '_load_auth_plugin') as mock_auth:
|
||||||
|
cl = neutronapi.get_client(my_context)
|
||||||
|
|
||||||
self.assertEqual(CONF.neutron.url, cl.httpclient.endpoint_override)
|
self.assertEqual(CONF.neutron.endpoint_override,
|
||||||
self.assertEqual(my_context.auth_token,
|
cl.httpclient.endpoint_override)
|
||||||
|
self.assertEqual(mock_auth.return_value.auth_token,
|
||||||
cl.httpclient.auth.auth_token)
|
cl.httpclient.auth.auth_token)
|
||||||
self.assertEqual(CONF.neutron.timeout, cl.httpclient.session.timeout)
|
self.assertEqual(CONF.neutron.timeout, cl.httpclient.session.timeout)
|
||||||
|
|
||||||
def test_withouttoken_keystone_connection_error(self):
|
def test_withouttoken_keystone_connection_error(self):
|
||||||
self.flags(url='http://anyhost/', group='neutron')
|
self.flags(endpoint_override='http://anyhost/', group='neutron')
|
||||||
my_context = context.RequestContext('userid', uuids.my_tenant)
|
my_context = context.RequestContext('userid', uuids.my_tenant)
|
||||||
self.assertRaises(NEUTRON_CLIENT_EXCEPTION,
|
self.assertRaises(NEUTRON_CLIENT_EXCEPTION,
|
||||||
neutronapi.get_client,
|
neutronapi.get_client,
|
||||||
@@ -251,7 +254,7 @@ class TestNeutronClient(test.NoDBTestCase):
|
|||||||
@mock.patch('nova.network.neutronv2.api._ADMIN_AUTH')
|
@mock.patch('nova.network.neutronv2.api._ADMIN_AUTH')
|
||||||
@mock.patch.object(client.Client, "list_networks", new=mock.Mock())
|
@mock.patch.object(client.Client, "list_networks", new=mock.Mock())
|
||||||
def test_reuse_admin_token(self, m):
|
def test_reuse_admin_token(self, m):
|
||||||
self.flags(url='http://anyhost/', group='neutron')
|
self.flags(endpoint_override='http://anyhost/', group='neutron')
|
||||||
my_context = context.RequestContext('userid', uuids.my_tenant,
|
my_context = context.RequestContext('userid', uuids.my_tenant,
|
||||||
auth_token='token')
|
auth_token='token')
|
||||||
|
|
||||||
@@ -6832,7 +6835,7 @@ class TestNeutronClientForAdminScenarios(test.NoDBTestCase):
|
|||||||
token_resp = V2Token(token_id=token_value)
|
token_resp = V2Token(token_id=token_value)
|
||||||
req_mock.post(auth_url + '/tokens', json=token_resp)
|
req_mock.post(auth_url + '/tokens', json=token_resp)
|
||||||
|
|
||||||
self.flags(url='http://anyhost/', group='neutron')
|
self.flags(endpoint_override='http://anyhost/', group='neutron')
|
||||||
self.flags(auth_type='v2password', group='neutron')
|
self.flags(auth_type='v2password', group='neutron')
|
||||||
self.flags(auth_url=auth_url, group='neutron')
|
self.flags(auth_url=auth_url, group='neutron')
|
||||||
self.flags(timeout=30, group='neutron')
|
self.flags(timeout=30, group='neutron')
|
||||||
@@ -6885,7 +6888,7 @@ class TestNeutronClientForAdminScenarios(test.NoDBTestCase):
|
|||||||
token_value,
|
token_value,
|
||||||
context_client.httpclient.auth.get_token(neutronapi._SESSION))
|
context_client.httpclient.auth.get_token(neutronapi._SESSION))
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
CONF.neutron.url,
|
CONF.neutron.endpoint_override,
|
||||||
context_client.httpclient.get_endpoint())
|
context_client.httpclient.get_endpoint())
|
||||||
|
|
||||||
def test_get_client_for_admin(self):
|
def test_get_client_for_admin(self):
|
||||||
|
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
The ``[neutron]/url`` configuration option, which was deprecated in the
|
||||||
|
17.0.0 Queens release, has now been removed. The same functionality is
|
||||||
|
available via the ``[neutron]/endpoint_override`` option.
|
Reference in New Issue
Block a user