diff --git a/novaclient/v2/contrib/instance_action.py b/novaclient/v2/contrib/instance_action.py index d5bd4762b..05b847c2b 100644 --- a/novaclient/v2/contrib/instance_action.py +++ b/novaclient/v2/contrib/instance_action.py @@ -15,13 +15,11 @@ import pprint -import six - from novaclient import api_versions from novaclient import base -from novaclient import exceptions from novaclient.i18n import _ from novaclient import utils +from novaclient.v2 import shell class InstanceActionManager(base.ManagerWithFind): @@ -44,23 +42,6 @@ class InstanceActionManager(base.ManagerWithFind): base.getid(server), 'instanceActions') -@api_versions.wraps("2.0", "2.20") -def _find_server(cs, args): - return utils.find_resource(cs.servers, args.server) - - -@api_versions.wraps("2.21") -def _find_server(cs, args): - try: - return utils.find_resource(cs.servers, args.server, - wrap_exception=False) - except exceptions.NoUniqueMatch as e: - raise exceptions.CommandError(six.text_type(e)) - except exceptions.NotFound: - # The server can be deleted - return args.server - - @utils.arg( 'server', metavar='<server>', @@ -78,7 +59,10 @@ def _find_server(cs, args): help=_('Request ID of the action to get.')) def do_instance_action(cs, args): """Show an action.""" - server = _find_server(cs, args) + if cs.api_version < api_versions.APIVersion("2.21"): + server = shell._find_server(cs, args.server) + else: + server = shell._find_server(cs, args.server, raise_if_notfound=False) action_resource = cs.instance_action.get(server, args.request_id) action = action_resource._info if 'events' in action: @@ -99,7 +83,10 @@ def do_instance_action(cs, args): start_version="2.21") def do_instance_action_list(cs, args): """List actions on a server.""" - server = _find_server(cs, args) + if cs.api_version < api_versions.APIVersion("2.21"): + server = shell._find_server(cs, args.server) + else: + server = shell._find_server(cs, args.server, raise_if_notfound=False) actions = cs.instance_action.list(server) utils.print_list(actions, ['Action', 'Request_ID', 'Message', 'Start_Time'], diff --git a/novaclient/v2/shell.py b/novaclient/v2/shell.py index 769725e42..844682675 100644 --- a/novaclient/v2/shell.py +++ b/novaclient/v2/shell.py @@ -2156,9 +2156,25 @@ def do_delete(cs, args): _("Unable to delete the specified server(s).")) -def _find_server(cs, server, **find_args): - """Get a server by name or ID.""" - return utils.find_resource(cs.servers, server, **find_args) +def _find_server(cs, server, raise_if_notfound=True, **find_args): + """Get a server by name or ID. + + :param cs: NovaClient's instance + :param server: identifier of server + :param raise_if_notfound: raise an exception if server is not found + :param find_args: argument to search server + """ + if raise_if_notfound: + return utils.find_resource(cs.servers, server, **find_args) + else: + try: + return utils.find_resource(cs.servers, server, + wrap_exception=False) + except exceptions.NoUniqueMatch as e: + raise exceptions.CommandError(six.text_type(e)) + except exceptions.NotFound: + # The server can be deleted + return server def _find_image(cs, image):