Merge "Add optional arguments '-y' in CLI:snapshot-delete"
This commit is contained in:
commit
4722facf06
|
@ -32,6 +32,7 @@ import testscenarios
|
|||
import testtools
|
||||
import yaml
|
||||
|
||||
from heatclient._i18n import _
|
||||
from heatclient.common import http
|
||||
from heatclient.common import utils
|
||||
from heatclient import exc
|
||||
|
@ -2225,6 +2226,65 @@ class ShellTestUserPass(ShellBase):
|
|||
resp = self.shell('snapshot-show teststack/1 2')
|
||||
self.assertEqual(resp_dict, jsonutils.loads(resp))
|
||||
|
||||
# the main thing this @mock.patch is doing here is keeping
|
||||
# sys.stdin untouched for later tests
|
||||
@mock.patch('sys.stdin', new_callable=six.StringIO)
|
||||
def test_snapshot_delete_prompt_with_tty(self, ms):
|
||||
self.register_keystone_auth_fixture()
|
||||
resp_dict = {"snapshot": {
|
||||
"id": "2",
|
||||
"creation_time": "2012-10-25T01:58:47Z"
|
||||
}}
|
||||
|
||||
mock_stdin = mock.Mock()
|
||||
mock_stdin.isatty = mock.Mock()
|
||||
mock_stdin.isatty.return_value = True
|
||||
mock_stdin.readline = mock.Mock()
|
||||
mock_stdin.readline.return_value = 'n'
|
||||
sys.stdin = mock_stdin
|
||||
|
||||
self.mock_request_delete('/stacks/teststack/1/snapshots/2', resp_dict)
|
||||
|
||||
self.m.ReplayAll()
|
||||
|
||||
resp = self.shell('snapshot-delete teststack/1 2')
|
||||
resp_text = ('Are you sure you want to delete the snapshot of '
|
||||
'this stack [Y/N]?')
|
||||
self.assertEqual(resp_text, resp)
|
||||
self.m.ReplayAll()
|
||||
|
||||
mock_stdin.readline.return_value = 'Y'
|
||||
resp = self.shell('snapshot-delete teststack/1 2')
|
||||
msg = _("Request to delete the snapshot 2 of the stack "
|
||||
"teststack/1 has been accepted.")
|
||||
self.assertRegex(resp, msg)
|
||||
|
||||
# the main thing this @mock.patch is doing here is keeping
|
||||
# sys.stdin untouched for later tests
|
||||
@mock.patch('sys.stdin', new_callable=six.StringIO)
|
||||
def test_snapshot_delete_prompt_with_tty_y(self, ms):
|
||||
self.register_keystone_auth_fixture()
|
||||
resp_dict = {"snapshot": {
|
||||
"id": "2",
|
||||
"creation_time": "2012-10-25T01:58:47Z"
|
||||
}}
|
||||
|
||||
mock_stdin = mock.Mock()
|
||||
mock_stdin.isatty = mock.Mock()
|
||||
mock_stdin.isatty.return_value = True
|
||||
mock_stdin.readline = mock.Mock()
|
||||
mock_stdin.readline.return_value = ''
|
||||
sys.stdin = mock_stdin
|
||||
|
||||
self.mock_request_delete('/stacks/teststack/1/snapshots/2', resp_dict)
|
||||
|
||||
self.m.ReplayAll()
|
||||
# -y from the shell should skip the n/y prompt
|
||||
resp = self.shell('snapshot-delete -y teststack/1 2')
|
||||
msg = _("Request to delete the snapshot 2 of the stack "
|
||||
"teststack/1 has been accepted.")
|
||||
self.assertRegex(resp, msg)
|
||||
|
||||
def test_snapshot_delete(self):
|
||||
self.register_keystone_auth_fixture()
|
||||
|
||||
|
@ -2236,7 +2296,9 @@ class ShellTestUserPass(ShellBase):
|
|||
|
||||
self.m.ReplayAll()
|
||||
resp = self.shell('snapshot-delete teststack/1 2')
|
||||
self.assertEqual("", resp)
|
||||
msg = _("Request to delete the snapshot 2 of the stack "
|
||||
"teststack/1 has been accepted.")
|
||||
self.assertRegex(resp, msg)
|
||||
|
||||
def test_stack_restore(self):
|
||||
self.register_keystone_auth_fixture()
|
||||
|
|
|
@ -1634,13 +1634,34 @@ def do_snapshot_show(hc, args):
|
|||
help=_('Name or ID of the stack containing the snapshot.'))
|
||||
@utils.arg('snapshot', metavar='<SNAPSHOT>',
|
||||
help=_('The ID of the snapshot to delete.'))
|
||||
@utils.arg('-y', '--yes', default=False, action="store_true",
|
||||
help=_('Skip yes/no prompt (assume yes).'))
|
||||
def do_snapshot_delete(hc, args):
|
||||
'''Delete a snapshot of a stack.'''
|
||||
show_deprecated('heat snapshot-delete', 'openstack stack snapshot delete')
|
||||
|
||||
msg = "User did not confirm snapshot delete %sso taking no action."
|
||||
try:
|
||||
if not args.yes and sys.stdin.isatty():
|
||||
sys.stdout.write(
|
||||
_('Are you sure you want to delete the snapshot of this '
|
||||
'stack [Y/N]?'))
|
||||
prompt_response = sys.stdin.readline().lower()
|
||||
if not prompt_response.startswith('y'):
|
||||
logger.info(msg, '')
|
||||
return
|
||||
except KeyboardInterrupt: # ctrl-c
|
||||
logger.info(msg, '(ctrl-c) ')
|
||||
return
|
||||
except EOFError: # ctrl-d
|
||||
logger.info(msg, '(ctrl-d) ')
|
||||
return
|
||||
fields = {'stack_id': args.id, 'snapshot_id': args.snapshot}
|
||||
try:
|
||||
hc.stacks.snapshot_delete(**fields)
|
||||
success_msg = _("Request to delete the snapshot %(snapshot_id)s of "
|
||||
"the stack %(stack_id)s has been accepted.")
|
||||
print(success_msg % {'stack_id': args.id,
|
||||
'snapshot_id': args.snapshot})
|
||||
except exc.HTTPNotFound:
|
||||
raise exc.CommandError(_('Stack or snapshot not found'))
|
||||
|
||||
|
|
Loading…
Reference in New Issue