mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 21:34:54 +03:00
storage: add network-dir as new storage volume type
In the 'directory' and 'netfs' storage pools, a user can see both 'file' and 'dir' storage volume types, to know when they can descend into a subdirectory. But in a network-based storage pool, such as the upcoming 'gluster' pool, we use 'network' instead of 'file', and did not have any counterpart for a directory until this patch. Adding a new volume type 'network-dir' is better than reusing 'dir', because it makes it clear that the only way to access 'network' volumes within that container is through the network mounting (leaving 'dir' for something accessible in the local file system). * include/libvirt/libvirt.h.in (virStorageVolType): Expand enum. * docs/formatstorage.html.in: Document it. * docs/schemasa/storagevol.rng (vol): Allow new value. * src/conf/storage_conf.c (virStorageVol): Use new value. * src/qemu/qemu_command.c (qemuBuildVolumeString): Fix client. * src/qemu/qemu_conf.c (qemuTranslateDiskSourcePool): Likewise. * tools/virsh-volume.c (vshVolumeTypeToString): Likewise. * src/storage/storage_backend_fs.c (virStorageBackendFileSystemVolDelete): Likewise. Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
efee1af54a
commit
ecd881b7a7
@ -291,7 +291,7 @@
|
||||
A storage volume will generally be either a file or a device
|
||||
node; <span class="since">since 1.2.0</span>, an optional
|
||||
output-only attribute <code>type</code> lists the actual type
|
||||
(file, block, dir, or network), which is also available
|
||||
(file, block, dir, network, or netdir), which is also available
|
||||
from <code>virStorageVolGetInfo()</code>. The storage volume
|
||||
XML format is available <span class="since">since 0.4.1</span>
|
||||
</p>
|
||||
|
@ -20,6 +20,7 @@
|
||||
<value>block</value>
|
||||
<value>dir</value>
|
||||
<value>network</value>
|
||||
<value>netdir</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
|
@ -2951,6 +2951,8 @@ typedef enum {
|
||||
VIR_STORAGE_VOL_BLOCK = 1, /* Block based volumes */
|
||||
VIR_STORAGE_VOL_DIR = 2, /* Directory-passthrough based volume */
|
||||
VIR_STORAGE_VOL_NETWORK = 3, /* Network volumes like RBD (RADOS Block Device) */
|
||||
VIR_STORAGE_VOL_NETDIR = 4, /* Network accessible directory that can
|
||||
* contain other network volumes */
|
||||
|
||||
#ifdef VIR_ENUM_SENTINELS
|
||||
VIR_STORAGE_VOL_LAST
|
||||
|
@ -53,7 +53,7 @@
|
||||
|
||||
VIR_ENUM_IMPL(virStorageVol,
|
||||
VIR_STORAGE_VOL_LAST,
|
||||
"file", "block", "dir", "network")
|
||||
"file", "block", "dir", "network", "netdir")
|
||||
|
||||
VIR_ENUM_IMPL(virStoragePool,
|
||||
VIR_STORAGE_POOL_LAST,
|
||||
|
@ -3782,7 +3782,7 @@ qemuBuildVolumeString(virConnectPtr conn,
|
||||
{
|
||||
int ret = -1;
|
||||
|
||||
switch (disk->srcpool->voltype) {
|
||||
switch ((virStorageVolType) disk->srcpool->voltype) {
|
||||
case VIR_STORAGE_VOL_DIR:
|
||||
if (!disk->readonly) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
@ -3825,10 +3825,12 @@ qemuBuildVolumeString(virConnectPtr conn,
|
||||
}
|
||||
break;
|
||||
case VIR_STORAGE_VOL_NETWORK:
|
||||
case VIR_STORAGE_VOL_NETDIR:
|
||||
case VIR_STORAGE_VOL_LAST:
|
||||
/* Keep the compiler quiet, qemuTranslateDiskSourcePool already
|
||||
* reported the unsupported error.
|
||||
*/
|
||||
break;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
@ -1332,7 +1332,7 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
switch (info.type) {
|
||||
switch ((virStorageVolType) info.type) {
|
||||
case VIR_STORAGE_VOL_FILE:
|
||||
case VIR_STORAGE_VOL_DIR:
|
||||
if (!(def->src = virStorageVolGetPath(vol)))
|
||||
@ -1377,6 +1377,8 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
|
||||
|
||||
break;
|
||||
case VIR_STORAGE_VOL_NETWORK:
|
||||
case VIR_STORAGE_VOL_NETDIR:
|
||||
case VIR_STORAGE_VOL_LAST:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("Using network volume as disk source is not supported"));
|
||||
goto cleanup;
|
||||
|
@ -1137,7 +1137,7 @@ virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
{
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
switch (vol->type) {
|
||||
switch ((virStorageVolType) vol->type) {
|
||||
case VIR_STORAGE_VOL_FILE:
|
||||
if (unlink(vol->target.path) < 0) {
|
||||
/* Silently ignore failures where the vol has already gone away */
|
||||
@ -1159,7 +1159,8 @@ virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
break;
|
||||
case VIR_STORAGE_VOL_BLOCK:
|
||||
case VIR_STORAGE_VOL_NETWORK:
|
||||
default:
|
||||
case VIR_STORAGE_VOL_NETDIR:
|
||||
case VIR_STORAGE_VOL_LAST:
|
||||
virReportError(VIR_ERR_NO_SUPPORT,
|
||||
_("removing block or network volumes is not supported: %s"),
|
||||
vol->target.path);
|
||||
|
@ -947,7 +947,7 @@ out:
|
||||
static const char *
|
||||
vshVolumeTypeToString(int type)
|
||||
{
|
||||
switch (type) {
|
||||
switch ((virStorageVolType) type) {
|
||||
case VIR_STORAGE_VOL_FILE:
|
||||
return N_("file");
|
||||
|
||||
@ -960,6 +960,9 @@ vshVolumeTypeToString(int type)
|
||||
case VIR_STORAGE_VOL_NETWORK:
|
||||
return N_("network");
|
||||
|
||||
case VIR_STORAGE_VOL_NETDIR:
|
||||
return N_("netdir");
|
||||
|
||||
case VIR_STORAGE_VOL_LAST:
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user