diff --git a/scripts/rpc.py b/scripts/rpc.py index d5ce28ac8..75283996d 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -59,49 +59,39 @@ if __name__ == "__main__": @call_cmd def save_config(args): rpc.save_config(args.client, - filename=args.filename, indent=args.indent) - p = subparsers.add_parser('save_config', help="""Write current (live) configuration of SPDK subsystems and targets. - If no filename is given write configuration to stdout.""") - p.add_argument('-f', '--filename', help="""File where to save JSON configuration to.""") - p.add_argument('-i', '--indent', help="""Indent level. Value less than 0 mean compact mode. If filename is not given default - indent level is 2. If writing to file of filename is '-' then default is compact mode.""", type=int, default=2) + p = subparsers.add_parser('save_config', help="""Write current (live) configuration of SPDK subsystems and targets to stdout. + """) + p.add_argument('-i', '--indent', help="""Indent level. Value less than 0 mean compact mode. Default indent level is 2. + """, type=int, default=2) p.set_defaults(func=save_config) @call_cmd def load_config(args): - rpc.load_config(args.client, - filename=args.filename) + rpc.load_config(args.client) - p = subparsers.add_parser('load_config', help="""Configure SPDK subsystems and tagets using JSON RPC. If no file is - provided or file is '-' read configuration from stdin.""") - p.add_argument('-f', '--filename', help="""JSON Configuration file.""") + p = subparsers.add_parser('load_config', help="""Configure SPDK subsystems and targets using JSON RPC read from stdin.""") p.set_defaults(func=load_config) @call_cmd def save_subsystem_config(args): rpc.save_subsystem_config(args.client, - filename=args.filename, indent=args.indent, name=args.name) - p = subparsers.add_parser('save_subsystem_config', help="""Write current (live) configuration of SPDK subsystem. - If no filename is given write configuration to stdout.""") - p.add_argument('-f', '--filename', help='File where to save JSON configuration to.') - p.add_argument('-i', '--indent', help="""Indent level. Value less than 0 mean compact mode. If filename is not given default - indent level is 2. If writing to file of filename is '-' then default is compact mode.""", type=int, default=2) + p = subparsers.add_parser('save_subsystem_config', help="""Write current (live) configuration of SPDK subsystem to stdout. + """) + p.add_argument('-i', '--indent', help="""Indent level. Value less than 0 mean compact mode. Default indent level is 2. + """, type=int, default=2) p.add_argument('-n', '--name', help='Name of subsystem', required=True) p.set_defaults(func=save_subsystem_config) @call_cmd def load_subsystem_config(args): - rpc.load_subsystem_config(args.client, - filename=args.filename) + rpc.load_subsystem_config(args.client) - p = subparsers.add_parser('load_subsystem_config', help="""Configure SPDK subsystem using JSON RPC. If no file is - provided or file is '-' read configuration from stdin.""") - p.add_argument('-f', '--filename', help="""JSON Configuration file.""") + p = subparsers.add_parser('load_subsystem_config', help="""Configure SPDK subsystem using JSON RPC read from stdin.""") p.set_defaults(func=load_subsystem_config) # app diff --git a/scripts/rpc/__init__.py b/scripts/rpc/__init__.py index 4899eb620..b663005f9 100755 --- a/scripts/rpc/__init__.py +++ b/scripts/rpc/__init__.py @@ -34,39 +34,20 @@ def get_rpc_methods(client, current=None): return client.call('get_rpc_methods', params) -def _json_dump(config, filename, indent): - if filename is None: - if indent is None: - indent = 2 - elif indent < 0: - indent = None - json.dump(config, sys.stdout, indent=indent) - sys.stdout.write('\n') - else: - if indent is None or indent < 0: - indent = None - with open(filename, 'w') as file: - json.dump(config, file, indent=indent) - file.write('\n') +def _json_dump(config, indent): + if indent is None: + indent = 2 + elif indent < 0: + indent = None + json.dump(config, sys.stdout, indent=indent) + sys.stdout.write('\n') -def _json_load(filename): - if not filename or filename == '-': - return json.load(sys.stdin) - - else: - with open(filename, 'r') as file: - return json.load(file) - - -def save_config(client, filename=None, indent=2): - """Write current (live) configuration of SPDK subsystems and targets. +def save_config(client, indent=2): + """Write current (live) configuration of SPDK subsystems and targets to stdout. Args: - filename: File where to save JSON configuration to. - Print to stdout if not provided. indent: Indent level. Value less than 0 mean compact mode. - If filename is not given default then indent level is 2. - If writing to file of filename is '-' then default is compact mode. + Default indent level is 2. """ config = { 'subsystems': [] @@ -79,16 +60,15 @@ def save_config(client, filename=None, indent=2): } config['subsystems'].append(cfg) - _json_dump(config, filename, indent) + _json_dump(config, indent) -def load_config(client, filename=None): - """Configure SPDK subsystems and tagets using JSON RPC. +def load_config(client): + """Configure SPDK subsystems and targets using JSON RPC read from stdin. Args: - filename: JSON Configuration file location. - If no file path is provided or file is '-' then read configuration from stdin. + none """ - json_config = _json_load(filename) + json_config = json.load(sys.stdin) # remove subsystems with no config subsystems = json_config['subsystems'] @@ -132,30 +112,26 @@ def load_config(client, filename=None): print("Some configs were skipped because the RPC state that can call them passed over.") -def save_subsystem_config(client, filename=None, indent=2, name=None): - """Write current (live) configuration of SPDK subsystem. +def save_subsystem_config(client, indent=2, name=None): + """Write current (live) configuration of SPDK subsystem to stdout. Args: - filename: File where to save JSON configuration to. - Print to stdout if not provided. indent: Indent level. Value less than 0 mean compact mode. - If filename is not given default then indent level is 2. - If writing to file of filename is '-' then default is compact mode. + Default is indent level 2. """ cfg = { 'subsystem': name, 'config': client.call('get_subsystem_config', {"name": name}) } - _json_dump(cfg, filename, indent) + _json_dump(cfg, indent) -def load_subsystem_config(client, filename=None): - """Configure SPDK subsystem using JSON RPC. +def load_subsystem_config(client): + """Configure SPDK subsystem using JSON RPC read from stdin. Args: - filename: JSON Configuration file location. - If no file path is provided or file is '-' then read configuration from stdin. + none """ - subsystem = _json_load(filename) + subsystem = json.load(sys.stdin) if not subsystem['config']: return diff --git a/test/iscsi_tgt/calsoft/calsoft.sh b/test/iscsi_tgt/calsoft/calsoft.sh index b83638b06..c0a57d103 100755 --- a/test/iscsi_tgt/calsoft/calsoft.sh +++ b/test/iscsi_tgt/calsoft/calsoft.sh @@ -39,7 +39,7 @@ echo "Process pid: $pid" trap "killprocess $pid; delete_tmp_conf_files; exit 1 " SIGINT SIGTERM EXIT waitforlisten $pid -$rpc_py load_subsystem_config -f $testdir/iscsi.json +$rpc_py load_subsystem_config < $testdir/iscsi.json $rpc_py start_subsystem_init echo "iscsi_tgt is listening. Running tests..." diff --git a/test/iscsi_tgt/iscsijson/json_config.sh b/test/iscsi_tgt/iscsijson/json_config.sh index ea4668086..02d69d345 100755 --- a/test/iscsi_tgt/iscsijson/json_config.sh +++ b/test/iscsi_tgt/iscsijson/json_config.sh @@ -18,7 +18,7 @@ $rpc_py add_portal_group $PORTAL_TAG 127.0.0.1:$ISCSI_PORT $rpc_py add_initiator_group $INITIATOR_TAG $INITIATOR_NAME $NETMASK $rpc_py construct_malloc_bdev 64 4096 --name Malloc0 $rpc_py construct_target_node Target3 Target3_alias 'Malloc0:0' $PORTAL_TAG:$INITIATOR_TAG 64 -d -$rpc_py save_config -f $base_iscsi_config +$rpc_py save_config > $base_iscsi_config timing_exit iscsi_json_config_create_setup timing_enter iscsi_json_config_test @@ -29,8 +29,8 @@ timing_enter iscsi_json_config_restart_spdk $clear_config_py clear_config kill_targets run_spdk_tgt -$rpc_py load_config -f $base_iscsi_config -$rpc_py save_config -f $last_iscsi_config +$rpc_py load_config < $base_iscsi_config +$rpc_py save_config > $last_iscsi_config timing_exit iscsi_json_config_restart_spdk diff $base_iscsi_config $last_iscsi_config diff --git a/test/json_config/common.sh b/test/json_config/common.sh index 03ca769c9..690387423 100644 --- a/test/json_config/common.sh +++ b/test/json_config/common.sh @@ -31,7 +31,7 @@ function load_nvme() { echo '{"subsystems": [' > nvme_config.json $SPDK_BUILD_DIR/scripts/gen_nvme.sh --json >> nvme_config.json echo ']}' >> nvme_config.json - $rpc_py load_config -f nvme_config.json + $rpc_py load_config < nvme_config.json rm nvme_config.json } @@ -78,18 +78,18 @@ function kill_targets() { # 11. Remove all files. function test_json_config() { $rpc_py get_bdevs | jq '.|sort_by(.name)' > $base_bdevs - $rpc_py save_config -f $full_config + $rpc_py save_config > $full_config $JSON_DIR/config_filter.py -method "delete_global_parameters" -filename $full_config > $base_json_config $clear_config_py clear_config - $rpc_py save_config -f $tmp_config + $rpc_py save_config > $tmp_config $JSON_DIR/config_filter.py -method "delete_global_parameters" -filename $tmp_config > $null_json_config if [ "[]" != "$(jq '.subsystems | map(select(.config != null)) | map(select(.config != []))' $null_json_config)" ]; then echo "Config has not been cleared" return 1 fi - $rpc_py load_config -f $base_json_config + $rpc_py load_config < $base_json_config $rpc_py get_bdevs | jq '.|sort_by(.name)' > $last_bdevs - $rpc_py save_config -f $tmp_config + $rpc_py save_config > $tmp_config $JSON_DIR/config_filter.py -method "delete_global_parameters" -filename $tmp_config > $last_json_config diff $base_json_config $last_json_config diff $base_bdevs $last_bdevs @@ -184,7 +184,7 @@ function clear_bdev_subsystem_config() { # 8. Delete all files. function test_global_params() { target=$1 - $rpc_py save_config -f $full_config + $rpc_py save_config > $full_config python $JSON_DIR/config_filter.py -method "delete_configs" -filename $full_config > $base_json_config if [ $target == "spdk_tgt" ]; then killprocess $spdk_tgt_pid @@ -196,8 +196,8 @@ function test_global_params() { echo "Target is not specified for test_global_params" return 1 fi - $rpc_py load_config -f $full_config - $rpc_py save_config -f $full_config + $rpc_py load_config < $full_config + $rpc_py save_config > $full_config python $JSON_DIR/config_filter.py -method "delete_configs" -filename $full_config > $last_json_config diff $base_json_config $last_json_config rm $base_json_config $last_json_config diff --git a/test/nvmf/nvmfjson/json_config.sh b/test/nvmf/nvmfjson/json_config.sh index 30354abf3..d2bde33f7 100755 --- a/test/nvmf/nvmfjson/json_config.sh +++ b/test/nvmf/nvmfjson/json_config.sh @@ -13,15 +13,15 @@ function test_subsystems() { $rpc_py start_subsystem_init create_nvmf_subsystem_config - $rpc_py save_config -f $base_nvmf_config + $rpc_py save_config > $base_nvmf_config test_json_config clear_nvmf_subsystem_config kill_targets run_spdk_tgt - $rpc_py load_config -f $base_nvmf_config - $rpc_py save_config -f $last_nvmf_config + $rpc_py load_config < $base_nvmf_config + $rpc_py save_config > $last_nvmf_config diff $base_nvmf_config $last_nvmf_config diff --git a/test/vhost/common/common.sh b/test/vhost/common/common.sh index 27a9c6db5..1ffc1f84e 100644 --- a/test/vhost/common/common.sh +++ b/test/vhost/common/common.sh @@ -184,8 +184,7 @@ function spdk_vhost_run() fi if [[ -n "$vhost_json_path" ]]; then - $SPDK_BUILD_DIR/scripts/rpc.py -s $vhost_dir/rpc.sock load_config\ - --filename "$vhost_json_path/conf.json" + $SPDK_BUILD_DIR/scripts/rpc.py -s $vhost_dir/rpc.sock load_config < "$vhost_json_path/conf.json" fi notice "vhost started - pid=$vhost_pid"