Remove deprecated tenant network APIs
These were deprecated in Newton:
aaebeb05a0
Since this is the last of the deprecated contrib extensions,
we can also deprecate the 'only_contrib' parameter from the
novaclient.client.discover_extensions method.
Change-Id: Ie2e3fdc4e044f6eb304724d16a7d0f1f7ba705fd
This commit is contained in:
parent
dee51a0163
commit
ac7c96690f
|
@ -171,23 +171,20 @@ def _construct_http_client(api_version=None,
|
|||
**kwargs)
|
||||
|
||||
|
||||
def discover_extensions(version, only_contrib=False):
|
||||
"""Returns the list of extensions, which can be discovered by python path,
|
||||
contrib path and by entry-point 'novaclient.extension'.
|
||||
|
||||
:param version: api version
|
||||
:type version: str or novaclient.api_versions.APIVersion
|
||||
:param only_contrib: search only in contrib directory or not
|
||||
:type only_contrib: bool
|
||||
def discover_extensions(*args, **kwargs):
|
||||
"""Returns the list of extensions, which can be discovered by python path
|
||||
and by entry-point 'novaclient.extension'.
|
||||
"""
|
||||
if not isinstance(version, api_versions.APIVersion):
|
||||
version = api_versions.get_api_version(version)
|
||||
if only_contrib:
|
||||
chain = _discover_via_contrib_path(version)
|
||||
else:
|
||||
chain = itertools.chain(_discover_via_python_path(),
|
||||
_discover_via_contrib_path(version),
|
||||
_discover_via_entry_points())
|
||||
# TODO(mriedem): Remove support for 'only_contrib' in Queens.
|
||||
if 'only_contrib' in kwargs and kwargs['only_contrib']:
|
||||
warnings.warn(_LW('Discovering extensions only by contrib path is no '
|
||||
'longer supported since all contrib extensions '
|
||||
'have either been made required or removed. The '
|
||||
'only_contrib argument is deprecated and will be '
|
||||
'removed in a future release.'))
|
||||
return []
|
||||
chain = itertools.chain(_discover_via_python_path(),
|
||||
_discover_via_entry_points())
|
||||
return [ext.Extension(name, module) for name, module in chain]
|
||||
|
||||
|
||||
|
@ -204,16 +201,6 @@ def _discover_via_python_path():
|
|||
yield name, module
|
||||
|
||||
|
||||
def _discover_via_contrib_path(version):
|
||||
if version.ver_major == 2:
|
||||
modules = {"tenant_networks": "novaclient.v2.contrib.tenant_networks"}
|
||||
|
||||
for name, module_name in modules.items():
|
||||
module_loader = pkgutil.get_loader(module_name)
|
||||
module = module_loader.load_module(module_name)
|
||||
yield name, module
|
||||
|
||||
|
||||
def _discover_via_entry_points():
|
||||
for ep in pkg_resources.iter_entry_points('novaclient.extension'):
|
||||
name = ep.name
|
||||
|
|
|
@ -78,12 +78,10 @@ class SessionClientTest(utils.TestCase):
|
|||
class ClientsUtilsTest(utils.TestCase):
|
||||
|
||||
@mock.patch("novaclient.client._discover_via_entry_points")
|
||||
@mock.patch("novaclient.client._discover_via_contrib_path")
|
||||
@mock.patch("novaclient.client._discover_via_python_path")
|
||||
@mock.patch("novaclient.extension.Extension")
|
||||
def test_discover_extensions_all(self, mock_extension,
|
||||
mock_discover_via_python_path,
|
||||
mock_discover_via_contrib_path,
|
||||
mock_discover_via_entry_points):
|
||||
def make_gen(start, end):
|
||||
def f(*args, **kwargs):
|
||||
|
@ -92,36 +90,34 @@ class ClientsUtilsTest(utils.TestCase):
|
|||
return f
|
||||
|
||||
mock_discover_via_python_path.side_effect = make_gen(0, 3)
|
||||
mock_discover_via_contrib_path.side_effect = make_gen(3, 5)
|
||||
mock_discover_via_entry_points.side_effect = make_gen(5, 6)
|
||||
mock_discover_via_entry_points.side_effect = make_gen(3, 4)
|
||||
|
||||
version = novaclient.api_versions.APIVersion("2.0")
|
||||
|
||||
result = novaclient.client.discover_extensions(version)
|
||||
|
||||
self.assertEqual([mock.call("name-%s" % i, i) for i in range(0, 6)],
|
||||
self.assertEqual([mock.call("name-%s" % i, i) for i in range(0, 4)],
|
||||
mock_extension.call_args_list)
|
||||
mock_discover_via_python_path.assert_called_once_with()
|
||||
mock_discover_via_contrib_path.assert_called_once_with(version)
|
||||
mock_discover_via_entry_points.assert_called_once_with()
|
||||
self.assertEqual([mock_extension()] * 6, result)
|
||||
self.assertEqual([mock_extension()] * 4, result)
|
||||
|
||||
@mock.patch('novaclient.client.warnings')
|
||||
@mock.patch("novaclient.client._discover_via_entry_points")
|
||||
@mock.patch("novaclient.client._discover_via_contrib_path")
|
||||
@mock.patch("novaclient.client._discover_via_python_path")
|
||||
@mock.patch("novaclient.extension.Extension")
|
||||
def test_discover_extensions_only_contrib(
|
||||
self, mock_extension, mock_discover_via_python_path,
|
||||
mock_discover_via_contrib_path, mock_discover_via_entry_points):
|
||||
mock_discover_via_contrib_path.return_value = [("name", "module")]
|
||||
mock_discover_via_entry_points, mock_warnings):
|
||||
|
||||
version = novaclient.api_versions.APIVersion("2.0")
|
||||
|
||||
novaclient.client.discover_extensions(version, only_contrib=True)
|
||||
mock_discover_via_contrib_path.assert_called_once_with(version)
|
||||
self.assertEqual([], novaclient.client.discover_extensions(
|
||||
version, only_contrib=True))
|
||||
self.assertFalse(mock_discover_via_python_path.called)
|
||||
self.assertFalse(mock_discover_via_entry_points.called)
|
||||
mock_extension.assert_called_once_with("name", "module")
|
||||
self.assertFalse(mock_extension.called)
|
||||
self.assertTrue(mock_warnings.warn.called)
|
||||
|
||||
@mock.patch("novaclient.client.warnings")
|
||||
def test__check_arguments(self, mock_warnings):
|
||||
|
|
|
@ -49,25 +49,19 @@ class DiscoverTest(utils.TestCase):
|
|||
def mock_discover_via_python_path():
|
||||
yield 'foo', imp.new_module('foo')
|
||||
|
||||
def mock_discover_via_contrib_path(version):
|
||||
yield 'bar', imp.new_module('bar')
|
||||
|
||||
def mock_discover_via_entry_points():
|
||||
yield 'baz', imp.new_module('baz')
|
||||
|
||||
@mock.patch.object(client,
|
||||
'_discover_via_python_path',
|
||||
mock_discover_via_python_path)
|
||||
@mock.patch.object(client,
|
||||
'_discover_via_contrib_path',
|
||||
mock_discover_via_contrib_path)
|
||||
@mock.patch.object(client,
|
||||
'_discover_via_entry_points',
|
||||
mock_discover_via_entry_points)
|
||||
def test():
|
||||
extensions = client.discover_extensions('1.1')
|
||||
self.assertEqual(3, len(extensions))
|
||||
names = sorted(['foo', 'bar', 'baz'])
|
||||
self.assertEqual(2, len(extensions))
|
||||
names = sorted(['foo', 'baz'])
|
||||
sorted_extensions = sorted(extensions, key=lambda ext: ext.name)
|
||||
for i in range(len(names)):
|
||||
ext = sorted_extensions[i]
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
# Copyright 2012 OpenStack Foundation
|
||||
# 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 novaclient import api_versions
|
||||
from novaclient import extension
|
||||
from novaclient.tests.unit import utils
|
||||
from novaclient.tests.unit.v2 import fakes
|
||||
from novaclient.v2.contrib import tenant_networks
|
||||
|
||||
|
||||
class TenantNetworkExtensionTests(utils.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TenantNetworkExtensionTests, self).setUp()
|
||||
extensions = [
|
||||
extension.Extension(tenant_networks.__name__.split(".")[-1],
|
||||
tenant_networks),
|
||||
]
|
||||
self.cs = fakes.FakeClient(api_versions.APIVersion("2.0"),
|
||||
extensions=extensions)
|
||||
|
||||
def test_list_tenant_networks(self):
|
||||
nets = self.cs.tenant_networks.list()
|
||||
self.assert_request_id(nets, fakes.FAKE_REQUEST_ID_LIST)
|
||||
self.cs.assert_called('GET', '/os-tenant-networks')
|
||||
self.assertGreater(len(nets), 0)
|
||||
|
||||
def test_get_tenant_network(self):
|
||||
net = self.cs.tenant_networks.get(1)
|
||||
self.assert_request_id(net, fakes.FAKE_REQUEST_ID_LIST)
|
||||
self.cs.assert_called('GET', '/os-tenant-networks/1')
|
||||
|
||||
def test_create_tenant_networks(self):
|
||||
net = self.cs.tenant_networks.create(label="net",
|
||||
cidr="10.0.0.0/24")
|
||||
self.assert_request_id(net, fakes.FAKE_REQUEST_ID_LIST)
|
||||
self.cs.assert_called('POST', '/os-tenant-networks')
|
||||
|
||||
def test_delete_tenant_networks(self):
|
||||
ret = self.cs.tenant_networks.delete(1)
|
||||
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
||||
self.cs.assert_called('DELETE', '/os-tenant-networks/1')
|
|
@ -2329,27 +2329,6 @@ class FakeSessionClient(base_client.SessionClient):
|
|||
def delete_servers_1234_tags(self, **kw):
|
||||
return (204, {}, None)
|
||||
|
||||
def get_os_tenant_networks(self):
|
||||
return (200, FAKE_RESPONSE_HEADERS, {
|
||||
'networks': [{"label": "1", "cidr": "10.0.0.0/24",
|
||||
'project_id': '4ffc664c198e435e9853f2538fbcd7a7',
|
||||
'id': '1'}]})
|
||||
|
||||
def get_os_tenant_networks_1(self, **kw):
|
||||
return (200, FAKE_RESPONSE_HEADERS, {
|
||||
'network': {"label": "1", "cidr": "10.0.0.0/24",
|
||||
'project_id': '4ffc664c198e435e9853f2538fbcd7a7',
|
||||
'id': '1'}})
|
||||
|
||||
def post_os_tenant_networks(self, **kw):
|
||||
return (201, FAKE_RESPONSE_HEADERS, {
|
||||
'network': {"label": "1", "cidr": "10.0.0.0/24",
|
||||
'project_id': '4ffc664c198e435e9853f2538fbcd7a7',
|
||||
'id': '1'}})
|
||||
|
||||
def delete_os_tenant_networks_1(self, **kw):
|
||||
return (204, FAKE_RESPONSE_HEADERS, None)
|
||||
|
||||
def post_os_assisted_volume_snapshots(self, **kw):
|
||||
return (202, FAKE_RESPONSE_HEADERS,
|
||||
{'snapshot': {'id': 'blah', 'volumeId': '1'}})
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
# Copyright 2013 OpenStack Foundation
|
||||
#
|
||||
# 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 novaclient import api_versions
|
||||
from novaclient import base
|
||||
|
||||
|
||||
class TenantNetwork(base.Resource):
|
||||
def delete(self):
|
||||
"""
|
||||
DEPRECATED: Delete this project network.
|
||||
|
||||
:returns: An instance of novaclient.base.TupleWithMeta
|
||||
"""
|
||||
return self.manager.delete(network=self)
|
||||
|
||||
|
||||
class TenantNetworkManager(base.ManagerWithFind):
|
||||
"""DEPRECATED"""
|
||||
resource_class = base.Resource
|
||||
|
||||
@api_versions.deprecated_after('2.35')
|
||||
def list(self):
|
||||
"""DEPRECATED"""
|
||||
return self._list('/os-tenant-networks', 'networks')
|
||||
|
||||
@api_versions.deprecated_after('2.35')
|
||||
def get(self, network):
|
||||
"""DEPRECATED"""
|
||||
return self._get('/os-tenant-networks/%s' % base.getid(network),
|
||||
'network')
|
||||
|
||||
@api_versions.deprecated_after('2.35')
|
||||
def delete(self, network):
|
||||
"""
|
||||
DEPRECATED: Delete a specified project network.
|
||||
|
||||
:param network: a project network to delete
|
||||
:returns: An instance of novaclient.base.TupleWithMeta
|
||||
"""
|
||||
return self._delete('/os-tenant-networks/%s' % base.getid(network))
|
||||
|
||||
@api_versions.deprecated_after('2.35')
|
||||
def create(self, label, cidr):
|
||||
"""DEPRECATED"""
|
||||
body = {'network': {'label': label, 'cidr': cidr}}
|
||||
return self._create('/os-tenant-networks', body, 'network')
|
|
@ -51,3 +51,14 @@ upgrade:
|
|||
* nova tenant-network-delete
|
||||
* nova tenant-network-list
|
||||
* nova tenant-network-show
|
||||
|
||||
Along with the following python API bindings::
|
||||
|
||||
* novaclient.v2.contrib.tenant_networks
|
||||
|
||||
deprecations:
|
||||
- |
|
||||
The ``only_contrib`` parameter for the
|
||||
``novaclient.client.discover_extensions`` method is deprecated and now
|
||||
results in an empty list returned since all contrib extensions are either
|
||||
required or have been removed.
|
Loading…
Reference in New Issue