diff --git a/scripts/rpc.py b/scripts/rpc.py index 9b8809630..fb3688994 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -5,6 +5,7 @@ from rpc.helpers import deprecated_aliases import logging import argparse +import importlib import rpc import sys 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 \ must be executed without any other parameters.") 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='') 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) 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() if sys.stdin.isatty() and not hasattr(args, 'func'):