Use common find_server from v2.shell

- extend v2.shell._find_server with raise_if_notfound param
- reuse v2.shell._find_server for instance_action extension
- fix instance-action-list on v2.21 (it was unable to work
  with deleted instances)

Change-Id: I7b538124c6ab0ee00164822b324aaf2d37c8c2af
This commit is contained in:
Andrey Kurilin 2016-04-01 18:48:58 +03:00
parent d00a473238
commit fd23ff9000
2 changed files with 28 additions and 25 deletions

View File

@ -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'],

View File

@ -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):