"nova boot" should not log an error if subsidiary commands fail

Fix:
Intially the cli was raising "CommadError" in case the requested
flavor or image were not present.
This error category was not approrpiate as it signifies an error
in the command syntax. When the requested resource (flavour/image)
does not exist, a ResourceNotFound error should be raised. So,
added a new error category "ResourceNotFound" to cater for this
scenario and updated the code to raise this new error.
"nova show <instance_name>" command has also been updated to raise
"ResourceNotFound" error when the requested vm for which details
have to be displayed does not exist.

Closes-Bug: #1258488
Change-Id: If64a087944586ef5792efe3baa62e455b9bbaa07
This commit is contained in:
Jyotsna 2014-06-13 17:23:27 +05:30
parent d07699de84
commit b78c0d4f46
4 changed files with 10 additions and 5 deletions

View File

@ -55,6 +55,11 @@ class CommandError(ClientException):
pass
class ResourceNotFound(ClientException):
"""Error in getting the resource."""
pass
class AuthorizationFailure(ClientException):
"""Cannot authorize API client."""
pass

View File

@ -89,15 +89,15 @@ class FindResourceTestCase(test_utils.TestCase):
def test_find_none(self):
"""Test a few non-valid inputs."""
self.assertRaises(exceptions.CommandError,
self.assertRaises(exceptions.ResourceNotFound,
utils.find_resource,
self.manager,
'asdf')
self.assertRaises(exceptions.CommandError,
self.assertRaises(exceptions.ResourceNotFound,
utils.find_resource,
self.manager,
None)
self.assertRaises(exceptions.CommandError,
self.assertRaises(exceptions.ResourceNotFound,
utils.find_resource,
self.manager,
{})

View File

@ -953,7 +953,7 @@ class ShellTest(utils.TestCase):
self.assert_called('GET', '/flavors/1', pos=-1)
def test_show_bad_id(self):
self.assertRaises(exceptions.CommandError,
self.assertRaises(exceptions.ResourceNotFound,
self.run_command, 'show xxx')
@mock.patch('novaclient.v1_1.shell.utils.print_dict')

View File

@ -241,7 +241,7 @@ def find_resource(manager, name_or_id, **find_args):
msg = _("No %(class)s with a name or ID of '%(name)s' exists.") % \
{'class': manager.resource_class.__name__.lower(),
'name': name_or_id}
raise exceptions.CommandError(msg)
raise exceptions.ResourceNotFound(msg)
except exceptions.NoUniqueMatch:
msg = (_("Multiple %(class)s matches found for '%(name)s', use an ID "
"to be more specific.") %