rpc: Add possibility to load module with additional RPC commands
This patch adds '--plugin <module_name>' parameter to rpc.py script which is used to provide module name with additional RPC commands that should be included in rpc.py script. User must export path to rpc module with PYTHONPATH before calling rpc.py with this new parameter. Signed-off-by: Maciej Szwed <maciej.szwed@intel.com> Change-Id: I971429a33cf4ea943d2b7f3abd5a6cb82398d2a4 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2263 Community-CI: Mellanox Build Bot 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
8cc72fe459
commit
b0bac20ad6
@ -5,6 +5,7 @@ from rpc.helpers import deprecated_aliases
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
import argparse
|
import argparse
|
||||||
|
import importlib
|
||||||
import rpc
|
import rpc
|
||||||
import sys
|
import sys
|
||||||
import shlex
|
import shlex
|
||||||
@ -45,6 +46,7 @@ if __name__ == "__main__":
|
|||||||
pipes and can be used as a faster way to send RPC commands. If enabled, rpc.py \
|
pipes and can be used as a faster way to send RPC commands. If enabled, rpc.py \
|
||||||
must be executed without any other parameters.")
|
must be executed without any other parameters.")
|
||||||
parser.set_defaults(is_server=False)
|
parser.set_defaults(is_server=False)
|
||||||
|
parser.add_argument('--plugin', dest='rpc_plugin', help='Module name of plugin with additional RPC commands')
|
||||||
subparsers = parser.add_subparsers(help='RPC methods', dest='called_rpc_name', metavar='')
|
subparsers = parser.add_subparsers(help='RPC methods', dest='called_rpc_name', metavar='')
|
||||||
|
|
||||||
def framework_start_init(args):
|
def framework_start_init(args):
|
||||||
@ -2401,6 +2403,21 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
|
|||||||
print(ex.message)
|
print(ex.message)
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
# Create temporary parser, pull out the plugin parameter, load the module, and then run the real argument parser
|
||||||
|
plugin_parser = argparse.ArgumentParser(add_help=False)
|
||||||
|
plugin_parser.add_argument('--plugin', dest='rpc_plugin', help='Module name of plugin with additional RPC commands')
|
||||||
|
|
||||||
|
rpc_module = plugin_parser.parse_known_args()[0].rpc_plugin
|
||||||
|
if rpc_module is not None:
|
||||||
|
try:
|
||||||
|
rpc_plugin = importlib.import_module(rpc_module)
|
||||||
|
try:
|
||||||
|
rpc_plugin.spdk_rpc_plugin_initialize(subparsers)
|
||||||
|
except AttributeError:
|
||||||
|
print("Module %s does not contain 'spdk_rpc_plugin_initialize' function" % rpc_module)
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
print("Module %s not found" % rpc_module)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if sys.stdin.isatty() and not hasattr(args, 'func'):
|
if sys.stdin.isatty() and not hasattr(args, 'func'):
|
||||||
|
Loading…
Reference in New Issue
Block a user