Remove cells v1 and extension commands and APIs

The following CLIs and their backing API bindings
which have been deprecated since 20.0.0 Train release
have now been removed.

- list-extensions
- cell-capacities
- cell-show

Change-Id: I8e6edf1e4c1bf12d51ed993363129b4f4c3aa36c
This commit is contained in:
Takashi NATSUME 2019-10-04 09:37:02 +09:00
parent 48634ed51e
commit 364cad4191
11 changed files with 8 additions and 421 deletions

View File

@ -108,13 +108,6 @@ nova usage
``boot`` ``boot``
Boot a new server. Boot a new server.
``cell-capacities``
Get cell capacities for all cells or a given
cell.
``cell-show``
Show details of a given cell.
``clear-password`` ``clear-password``
Clear the admin password for a server from the Clear the admin password for a server from the
metadata server. This action does not actually metadata server. This action does not actually
@ -309,10 +302,6 @@ nova usage
``list`` ``list``
List servers. List servers.
``list-extensions``
List all the os-api extensions that are
available.
``list-secgroup`` ``list-secgroup``
List Security Group(s) of a server. List Security Group(s) of a server.
@ -1131,38 +1120,6 @@ quality of service support, microversion ``2.72`` is required.
Requested hypervisor hostname to create servers. Admin only by default. Requested hypervisor hostname to create servers. Admin only by default.
(Supported by API versions '2.74' - '2.latest') (Supported by API versions '2.74' - '2.latest')
.. _nova_cell-capacities:
nova cell-capacities
--------------------
.. code-block:: console
usage: nova cell-capacities [--cell <cell-name>]
Get cell capacities for all cells or a given cell.
**Optional arguments:**
``--cell <cell-name>``
Name of the cell to get the capacities.
.. _nova_cell-show:
nova cell-show
--------------
.. code-block:: console
usage: nova cell-show <cell-name>
Show details of a given cell.
**Positional arguments:**
``<cell-name>``
Name of the cell.
.. _nova_clear-password: .. _nova_clear-password:
nova clear-password nova clear-password
@ -2372,18 +2329,6 @@ present in the failure domain.
unlocked servers. (Supported by API versions unlocked servers. (Supported by API versions
'2.73' - '2.latest') '2.73' - '2.latest')
.. _nova_list-extensions:
nova list-extensions
--------------------
.. code-block:: console
usage: nova list-extensions
List all the os-api extensions that are available.
.. _nova_list-secgroup: .. _nova_list-secgroup:
nova list-secgroup nova list-secgroup

View File

@ -85,13 +85,6 @@ class SimpleReadOnlyNovaClientTest(base.ClientTestBase):
def test_admin_help(self): def test_admin_help(self):
self.nova('help') self.nova('help')
def test_admin_list_extensions(self):
output = self.nova('list-extensions', merge_stderr=True)
self.assertIn(
'The API extension interface has been deprecated. This command '
'will be removed in the first major release after '
'the Nova server 20.0.0 Train release.', output)
def test_agent_list(self): def test_agent_list(self):
self.nova('agent-list') self.nova('agent-list')
self.nova('agent-list', flags='--debug') self.nova('agent-list', flags='--debug')

View File

@ -328,53 +328,6 @@ class FakeSessionClient(base_client.SessionClient):
"md5hash": "add6bb58e139be103324d04d82d8f546", "md5hash": "add6bb58e139be103324d04d82d8f546",
'id': 1}}) 'id': 1}})
#
# List all extensions
#
def get_extensions(self, **kw):
exts = [
{
"alias": "NMN",
"description": "Multiple network support",
"links": [],
"name": "Multinic",
"namespace": ("http://docs.openstack.org/"
"compute/ext/multinic/api/v1.1"),
"updated": "2011-06-09T00:00:00+00:00"
},
{
"alias": "OS-DCF",
"description": "Disk Management Extension",
"links": [],
"name": "DiskConfig",
"namespace": ("http://docs.openstack.org/"
"compute/ext/disk_config/api/v1.1"),
"updated": "2011-09-27T00:00:00+00:00"
},
{
"alias": "OS-EXT-SRV-ATTR",
"description": "Extended Server Attributes support.",
"links": [],
"name": "ExtendedServerAttributes",
"namespace": ("http://docs.openstack.org/"
"compute/ext/extended_status/api/v1.1"),
"updated": "2011-11-03T00:00:00+00:00"
},
{
"alias": "OS-EXT-STS",
"description": "Extended Status support",
"links": [],
"name": "ExtendedStatus",
"namespace": ("http://docs.openstack.org/"
"compute/ext/extended_status/api/v1.1"),
"updated": "2011-11-03T00:00:00+00:00"
},
]
return (200, FAKE_RESPONSE_HEADERS, {
"extensions": exts,
})
# #
# Limits # Limits
# #
@ -2296,34 +2249,6 @@ class FakeSessionClient(base_client.SessionClient):
def post_servers_uuid6_action(self, **kw): def post_servers_uuid6_action(self, **kw):
return 202, {}, {} return 202, {}, {}
def get_os_cells_child_cell(self, **kw):
cell = {'cell': {
'username': 'cell1_user',
'name': 'cell1',
'rpc_host': '10.0.1.10',
'info': {
'username': 'cell1_user',
'rpc_host': '10.0.1.10',
'type': 'child',
'name': 'cell1',
'rpc_port': 5673},
'type': 'child',
'rpc_port': 5673,
'loaded': True
}}
return (200, FAKE_RESPONSE_HEADERS, cell)
def get_os_cells_capacities(self, **kw):
cell_capacities_response = {"cell": {"capacities": {"ram_free": {
"units_by_mb": {"8192": 0, "512": 13, "4096": 1, "2048": 3,
"16384": 0}, "total_mb": 7680}, "disk_free": {
"units_by_mb": {"81920": 11, "20480": 46, "40960": 23, "163840": 5,
"0": 0}, "total_mb": 1052672}}}}
return (200, FAKE_RESPONSE_HEADERS, cell_capacities_response)
def get_os_cells_child_cell_capacities(self, **kw):
return self.get_os_cells_capacities()
def get_os_migrations(self, **kw): def get_os_migrations(self, **kw):
migration1 = { migration1 = {
"created_at": "2012-10-29T13:42:02.000000", "created_at": "2012-10-29T13:42:02.000000",

View File

@ -1,55 +0,0 @@
# Copyright 2013 Rackspace Hosting
# 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.
import mock
from novaclient import api_versions
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
CELL_V1_DEPRECATION_WARNING = (
'The cells v1 interface has been deprecated in Nova since 16.0.0 Pike '
'Release. This API binding will be removed in the first major release '
'after the Nova server 20.0.0 Train release.')
@mock.patch('warnings.warn')
class CellsExtensionTests(utils.TestCase):
def setUp(self):
super(CellsExtensionTests, self).setUp()
self.cs = fakes.FakeClient(api_versions.APIVersion("2.1"))
def test_get_cells(self, mock_warn):
cell_name = 'child_cell'
cell = self.cs.cells.get(cell_name)
self.assert_request_id(cell, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-cells/%s' % cell_name)
mock_warn.assert_called_once_with(CELL_V1_DEPRECATION_WARNING,
DeprecationWarning)
def test_get_capacities_for_a_given_cell(self, mock_warn):
cell_name = 'child_cell'
ca = self.cs.cells.capacities(cell_name)
self.assert_request_id(ca, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-cells/%s/capacities' % cell_name)
mock_warn.assert_called_once_with(CELL_V1_DEPRECATION_WARNING,
DeprecationWarning)
def test_get_capacities_for_all_cells(self, mock_warn):
ca = self.cs.cells.capacities()
self.assert_request_id(ca, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-cells/capacities')
mock_warn.assert_called_once_with(CELL_V1_DEPRECATION_WARNING,
DeprecationWarning)

View File

@ -1,41 +0,0 @@
#
# 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
from novaclient import api_versions
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
class ListExtensionsTests(utils.TestCase):
def setUp(self):
super(ListExtensionsTests, self).setUp()
self.cs = fakes.FakeClient(api_versions.APIVersion("2.1"))
@mock.patch('warnings.warn')
def test_list_extensions(self, mock_warn):
all_exts = self.cs.list_extensions.show_all()
self.assert_request_id(all_exts, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/extensions')
self.assertGreater(len(all_exts), 0)
warning_message = (
'The API extension interface has been deprecated since 12.0.0 '
'Liberty Release. This API binding will be removed in the first '
'major release after the Nova server 20.0.0 Train release.')
mock_warn.assert_called_once_with(warning_message, DeprecationWarning)
for r in all_exts:
mock_warn.reset_mock()
self.assertGreater(len(r.summary), 0)
mock_warn.assert_called_once_with(warning_message,
DeprecationWarning)

View File

@ -3992,30 +3992,6 @@ class ShellTest(utils.TestCase):
self.assert_called('GET', '/os-instance_usage_audit_log' self.assert_called('GET', '/os-instance_usage_audit_log'
'/2016-12-10%2013%3A59%3A59.999999') '/2016-12-10%2013%3A59%3A59.999999')
def test_cell_show(self):
_, err = self.run_command('cell-show child_cell')
self.assert_called('GET', '/os-cells/child_cell')
self.assertIn(
'The cells v1 interface has been deprecated. This command will be '
'removed in the first major release after the Nova server 20.0.0 '
'Train release.', err)
def test_cell_capacities_with_cell_name(self):
_, err = self.run_command('cell-capacities --cell child_cell')
self.assert_called('GET', '/os-cells/child_cell/capacities')
self.assertIn(
'The cells v1 interface has been deprecated. This command will be '
'removed in the first major release after the Nova server 20.0.0 '
'Train release.', err)
def test_cell_capacities_without_cell_name(self):
_, err = self.run_command('cell-capacities')
self.assert_called('GET', '/os-cells/capacities')
self.assertIn(
'The cells v1 interface has been deprecated. This command will be '
'removed in the first major release after the Nova server 20.0.0 '
'Train release.', err)
def test_migration_list(self): def test_migration_list(self):
self.run_command('migration-list') self.run_command('migration-list')
self.assert_called('GET', '/os-migrations') self.assert_called('GET', '/os-migrations')

View File

@ -1,56 +0,0 @@
# Copyright 2013 Rackspace Hosting
# 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.
import warnings
from novaclient import base
from novaclient.i18n import _
CELL_V1_DEPRECATION_WARNING = _(
'The cells v1 interface has been deprecated in Nova since 16.0.0 Pike '
'Release. This API binding will be removed in the first major release '
'after the Nova server 20.0.0 Train release.')
class Cell(base.Resource):
"""DEPRECATED"""
def __repr__(self):
return "<Cell: %s>" % self.name
class CellsManager(base.Manager):
"""DEPRECATED"""
resource_class = Cell
def get(self, cell_name):
"""
DEPRECATED Get a cell.
:param cell_name: Name of the :class:`Cell` to get.
:rtype: :class:`Cell`
"""
warnings.warn(CELL_V1_DEPRECATION_WARNING, DeprecationWarning)
return self._get("/os-cells/%s" % cell_name, "cell")
def capacities(self, cell_name=None):
"""
DEPRECATED Get capacities for a cell.
:param cell_name: Name of the :class:`Cell` to get capacities for.
:rtype: :class:`Cell`
"""
warnings.warn(CELL_V1_DEPRECATION_WARNING, DeprecationWarning)
path = ["%s/capacities" % cell_name, "capacities"][cell_name is None]
return self._get("/os-cells/%s" % path, "cell")

View File

@ -22,7 +22,6 @@ from novaclient.v2 import agents
from novaclient.v2 import aggregates from novaclient.v2 import aggregates
from novaclient.v2 import assisted_volume_snapshots from novaclient.v2 import assisted_volume_snapshots
from novaclient.v2 import availability_zones from novaclient.v2 import availability_zones
from novaclient.v2 import cells
from novaclient.v2 import flavor_access from novaclient.v2 import flavor_access
from novaclient.v2 import flavors from novaclient.v2 import flavors
from novaclient.v2 import hypervisors from novaclient.v2 import hypervisors
@ -31,7 +30,6 @@ from novaclient.v2 import instance_action
from novaclient.v2 import instance_usage_audit_log from novaclient.v2 import instance_usage_audit_log
from novaclient.v2 import keypairs from novaclient.v2 import keypairs
from novaclient.v2 import limits from novaclient.v2 import limits
from novaclient.v2 import list_extensions
from novaclient.v2 import migrations from novaclient.v2 import migrations
from novaclient.v2 import networks from novaclient.v2 import networks
from novaclient.v2 import quota_classes from novaclient.v2 import quota_classes
@ -167,11 +165,9 @@ class Client(object):
# deprecated now, which is why it is not initialized by default. # deprecated now, which is why it is not initialized by default.
self.assisted_volume_snapshots = \ self.assisted_volume_snapshots = \
assisted_volume_snapshots.AssistedSnapshotManager(self) assisted_volume_snapshots.AssistedSnapshotManager(self)
self.cells = cells.CellsManager(self)
self.instance_action = instance_action.InstanceActionManager(self) self.instance_action = instance_action.InstanceActionManager(self)
self.instance_usage_audit_log = \ self.instance_usage_audit_log = \
instance_usage_audit_log.InstanceUsageAuditLogManager(self) instance_usage_audit_log.InstanceUsageAuditLogManager(self)
self.list_extensions = list_extensions.ListExtManager(self)
self.migrations = migrations.MigrationManager(self) self.migrations = migrations.MigrationManager(self)
self.server_external_events = \ self.server_external_events = \
server_external_events.ServerExternalEventManager(self) server_external_events.ServerExternalEventManager(self)

View File

@ -1,50 +0,0 @@
# Copyright 2011 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.
import warnings
from novaclient import base
from novaclient.i18n import _
EXTENSION_DEPRECATION_WARNING = _(
'The API extension interface has been deprecated since 12.0.0 Liberty '
'Release. This API binding will be removed in the first major release '
'after the Nova server 20.0.0 Train release.')
class ListExtResource(base.Resource):
"""DEPRECATED"""
@property
def summary(self):
"""DEPRECATED"""
warnings.warn(EXTENSION_DEPRECATION_WARNING, DeprecationWarning)
descr = self.description.strip()
if not descr:
return '??'
lines = descr.split("\n")
if len(lines) == 1:
return lines[0]
else:
return lines[0] + "..."
class ListExtManager(base.Manager):
"""DEPRECATED"""
resource_class = ListExtResource
def show_all(self):
"""DEPRECATED"""
warnings.warn(EXTENSION_DEPRECATION_WARNING, DeprecationWarning)
return self._list("/extensions", 'extensions')

View File

@ -48,21 +48,6 @@ from novaclient.v2 import servers
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
CELL_V1_DEPRECATION_WARNING = _(
'The cells v1 interface has been deprecated. This command will be removed '
'in the first major release after the Nova server 20.0.0 Train release.')
EXTENSION_DEPRECATION_WARNING = _(
'The API extension interface has been deprecated. This command will be '
'removed in the first major release after the Nova server 20.0.0 Train '
'release.')
# NOTE(takashin): Remove this along with the deprecated commands in the first
# major python-novaclient release AFTER the nova server 20.0.0 Train release.
def _emit_deprecation_warning(message):
print(message, file=sys.stderr)
def emit_duplicated_image_with_warning(img, image_with): def emit_duplicated_image_with_warning(img, image_with):
img_uuid_list = [str(image.id) for image in img] img_uuid_list = [str(image.id) for image in img]
@ -4928,35 +4913,6 @@ def do_server_tag_delete_all(cs, args):
server.delete_all_tags() server.delete_all_tags()
@utils.arg(
'cell',
metavar='<cell-name>',
help=_('Name of the cell.'))
def do_cell_show(cs, args):
"""DEPRECATED Show details of a given cell."""
_emit_deprecation_warning(CELL_V1_DEPRECATION_WARNING)
cell = cs.cells.get(args.cell)
utils.print_dict(cell.to_dict())
@utils.arg(
'--cell',
metavar='<cell-name>',
help=_("Name of the cell to get the capacities."),
default=None)
def do_cell_capacities(cs, args):
"""DEPRECATED Get cell capacities for all cells or a given cell."""
_emit_deprecation_warning(CELL_V1_DEPRECATION_WARNING)
cell = cs.cells.capacities(args.cell)
print(_("Ram Available: %s MiB") % cell.capacities['ram_free']['total_mb'])
utils.print_dict(cell.capacities['ram_free']['units_by_mb'],
dict_property='Ram(MiB)', dict_value="Units")
print(_("\nDisk Available: %s MiB") %
cell.capacities['disk_free']['total_mb'])
utils.print_dict(cell.capacities['disk_free']['units_by_mb'],
dict_property='Disk(MiB)', dict_value="Units")
@utils.arg('server', metavar='<server>', help='Name or ID of server.') @utils.arg('server', metavar='<server>', help='Name or ID of server.')
def do_force_delete(cs, args): def do_force_delete(cs, args):
"""Force delete a server.""" """Force delete a server."""
@ -5378,16 +5334,6 @@ def do_instance_action_list(cs, args):
sortby_index=3) sortby_index=3)
def do_list_extensions(cs, _args):
"""
DEPRECATED List all the os-api extensions that are available.
"""
_emit_deprecation_warning(EXTENSION_DEPRECATION_WARNING)
extensions = cs.list_extensions.show_all()
fields = ["Name", "Summary", "Alias", "Updated"]
utils.print_list(extensions, fields)
@utils.arg('host', metavar='<host>', @utils.arg('host', metavar='<host>',
help='The hypervisor hostname (or pattern) to search for. ' help='The hypervisor hostname (or pattern) to search for. '
'WARNING: Use a fully qualified domain name if you only ' 'WARNING: Use a fully qualified domain name if you only '

View File

@ -0,0 +1,8 @@
---
upgrade:
- |
The following CLIs and their backing API bindings have been removed.
- ``nova list-extensions``
- ``nova cell-capacities``
- ``nova cell-show``