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}
|
||||
|
||||
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);
|
||||
|
||||
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 {
|
||||
char *trtype;
|
||||
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)
|
||||
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):
|
||||
rpc.nvmf.nvmf_create_transport(args.client,
|
||||
trtype=args.trtype,
|
||||
|
@ -54,6 +54,22 @@ def nvmf_create_target(client,
|
||||
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,
|
||||
trtype,
|
||||
tgt_name=None,
|
||||
|
Loading…
Reference in New Issue
Block a user