Spdk/doc/jsonrpc_proxy.md
Maciej Szwed 65c1ad0fc3 doc: add remote RPC access description
Signed-off-by: Maciej Szwed <maciej.szwed@intel.com>
Change-Id: I7dfd9ab4826583c6287b0270ecb919d59722c371
Reviewed-on: https://review.gerrithub.io/428007
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2018-10-31 16:49:17 +00:00

2.2 KiB

JSON-RPC Remote access

SPDK provides a sample python script rpc_http_proxy.py, that provides http server which listens for JSON objects from users. It uses HTTP POST method to receive JSON objects including methods and parameters described in this chapter.

Parameters

Name Optional Type Description
server IP Required string IP address that JSON objects shall be received on
server port Required number Port number that JSON objects shall be received on
user name Required string User name that will be used for authentication
password Required string Password that will be used for authentication
RPC listen address Optional string Path to SPDK JSON RPC socket. Default: /var/tmp/spdk.sock

Example usage

spdk/scripts/rpc_http_proxy.py 192.168.0.2 8000 user password

Returns

Error 401 - missing or incorrect user and/or password.

Error 400 - wrong JSON syntax or incorrect JSON method

Status 200 with resultant JSON object included on success.

Client side

Below is a sample python script acting as a client side. It sends get_bdevs method with optional name parameter and prints JSON object returned from remote_rpc script.

import json
import requests

if __name__ == '__main__':
	payload = {'method': 'get_bdevs', 'params': {'name': 'Malloc0'}}
	url = 'http://192.168.0.2:8000/'
	req = requests.post(url,
                        data=json.dumps(payload),
                        auth=('user', 'password'),
                        verify=False,
                        timeout=30)
	print (req.json())

Output:

python client.py
[{u'num_blocks': 2621440, u'name': u'Malloc0', u'uuid': u'fb57e59c-599d-42f1-8b89-3e46dbe12641', u'claimed': True, u'driver_specific': {}, u'supported_io_types': {u'reset': True, u'nvme_admin': False, u'unmap': True, u'read': True, u'nvme_io': False, u'write': True, u'flush': True, u'write_zeroes': True}, u'qos_ios_per_sec': 0, u'block_size': 4096, u'product_name': u'Malloc disk', u'aliases': []}]