Merge "Add delete CLI helper to ShareCommands"
This commit is contained in:
commit
221d4d940d
@ -82,6 +82,7 @@ SHARE_SERVERS_UPDATE_HELP = ("List of share servers to be updated, separated "
|
|||||||
"by commas.")
|
"by commas.")
|
||||||
SHARE_SERVERS_UPDATE_CAPABILITIES_HELP = (
|
SHARE_SERVERS_UPDATE_CAPABILITIES_HELP = (
|
||||||
"List of share server capabilities to be updated, separated by commas.")
|
"List of share server capabilities to be updated, separated by commas.")
|
||||||
|
SHARE_DELETE_HELP = ("Share ID to be deleted.")
|
||||||
|
|
||||||
|
|
||||||
# Decorators for actions
|
# Decorators for actions
|
||||||
@ -402,6 +403,30 @@ class ShareCommands(object):
|
|||||||
}
|
}
|
||||||
print(msg % msg_args)
|
print(msg % msg_args)
|
||||||
|
|
||||||
|
@args('--share_id', required=True, help=SHARE_DELETE_HELP)
|
||||||
|
def delete(self, share_id):
|
||||||
|
"""Delete manila share from the database.
|
||||||
|
|
||||||
|
This command is useful after a share's manager service
|
||||||
|
has been decommissioned.
|
||||||
|
"""
|
||||||
|
ctxt = context.get_admin_context()
|
||||||
|
share = db.share_get(ctxt, share_id)
|
||||||
|
|
||||||
|
active_replicas = []
|
||||||
|
# We delete "active" replicas at the end
|
||||||
|
for share_instance in share['instances']:
|
||||||
|
if share_instance['replica_state'] == "active":
|
||||||
|
active_replicas.append(share_instance)
|
||||||
|
else:
|
||||||
|
db.share_instance_delete(ctxt, share_instance['id'])
|
||||||
|
for share_instance in active_replicas:
|
||||||
|
db.share_instance_delete(ctxt, share_instance['id'])
|
||||||
|
print("Deleted share instance %s" % share_instance['id'])
|
||||||
|
|
||||||
|
# finally, clean up the share
|
||||||
|
print("Deleted share %s" % share_id)
|
||||||
|
|
||||||
|
|
||||||
class ShareServerCommands(object):
|
class ShareServerCommands(object):
|
||||||
@args('--share_servers', required=True,
|
@args('--share_servers', required=True,
|
||||||
|
@ -439,6 +439,33 @@ class ManilaCmdManageTestCase(test.TestCase):
|
|||||||
db.share_resources_host_update.assert_called_once_with(
|
db.share_resources_host_update.assert_called_once_with(
|
||||||
'admin_ctxt', current_host, new_host)
|
'admin_ctxt', current_host, new_host)
|
||||||
|
|
||||||
|
def test_share_delete(self):
|
||||||
|
share_id = "fake_share_id"
|
||||||
|
share = {
|
||||||
|
'id': share_id,
|
||||||
|
'instances': [
|
||||||
|
{'id': 'instance_id1', 'replica_state': 'active'},
|
||||||
|
{'id': 'instance_id2', 'replica_state': 'error'},
|
||||||
|
{'id': 'instance_id3', 'replica_state': 'active'},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
self.mock_object(context, 'get_admin_context',
|
||||||
|
mock.Mock(return_value='admin_ctxt'))
|
||||||
|
self.mock_object(db, 'share_get',
|
||||||
|
mock.Mock(return_value=share))
|
||||||
|
self.mock_object(db, 'share_instance_delete',
|
||||||
|
mock.Mock(return_value=None))
|
||||||
|
|
||||||
|
self.share_cmds.delete(share_id)
|
||||||
|
|
||||||
|
db.share_instance_delete.assert_has_calls([
|
||||||
|
mock.call('admin_ctxt', 'instance_id2'),
|
||||||
|
mock.call('admin_ctxt', 'instance_id1'),
|
||||||
|
mock.call('admin_ctxt', 'instance_id3'),
|
||||||
|
])
|
||||||
|
|
||||||
|
self.assertEqual(3, db.share_instance_delete.call_count)
|
||||||
|
|
||||||
def test_share_server_update_capability(self):
|
def test_share_server_update_capability(self):
|
||||||
self.mock_object(context, 'get_admin_context',
|
self.mock_object(context, 'get_admin_context',
|
||||||
mock.Mock(return_value='admin_ctxt'))
|
mock.Mock(return_value='admin_ctxt'))
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
-|
|
||||||
|
Launchpad `bug 1867030 <https://bugs.launchpad.net/manila/+bug/186730>`_
|
||||||
|
has been fixed for delete share.
|
Loading…
Reference in New Issue
Block a user