Merge "Add a warning in 'nova-manage cell_v2 delete_cell'"
This commit is contained in:
commit
135a9d709d
@ -213,7 +213,9 @@ Nova Cells v2
|
|||||||
the cell and the hosts are deleted successfully with ``--force`` option,
|
the cell and the hosts are deleted successfully with ``--force`` option,
|
||||||
1 if a cell with that uuid could not be found, 2 if host mappings were
|
1 if a cell with that uuid could not be found, 2 if host mappings were
|
||||||
found for the cell (cell not empty) without ``--force`` option, and 3
|
found for the cell (cell not empty) without ``--force`` option, and 3
|
||||||
if there are instances mapped to the cell (cell not empty).
|
if there are instances mapped to the cell (cell not empty), 4 if there are
|
||||||
|
instance mappings to the cell but all instances have been deleted
|
||||||
|
in the cell.
|
||||||
|
|
||||||
``nova-manage cell_v2 list_hosts [--cell_uuid <cell_uuid>]``
|
``nova-manage cell_v2 list_hosts [--cell_uuid <cell_uuid>]``
|
||||||
|
|
||||||
|
@ -1393,9 +1393,21 @@ class CellV2Commands(object):
|
|||||||
instance_mappings = objects.InstanceMappingList.get_by_cell_id(
|
instance_mappings = objects.InstanceMappingList.get_by_cell_id(
|
||||||
ctxt, cell_mapping.id)
|
ctxt, cell_mapping.id)
|
||||||
if instance_mappings:
|
if instance_mappings:
|
||||||
print(_('There are existing instances mapped to cell with '
|
with context.target_cell(ctxt, cell_mapping) as cctxt:
|
||||||
'uuid %s.') % cell_uuid)
|
instances = objects.InstanceList.get_all(cctxt)
|
||||||
return 3
|
if instances:
|
||||||
|
# There are instances in the cell.
|
||||||
|
print(_('There are existing instances mapped to cell with '
|
||||||
|
'uuid %s.') % cell_uuid)
|
||||||
|
return 3
|
||||||
|
# There are no instances in the cell but the records remains
|
||||||
|
# in the 'instance_mappings' table.
|
||||||
|
print(_("There are instance mappings to cell with uuid %s, "
|
||||||
|
"but all instances have been deleted "
|
||||||
|
"in the cell.") % cell_uuid)
|
||||||
|
print(_("So execute 'nova-manage db archive_deleted_rows' to "
|
||||||
|
"delete the instance mappings."))
|
||||||
|
return 4
|
||||||
|
|
||||||
# Delete hosts mapped to the cell.
|
# Delete hosts mapped to the cell.
|
||||||
for host_mapping in host_mappings:
|
for host_mapping in host_mappings:
|
||||||
|
@ -1691,10 +1691,14 @@ class CellV2CommandsTestCase(test.NoDBTestCase):
|
|||||||
output = self.output.getvalue().strip()
|
output = self.output.getvalue().strip()
|
||||||
self.assertIn('There are existing hosts mapped to cell', output)
|
self.assertIn('There are existing hosts mapped to cell', output)
|
||||||
|
|
||||||
def test_delete_cell_instance_mappings_exist(self):
|
@mock.patch.object(objects.InstanceList, 'get_all')
|
||||||
|
def test_delete_cell_instance_mappings_exist_with_instances(
|
||||||
|
self, mock_get_all):
|
||||||
"""Tests trying to delete a cell which has instance mappings."""
|
"""Tests trying to delete a cell which has instance mappings."""
|
||||||
cell_uuid = uuidutils.generate_uuid()
|
cell_uuid = uuidutils.generate_uuid()
|
||||||
ctxt = context.get_admin_context()
|
ctxt = context.get_admin_context()
|
||||||
|
mock_get_all.return_value = [objects.Instance(
|
||||||
|
ctxt, uuid=uuidsentinel.instance)]
|
||||||
# create the cell mapping
|
# create the cell mapping
|
||||||
cm = objects.CellMapping(
|
cm = objects.CellMapping(
|
||||||
context=ctxt, uuid=cell_uuid, database_connection='fake:///db',
|
context=ctxt, uuid=cell_uuid, database_connection='fake:///db',
|
||||||
@ -1709,6 +1713,31 @@ class CellV2CommandsTestCase(test.NoDBTestCase):
|
|||||||
output = self.output.getvalue().strip()
|
output = self.output.getvalue().strip()
|
||||||
self.assertIn('There are existing instances mapped to cell', output)
|
self.assertIn('There are existing instances mapped to cell', output)
|
||||||
|
|
||||||
|
@mock.patch.object(objects.InstanceList, 'get_all',
|
||||||
|
return_value=[])
|
||||||
|
def test_delete_cell_instance_mappings_exist_without_instances(
|
||||||
|
self, mock_get_all):
|
||||||
|
"""Tests trying to delete a cell which has instance mappings."""
|
||||||
|
cell_uuid = uuidutils.generate_uuid()
|
||||||
|
ctxt = context.get_admin_context()
|
||||||
|
# create the cell mapping
|
||||||
|
cm = objects.CellMapping(
|
||||||
|
context=ctxt, uuid=cell_uuid, database_connection='fake:///db',
|
||||||
|
transport_url='fake:///mq')
|
||||||
|
cm.create()
|
||||||
|
# create an instance mapping in this cell
|
||||||
|
im = objects.InstanceMapping(
|
||||||
|
context=ctxt, instance_uuid=uuidutils.generate_uuid(),
|
||||||
|
cell_mapping=cm, project_id=uuidutils.generate_uuid())
|
||||||
|
im.create()
|
||||||
|
self.assertEqual(4, self.commands.delete_cell(cell_uuid))
|
||||||
|
output = self.output.getvalue().strip()
|
||||||
|
self.assertIn('There are instance mappings to cell with uuid', output)
|
||||||
|
self.assertIn('but all instances have been deleted in the cell.',
|
||||||
|
output)
|
||||||
|
self.assertIn("So execute 'nova-manage db archive_deleted_rows' to "
|
||||||
|
"delete the instance mappings.", output)
|
||||||
|
|
||||||
def test_delete_cell_success_without_host_mappings(self):
|
def test_delete_cell_success_without_host_mappings(self):
|
||||||
"""Tests trying to delete an empty cell."""
|
"""Tests trying to delete an empty cell."""
|
||||||
cell_uuid = uuidutils.generate_uuid()
|
cell_uuid = uuidutils.generate_uuid()
|
||||||
|
6
releasenotes/notes/bug-1725331-fcf93514045a557a.yaml
Normal file
6
releasenotes/notes/bug-1725331-fcf93514045a557a.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
The ``nova-manage cell_v2 delete_cell`` command returns an exit code 4
|
||||||
|
when there are instance mappings to a cell to delete but all instances
|
||||||
|
have been deleted in the cell.
|
Loading…
x
Reference in New Issue
Block a user