Commit 5ddb210e authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

scripts/rpc: Support loading plugins in --server mode



Put plugin parser into a separate function and use it to additionally
parse arguments passed to rpc.py via stdin.

Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Change-Id: I170d762ed9f5483d92b298f4804ee4e9f227a751
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7145


Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 31f8d52d
Loading
Loading
Loading
Loading
+19 −12
Original line number Diff line number Diff line
@@ -2650,11 +2650,15 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
                print(ex.message)
                exit(1)

    def load_plugin(args):
        # 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 args is not None:
            rpc_module = plugin_parser.parse_known_args(args)[0].rpc_plugin

        if rpc_module is not None:
            try:
                rpc_plugin = importlib.import_module(rpc_module)
@@ -2665,6 +2669,8 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
            except ModuleNotFoundError:
                print("Module %s not found" % rpc_module)

    load_plugin(None)

    args = parser.parse_args()

    if sys.stdin.isatty() and not hasattr(args, 'func'):
@@ -2675,6 +2681,7 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
        for input in sys.stdin:
            cmd = shlex.split(input)
            try:
                load_plugin(cmd)
                tmp_args = parser.parse_args(cmd)
            except SystemExit as ex:
                print("**STATUS=1", flush=True)