spdkcli: Exit with 1 when rpc throws JSONRPCException
Fixes #593 Change-Id: Ib9eebdc1c74b82e8d193708b57afea7fefa7aa98 Signed-off-by: Pawel Kaminski <pawelx.kaminski@intel.com> Reviewed-on: https://review.gerrithub.io/c/443887 (master) Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447605 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
83bbb8bb4b
commit
85d6682dd4
@ -3,6 +3,7 @@ import sys
|
|||||||
import argparse
|
import argparse
|
||||||
import configshell_fb
|
import configshell_fb
|
||||||
from os import getuid
|
from os import getuid
|
||||||
|
from rpc.client import JSONRPCException
|
||||||
from configshell_fb import ConfigShell, shell, ExecutionError
|
from configshell_fb import ConfigShell, shell, ExecutionError
|
||||||
from spdkcli import UIRoot
|
from spdkcli import UIRoot
|
||||||
from pyparsing import (alphanums, Optional, Suppress, Word, Regex,
|
from pyparsing import (alphanums, Optional, Suppress, Word, Regex,
|
||||||
@ -63,7 +64,7 @@ def main():
|
|||||||
while not spdk_shell._exit:
|
while not spdk_shell._exit:
|
||||||
try:
|
try:
|
||||||
spdk_shell.run_interactive()
|
spdk_shell.run_interactive()
|
||||||
except ExecutionError as e:
|
except (JSONRPCException, ExecutionError) as e:
|
||||||
spdk_shell.log.error("%s" % e)
|
spdk_shell.log.error("%s" % e)
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,8 +37,8 @@ class UINode(ConfigNode):
|
|||||||
try:
|
try:
|
||||||
result = ConfigNode.execute_command(self, command,
|
result = ConfigNode.execute_command(self, command,
|
||||||
pparams, kparams)
|
pparams, kparams)
|
||||||
except Exception as msg:
|
except Exception as e:
|
||||||
self.shell.log.error(str(msg))
|
raise e
|
||||||
else:
|
else:
|
||||||
self.shell.log.debug("Command %s succeeded." % command)
|
self.shell.log.debug("Command %s succeeded." % command)
|
||||||
return result
|
return result
|
||||||
@ -118,11 +118,14 @@ class UILvolStores(UINode):
|
|||||||
self.delete(name, uuid)
|
self.delete(name, uuid)
|
||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
|
rpc_messages = ""
|
||||||
for lvs in self._children:
|
for lvs in self._children:
|
||||||
try:
|
try:
|
||||||
self.delete(None, lvs.lvs.uuid)
|
self.delete(None, lvs.lvs.uuid)
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def summary(self):
|
def summary(self):
|
||||||
return "Lvol stores: %s" % len(self.children), None
|
return "Lvol stores: %s" % len(self.children), None
|
||||||
@ -144,11 +147,14 @@ class UIBdev(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Delete all bdevs from this tree node."""
|
"""Delete all bdevs from this tree node."""
|
||||||
|
rpc_messages = ""
|
||||||
for bdev in self._children:
|
for bdev in self._children:
|
||||||
try:
|
try:
|
||||||
self.delete(bdev.name)
|
self.delete(bdev.name)
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def summary(self):
|
def summary(self):
|
||||||
return "Bdevs: %d" % len(self.children), None
|
return "Bdevs: %d" % len(self.children), None
|
||||||
@ -290,6 +296,7 @@ class UINvmeBdev(UIBdev):
|
|||||||
self.shell.log.info(ret_name)
|
self.shell.log.info(ret_name)
|
||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
|
rpc_messages = ""
|
||||||
ctrlrs = [x.name for x in self._children]
|
ctrlrs = [x.name for x in self._children]
|
||||||
ctrlrs = [x.rsplit("n", 1)[0] for x in ctrlrs]
|
ctrlrs = [x.rsplit("n", 1)[0] for x in ctrlrs]
|
||||||
ctrlrs = set(ctrlrs)
|
ctrlrs = set(ctrlrs)
|
||||||
@ -297,7 +304,9 @@ class UINvmeBdev(UIBdev):
|
|||||||
try:
|
try:
|
||||||
self.delete(ctrlr)
|
self.delete(ctrlr)
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.messages
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def ui_command_delete(self, name):
|
def ui_command_delete(self, name):
|
||||||
"""
|
"""
|
||||||
|
@ -125,11 +125,14 @@ class UIISCSIDevices(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Delete all target nodes"""
|
"""Delete all target nodes"""
|
||||||
|
rpc_messages = ""
|
||||||
for device in self.scsi_devices:
|
for device in self.scsi_devices:
|
||||||
try:
|
try:
|
||||||
self.delete(device.device_name)
|
self.delete(device.device_name)
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def ui_command_add_lun(self, name, bdev_name, lun_id=None):
|
def ui_command_add_lun(self, name, bdev_name, lun_id=None):
|
||||||
"""Add lun to the target node.
|
"""Add lun to the target node.
|
||||||
@ -317,11 +320,14 @@ class UIPortalGroups(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Delete all portal groups"""
|
"""Delete all portal groups"""
|
||||||
|
rpc_messages = ""
|
||||||
for pg in self.pgs:
|
for pg in self.pgs:
|
||||||
try:
|
try:
|
||||||
self.delete(pg.tag)
|
self.delete(pg.tag)
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def refresh(self):
|
def refresh(self):
|
||||||
self._children = set([])
|
self._children = set([])
|
||||||
@ -392,11 +398,14 @@ class UIInitiatorGroups(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Delete all initiator groups"""
|
"""Delete all initiator groups"""
|
||||||
|
rpc_messages = ""
|
||||||
for ig in self.igs:
|
for ig in self.igs:
|
||||||
try:
|
try:
|
||||||
self.delete(ig.tag)
|
self.delete(ig.tag)
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def ui_command_add_initiator(self, tag, initiators, netmasks):
|
def ui_command_add_initiator(self, tag, initiators, netmasks):
|
||||||
"""Add initiators to an existing initiator group.
|
"""Add initiators to an existing initiator group.
|
||||||
@ -542,11 +551,14 @@ class UIISCSIAuthGroups(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Delete all authentication groups."""
|
"""Delete all authentication groups."""
|
||||||
|
rpc_messages = ""
|
||||||
for iscsi_auth_group in self.iscsi_auth_groups:
|
for iscsi_auth_group in self.iscsi_auth_groups:
|
||||||
try:
|
try:
|
||||||
self.delete(iscsi_auth_group['tag'])
|
self.delete(iscsi_auth_group['tag'])
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def ui_command_add_secret(self, tag, user, secret,
|
def ui_command_add_secret(self, tag, user, secret,
|
||||||
muser=None, msecret=None):
|
muser=None, msecret=None):
|
||||||
@ -581,6 +593,7 @@ class UIISCSIAuthGroups(UINode):
|
|||||||
Args:
|
Args:
|
||||||
tag: Authentication group tag (unique, integer > 0)
|
tag: Authentication group tag (unique, integer > 0)
|
||||||
"""
|
"""
|
||||||
|
rpc_messages = ""
|
||||||
tag = self.ui_eval_param(tag, "number", None)
|
tag = self.ui_eval_param(tag, "number", None)
|
||||||
for ag in self.iscsi_auth_groups:
|
for ag in self.iscsi_auth_groups:
|
||||||
if ag['tag'] == tag:
|
if ag['tag'] == tag:
|
||||||
@ -588,7 +601,9 @@ class UIISCSIAuthGroups(UINode):
|
|||||||
try:
|
try:
|
||||||
self.delete_secret(tag, secret['user'])
|
self.delete_secret(tag, secret['user'])
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def summary(self):
|
def summary(self):
|
||||||
return "Groups: %s" % len(self.iscsi_auth_groups), None
|
return "Groups: %s" % len(self.iscsi_auth_groups), None
|
||||||
|
@ -102,11 +102,14 @@ class UINVMfSubsystems(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Delete all subsystems"""
|
"""Delete all subsystems"""
|
||||||
|
rpc_messages = ""
|
||||||
for child in self._children:
|
for child in self._children:
|
||||||
try:
|
try:
|
||||||
self.delete(child.subsystem.nqn)
|
self.delete(child.subsystem.nqn)
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def summary(self):
|
def summary(self):
|
||||||
return "Subsystems: %s" % len(self.children), None
|
return "Subsystems: %s" % len(self.children), None
|
||||||
@ -206,11 +209,14 @@ class UINVMfSubsystemListeners(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Remove all address listeners from subsystem."""
|
"""Remove all address listeners from subsystem."""
|
||||||
|
rpc_messages = ""
|
||||||
for la in self.listen_addresses:
|
for la in self.listen_addresses:
|
||||||
try:
|
try:
|
||||||
self.delete(la['trtype'], la['traddr'], la['trsvcid'], la['adrfam'])
|
self.delete(la['trtype'], la['traddr'], la['trsvcid'], la['adrfam'])
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def summary(self):
|
def summary(self):
|
||||||
return "Addresses: %s" % len(self.listen_addresses), None
|
return "Addresses: %s" % len(self.listen_addresses), None
|
||||||
@ -266,11 +272,14 @@ class UINVMfSubsystemHosts(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Delete host from subsystem"""
|
"""Delete host from subsystem"""
|
||||||
|
rpc_messages = ""
|
||||||
for host in self.hosts:
|
for host in self.hosts:
|
||||||
try:
|
try:
|
||||||
self.delete(host['nqn'])
|
self.delete(host['nqn'])
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def summary(self):
|
def summary(self):
|
||||||
return "Hosts: %s" % len(self.hosts), None
|
return "Hosts: %s" % len(self.hosts), None
|
||||||
@ -331,11 +340,14 @@ class UINVMfSubsystemNamespaces(UINode):
|
|||||||
|
|
||||||
def ui_command_delete_all(self):
|
def ui_command_delete_all(self):
|
||||||
"""Delete all namespaces from subsystem."""
|
"""Delete all namespaces from subsystem."""
|
||||||
|
rpc_messages = ""
|
||||||
for namespace in self.namespaces:
|
for namespace in self.namespaces:
|
||||||
try:
|
try:
|
||||||
self.delete(namespace['nsid'])
|
self.delete(namespace['nsid'])
|
||||||
except JSONRPCException as e:
|
except JSONRPCException as e:
|
||||||
self.shell.log.error(e.message)
|
rpc_messages += e.message
|
||||||
|
if rpc_messages:
|
||||||
|
raise JSONRPCException(rpc_messages)
|
||||||
|
|
||||||
def summary(self):
|
def summary(self):
|
||||||
return "Namespaces: %s" % len(self.namespaces), None
|
return "Namespaces: %s" % len(self.namespaces), None
|
||||||
|
Loading…
Reference in New Issue
Block a user