mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
util: virstoragefile: Add 'json:' pseudo-protocol parser for 'nfs' protocol
Enable parsing of backing store strings containing the native 'nfs' protocol specification. Signed-off-by: Ryan Gahagan <rgahagan@cs.utexas.edu> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
c7570bbef8
commit
0f1f3f1228
@ -3652,6 +3652,54 @@ virStorageSourceParseBackingJSONVxHS(virStorageSourcePtr src,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
virStorageSourceParseBackingJSONNFS(virStorageSourcePtr src,
|
||||||
|
virJSONValuePtr json,
|
||||||
|
const char *jsonstr G_GNUC_UNUSED,
|
||||||
|
int opaque G_GNUC_UNUSED)
|
||||||
|
{
|
||||||
|
virJSONValuePtr server = virJSONValueObjectGetObject(json, "server");
|
||||||
|
int uidStore = -1;
|
||||||
|
int gidStore = -1;
|
||||||
|
int gotUID = virJSONValueObjectGetNumberInt(json, "user", &uidStore);
|
||||||
|
int gotGID = virJSONValueObjectGetNumberInt(json, "group", &gidStore);
|
||||||
|
|
||||||
|
if (!server) {
|
||||||
|
virReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||||
|
_("missing 'server' attribute in JSON backing definition for NFS volume"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gotUID < 0 || gotGID < 0) {
|
||||||
|
virReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||||
|
_("missing 'user' or 'group' attribute in JSON backing definition for NFS volume"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
src->path = g_strdup(virJSONValueObjectGetString(json, "path"));
|
||||||
|
if (!src->path) {
|
||||||
|
virReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||||
|
_("missing 'path' attribute in JSON backing definition for NFS volume"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
src->nfs_user = g_strdup_printf("+%d", uidStore);
|
||||||
|
src->nfs_group = g_strdup_printf("+%d", gidStore);
|
||||||
|
|
||||||
|
src->type = VIR_STORAGE_TYPE_NETWORK;
|
||||||
|
src->protocol = VIR_STORAGE_NET_PROTOCOL_NFS;
|
||||||
|
|
||||||
|
src->hosts = g_new0(virStorageNetHostDef, 1);
|
||||||
|
src->nhosts = 1;
|
||||||
|
|
||||||
|
if (virStorageSourceParseBackingJSONInetSocketAddress(src->hosts,
|
||||||
|
server) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virStorageSourceParseBackingJSONNVMe(virStorageSourcePtr src,
|
virStorageSourceParseBackingJSONNVMe(virStorageSourcePtr src,
|
||||||
virJSONValuePtr json,
|
virJSONValuePtr json,
|
||||||
@ -3711,6 +3759,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = {
|
|||||||
{"ssh", false, virStorageSourceParseBackingJSONSSH, 0},
|
{"ssh", false, virStorageSourceParseBackingJSONSSH, 0},
|
||||||
{"rbd", false, virStorageSourceParseBackingJSONRBD, 0},
|
{"rbd", false, virStorageSourceParseBackingJSONRBD, 0},
|
||||||
{"raw", true, virStorageSourceParseBackingJSONRaw, 0},
|
{"raw", true, virStorageSourceParseBackingJSONRaw, 0},
|
||||||
|
{"nfs", false, virStorageSourceParseBackingJSONNFS, 0},
|
||||||
{"vxhs", false, virStorageSourceParseBackingJSONVxHS, 0},
|
{"vxhs", false, virStorageSourceParseBackingJSONVxHS, 0},
|
||||||
{"nvme", false, virStorageSourceParseBackingJSONNVMe, 0},
|
{"nvme", false, virStorageSourceParseBackingJSONNVMe, 0},
|
||||||
};
|
};
|
||||||
|
@ -1624,6 +1624,19 @@ mymain(void)
|
|||||||
"<source protocol='vxhs' name='c6718f6b-0401-441d-a8c3-1f0064d75ee0'>\n"
|
"<source protocol='vxhs' name='c6718f6b-0401-441d-a8c3-1f0064d75ee0'>\n"
|
||||||
" <host name='example.com' port='9999'/>\n"
|
" <host name='example.com' port='9999'/>\n"
|
||||||
"</source>\n");
|
"</source>\n");
|
||||||
|
TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"nfs\","
|
||||||
|
"\"user\":2,"
|
||||||
|
"\"group\":9,"
|
||||||
|
"\"path\":\"/foo/bar/baz\","
|
||||||
|
"\"server\": { \"host\":\"example.com\","
|
||||||
|
"\"type\":\"inet\""
|
||||||
|
"}"
|
||||||
|
"}"
|
||||||
|
"}",
|
||||||
|
"<source protocol='nfs' name='/foo/bar/baz'>\n"
|
||||||
|
" <host name='example.com'/>\n"
|
||||||
|
" <identity user='+2' group='+9'/>\n"
|
||||||
|
"</source>\n");
|
||||||
TEST_BACKING_PARSE_FULL("json:{ \"driver\": \"raw\","
|
TEST_BACKING_PARSE_FULL("json:{ \"driver\": \"raw\","
|
||||||
"\"offset\": 10752,"
|
"\"offset\": 10752,"
|
||||||
"\"size\": 4063232,"
|
"\"size\": 4063232,"
|
||||||
|
Loading…
Reference in New Issue
Block a user