test/vhost: load json configuration to vhost in spdk_vhost_run.
Json configuration can be loaded by adding parameter --json-path=PATH. Also spdk_vhost_run can be launched without initial config file. New JSON RPC call "load_subsystem_config" for loading subsystem config. Change-Id: I4e71da99ea574484cba7e0d29b87cbc0b41e5ce6 Signed-off-by: Pawel Niedzwiecki <pawelx.niedzwiecki@intel.com> Reviewed-on: https://review.gerrithub.io/411460 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
bc8f2cd90f
commit
43c5429d6f
@ -5,11 +5,42 @@ set -e
|
||||
rootdir=$(readlink -f $(dirname $0))/..
|
||||
source "$rootdir/scripts/common.sh"
|
||||
|
||||
bdfs=$(iter_pci_class_code 01 08 02)
|
||||
bdfs=($(iter_pci_class_code 01 08 02))
|
||||
function create_classic_config()
|
||||
{
|
||||
echo "[Nvme]"
|
||||
for (( i=0; i < ${#bdfs[@]}; i++))
|
||||
do
|
||||
echo " TransportID \"trtype:PCIe traddr:${bdfs[i]}\" Nvme$i"
|
||||
done
|
||||
}
|
||||
|
||||
echo "[Nvme]"
|
||||
i=0
|
||||
for bdf in $bdfs; do
|
||||
echo " TransportID \"trtype:PCIe traddr:$bdf\" Nvme$i"
|
||||
let i=i+1
|
||||
done
|
||||
function create_json_config()
|
||||
{
|
||||
echo "{"
|
||||
echo '"subsystem": "bdev",'
|
||||
echo '"config": ['
|
||||
for (( i=0; i < ${#bdfs[@]}; i++))
|
||||
do
|
||||
echo '{'
|
||||
echo '"params": {'
|
||||
echo '"trtype": "PCIe",'
|
||||
echo "\"name\": \"Nvme$i\","
|
||||
echo "\"traddr\": \"${bdfs[i]}\""
|
||||
echo '},'
|
||||
echo '"method": "construct_nvme_bdev"'
|
||||
if [ -z ${bdfs[i+1]} ]; then
|
||||
echo '}'
|
||||
else
|
||||
echo '},'
|
||||
fi
|
||||
done
|
||||
echo ']'
|
||||
echo '}'
|
||||
}
|
||||
|
||||
if [ "$1" = "--json" ]; then
|
||||
create_json_config
|
||||
else
|
||||
create_classic_config
|
||||
fi
|
||||
|
@ -75,6 +75,15 @@ if __name__ == "__main__":
|
||||
p.add_argument('-f', '--filename', help="""JSON Configuration file.""")
|
||||
p.set_defaults(func=load_config)
|
||||
|
||||
@call_cmd
|
||||
def load_subsystem_config(args):
|
||||
rpc.load_subsystem_config(args.client, args)
|
||||
|
||||
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('--filename', help="""JSON Configuration file.""")
|
||||
p.set_defaults(func=load_subsystem_config)
|
||||
|
||||
# app
|
||||
@call_cmd
|
||||
def kill_instance(args):
|
||||
|
@ -90,3 +90,16 @@ def load_config(client, args):
|
||||
|
||||
if subsystems and not allowed_found:
|
||||
raise JSONRPCException("Some config left but did not found any allowed method to execute")
|
||||
|
||||
|
||||
def load_subsystem_config(client, args):
|
||||
if not args.filename or args.filename == '-':
|
||||
config = json.load(sys.stdin)
|
||||
else:
|
||||
with open(args.filename, 'r') as file:
|
||||
config = json.load(file)
|
||||
|
||||
for elem in config['config']:
|
||||
if not elem or 'method' not in elem:
|
||||
continue
|
||||
client.call(elem['method'], elem['params'])
|
||||
|
@ -121,6 +121,7 @@ function spdk_vhost_run()
|
||||
assert_number "$vhost_num"
|
||||
;;
|
||||
--conf-path=*) local vhost_conf_path="${param#*=}" ;;
|
||||
--json-path=*) local vhost_json_path="${param#*=}" ;;
|
||||
--memory=*) local memory=${param#*=} ;;
|
||||
*)
|
||||
error "Invalid parameter '$param'"
|
||||
@ -130,10 +131,6 @@ function spdk_vhost_run()
|
||||
done
|
||||
|
||||
local vhost_dir="$(get_vhost_dir $vhost_num)"
|
||||
if [[ -z "$vhost_conf_path" ]]; then
|
||||
error "Missing mandatory parameter '--conf-path'"
|
||||
return 1
|
||||
fi
|
||||
local vhost_app="$SPDK_BUILD_DIR/app/vhost/vhost"
|
||||
local vhost_log_file="$vhost_dir/vhost.log"
|
||||
local vhost_pid_file="$vhost_dir/vhost.pid"
|
||||
@ -161,13 +158,14 @@ function spdk_vhost_run()
|
||||
return 1
|
||||
fi
|
||||
|
||||
cp $vhost_conf_template $vhost_conf_file
|
||||
$SPDK_BUILD_DIR/scripts/gen_nvme.sh >> $vhost_conf_file
|
||||
|
||||
local cmd="$vhost_app -m $reactor_mask -p $master_core -c $vhost_conf_file -s $memory -r $vhost_dir/rpc.sock"
|
||||
local cmd="$vhost_app -m $reactor_mask -p $master_core -s $memory -r $vhost_dir/rpc.sock"
|
||||
if [[ -n "$vhost_conf_path" ]]; then
|
||||
cp $vhost_conf_template $vhost_conf_file
|
||||
$SPDK_BUILD_DIR/scripts/gen_nvme.sh >> $vhost_conf_file
|
||||
cmd="$vhost_app -m $reactor_mask -p $master_core -c $vhost_conf_file -s $memory -r $vhost_dir/rpc.sock"
|
||||
fi
|
||||
|
||||
notice "Loging to: $vhost_log_file"
|
||||
notice "Config file: $vhost_conf_file"
|
||||
notice "Socket: $vhost_socket"
|
||||
notice "Command: $cmd"
|
||||
|
||||
@ -178,10 +176,20 @@ function spdk_vhost_run()
|
||||
|
||||
notice "waiting for app to run..."
|
||||
waitforlisten "$vhost_pid" "$vhost_dir/rpc.sock"
|
||||
if [[ -z "$vhost_conf_path" ]]; then
|
||||
$SPDK_BUILD_DIR/scripts/gen_nvme.sh "--json" | $SPDK_BUILD_DIR/scripts/rpc.py\
|
||||
-s $vhost_dir/rpc.sock load_subsystem_config
|
||||
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"
|
||||
fi
|
||||
|
||||
notice "vhost started - pid=$vhost_pid"
|
||||
timing_exit vhost_start
|
||||
|
||||
rm $vhost_conf_file
|
||||
rm -f $vhost_conf_file
|
||||
}
|
||||
|
||||
function spdk_vhost_kill()
|
||||
|
Loading…
Reference in New Issue
Block a user