lib/nvmf: Add nvmf_destroy_target rpc
Change-Id: I048793d32dcd19a5723dedec96fade9e7a889e3b Signed-off-by: Seth Howell <seth.howell@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/468390 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Alexey Marchuk <alexeymar@mellanox.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
c9b89ef128
commit
099489b207
@ -3691,6 +3691,41 @@ Example response:
|
|||||||
}
|
}
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
## nvmf_delete_target method {#rpc_nvmf_delete_target}
|
||||||
|
|
||||||
|
Destroy the given NVMe-oF target.
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
Name | Optional | Type | Description
|
||||||
|
--------------------------- | -------- | ------------| -----------
|
||||||
|
name | Required | string | Target name (must be unique to application)
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
Example request:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "nvmf_delete_target",
|
||||||
|
"id": 1,
|
||||||
|
"params": {
|
||||||
|
"name": "old_tgt",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Example response:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1,
|
||||||
|
"result": true
|
||||||
|
}
|
||||||
|
~~~
|
||||||
|
|
||||||
## nvmf_create_transport method {#rpc_nvmf_create_transport}
|
## nvmf_create_transport method {#rpc_nvmf_create_transport}
|
||||||
|
|
||||||
Initialize an NVMe-oF transport with the given options.
|
Initialize an NVMe-oF transport with the given options.
|
||||||
|
@ -1452,6 +1452,52 @@ spdk_rpc_nvmf_create_target(struct spdk_jsonrpc_request *request,
|
|||||||
}
|
}
|
||||||
SPDK_RPC_REGISTER("nvmf_create_target", spdk_rpc_nvmf_create_target, SPDK_RPC_RUNTIME);
|
SPDK_RPC_REGISTER("nvmf_create_target", spdk_rpc_nvmf_create_target, SPDK_RPC_RUNTIME);
|
||||||
|
|
||||||
|
static const struct spdk_json_object_decoder nvmf_rpc_destroy_target_decoder[] = {
|
||||||
|
{"name", offsetof(struct nvmf_rpc_target_ctx, name), spdk_json_decode_string},
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
nvmf_rpc_destroy_target_done(void *ctx, int status)
|
||||||
|
{
|
||||||
|
struct spdk_jsonrpc_request *request = ctx;
|
||||||
|
struct spdk_json_write_ctx *w;
|
||||||
|
|
||||||
|
w = spdk_jsonrpc_begin_result(request);
|
||||||
|
spdk_json_write_bool(w, true);
|
||||||
|
spdk_jsonrpc_end_result(request, w);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
spdk_rpc_nvmf_delete_target(struct spdk_jsonrpc_request *request,
|
||||||
|
const struct spdk_json_val *params)
|
||||||
|
{
|
||||||
|
struct nvmf_rpc_target_ctx ctx = {0};
|
||||||
|
struct spdk_nvmf_tgt *tgt;
|
||||||
|
|
||||||
|
/* Decode parameters the first time to get the transport type */
|
||||||
|
if (spdk_json_decode_object(params, nvmf_rpc_destroy_target_decoder,
|
||||||
|
SPDK_COUNTOF(nvmf_rpc_destroy_target_decoder),
|
||||||
|
&ctx)) {
|
||||||
|
SPDK_ERRLOG("spdk_json_decode_object failed\n");
|
||||||
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, "Invalid parameters");
|
||||||
|
free(ctx.name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tgt = spdk_nvmf_get_tgt(ctx.name);
|
||||||
|
|
||||||
|
if (tgt == NULL) {
|
||||||
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||||
|
"The specified target doesn't exist, cannot delete it.");
|
||||||
|
free(ctx.name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
spdk_nvmf_tgt_destroy(tgt, nvmf_rpc_destroy_target_done, request);
|
||||||
|
free(ctx.name);
|
||||||
|
}
|
||||||
|
SPDK_RPC_REGISTER("nvmf_delete_target", spdk_rpc_nvmf_delete_target, SPDK_RPC_RUNTIME);
|
||||||
|
|
||||||
struct nvmf_rpc_create_transport_ctx {
|
struct nvmf_rpc_create_transport_ctx {
|
||||||
char *trtype;
|
char *trtype;
|
||||||
char *tgt_name;
|
char *tgt_name;
|
||||||
|
@ -1568,6 +1568,14 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
|
|||||||
type=int, required=False)
|
type=int, required=False)
|
||||||
p.set_defaults(func=nvmf_create_target)
|
p.set_defaults(func=nvmf_create_target)
|
||||||
|
|
||||||
|
def nvmf_delete_target(args):
|
||||||
|
print_dict(rpc.nvmf.nvmf_delete_target(args.client,
|
||||||
|
name=args.name))
|
||||||
|
|
||||||
|
p = subparsers.add_parser('nvmf_delete_target', help='Destroy the given NVMe-oF Target')
|
||||||
|
p.add_argument('-n', '--name', help='Target name (unique to application)', type=str, required=True)
|
||||||
|
p.set_defaults(func=nvmf_delete_target)
|
||||||
|
|
||||||
def nvmf_create_transport(args):
|
def nvmf_create_transport(args):
|
||||||
rpc.nvmf.nvmf_create_transport(args.client,
|
rpc.nvmf.nvmf_create_transport(args.client,
|
||||||
trtype=args.trtype,
|
trtype=args.trtype,
|
||||||
|
@ -54,6 +54,22 @@ def nvmf_create_target(client,
|
|||||||
return client.call("nvmf_create_target", params)
|
return client.call("nvmf_create_target", params)
|
||||||
|
|
||||||
|
|
||||||
|
def nvmf_delete_target(client,
|
||||||
|
name):
|
||||||
|
"""Destroy an NVMe-oF Target.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
name: The name of the target you wish to destroy
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True on success or False
|
||||||
|
"""
|
||||||
|
params = {}
|
||||||
|
|
||||||
|
params['name'] = name
|
||||||
|
return client.call("nvmf_delete_target", params)
|
||||||
|
|
||||||
|
|
||||||
def nvmf_create_transport(client,
|
def nvmf_create_transport(client,
|
||||||
trtype,
|
trtype,
|
||||||
tgt_name=None,
|
tgt_name=None,
|
||||||
|
Loading…
Reference in New Issue
Block a user