storage: Introduce Virtuozzo vstorage backend

Added general definitions for vstorage pool backend including
the build options to add --with-storage-vstorage checking.
In order to use vstorage as a backend for a storage pool
vstorage tools (vstorage and vstorage-mount) need to be installed.

Signed-off-by: Olga Krishtal <okrishtal@virtuozzo.com>
This commit is contained in:
Olga Krishtal 2017-01-17 17:10:55 +03:00 committed by John Ferlan
parent 1452c85fb7
commit e590d5301e
12 changed files with 162 additions and 1 deletions

View File

@ -570,6 +570,7 @@ LIBVIRT_STORAGE_ARG_RBD
LIBVIRT_STORAGE_ARG_SHEEPDOG
LIBVIRT_STORAGE_ARG_GLUSTER
LIBVIRT_STORAGE_ARG_ZFS
LIBVIRT_STORAGE_ARG_VSTORAGE
if test "$with_libvirtd" = "no"; then
with_storage_dir=no
@ -583,6 +584,7 @@ if test "$with_libvirtd" = "no"; then
with_storage_sheepdog=no
with_storage_gluster=no
with_storage_zfs=no
with_storage_vstorage=no
fi
dnl storage-fs does not work on MacOS X
@ -602,6 +604,7 @@ LIBVIRT_STORAGE_CHECK_RBD
LIBVIRT_STORAGE_CHECK_SHEEPDOG
LIBVIRT_STORAGE_CHECK_GLUSTER
LIBVIRT_STORAGE_CHECK_ZFS
LIBVIRT_STORAGE_CHECK_VSTORAGE
with_storage=no
for backend in dir fs lvm iscsi scsi mpath rbd disk; do
@ -935,6 +938,7 @@ LIBVIRT_STORAGE_RESULT_RBD
LIBVIRT_STORAGE_RESULT_SHEEPDOG
LIBVIRT_STORAGE_RESULT_GLUSTER
LIBVIRT_STORAGE_RESULT_ZFS
LIBVIRT_STORAGE_RESULT_VSTORAGE
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Security Drivers])
AC_MSG_NOTICE([])

View File

@ -240,6 +240,7 @@ typedef enum {
VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG = 1 << 15,
VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER = 1 << 16,
VIR_CONNECT_LIST_STORAGE_POOLS_ZFS = 1 << 17,
VIR_CONNECT_LIST_STORAGE_POOLS_VSTORAGE = 1 << 18,
} virConnectListAllStoragePoolsFlags;
int virConnectListAllStoragePools(virConnectPtr conn,

View File

@ -0,0 +1,73 @@
dnl The storage vstorage check
dnl
dnl Copyright (C) 2016 Parallels IP Holdings GmbH, Inc.
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
dnl License as published by the Free Software Foundation; either
dnl version 2.1 of the License, or (at your option) any later version.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Lesser General Public License for more details.
dnl
dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library. If not, see
dnl <http://www.gnu.org/licenses/>.
dnl
AC_DEFUN([LIBVIRT_STORAGE_ARG_VSTORAGE], [
LIBVIRT_ARG_WITH_FEATURE([STORAGE_VSTORAGE],
[Virtuozzo Storage backend for the storage driver],
[check])
])
AC_DEFUN([LIBVIRT_STORAGE_CHECK_VSTORAGE], [
if test "$with_storage_vstorage" = "yes" ||
test "$with_storage_vstorage" = "check"; then
AC_PATH_PROG([VSTORAGE], [vstorage], [], [$LIBVIRT_SBIN_PATH])
AC_PATH_PROG([VSTORAGE_MOUNT], [vstorage-mount], [], [$LIBVIRT_SBIN_PATH])
AC_PATH_PROG([UMOUNT], [umount], [], [$LIBVIRT_SBIN_PATH])
if test "$with_storage_vstorage" = "yes"; then
if test -z "$VSTORAGE" || test -z "$VSTORAGE_MOUNT"; then
AC_MSG_ERROR([We need vstorage and vstorage-mount tool for Vstorage storage driver]);
fi
if test -z "$UMOUNT" ; then
AC_MSG_ERROR([We need umount for Vstorage storage driver]);
fi
else
if test -z "$VSTORAGE" ; then
with_storage_vstorage=no
fi
if test -z "$VSTORAGE_MOUNT" ; then
with_storage_vstorage=no
fi
if test -z "$UMOUNT" ; then
with_storage_vstorage=no
fi
if test "$with_storage_fs" = "check" ; then
with_storage_vstorage=yes
fi
fi
if test "$with_storage_vstorage" = "yes" ; then
AC_DEFINE_UNQUOTED([WITH_STORAGE_VSTORAGE], 1,
[whether Vstorage backend for storage driver is enabled])
AC_DEFINE_UNQUOTED([VSTORAGE], ["$VSTORAGE"],
[Location or name of the vstorage client tool])
AC_DEFINE_UNQUOTED([VSTORAGE_MOUNT], ["$VSTORAGE_MOUNT"],
[Location or name of the vstorage mount tool])
AC_DEFINE_UNQUOTED([UMOUNT], ["$UMOUNT"],
[Location or name of the umount programm])
fi
fi
AM_CONDITIONAL([WITH_STORAGE_VSTORAGE], [test "$with_storage_vstorage" = "yes"])
])
AC_DEFUN([LIBVIRT_STORAGE_RESULT_VSTORAGE], [
LIBVIRT_RESULT([Virtuozzo storage], [$with_storage_vstorage])
])

View File

@ -1007,6 +1007,10 @@ STORAGE_DRIVER_GLUSTER_SOURCES = \
STORAGE_DRIVER_ZFS_SOURCES = \
storage/storage_backend_zfs.h storage/storage_backend_zfs.c
STORAGE_DRIVER_VSTORAGE_SOURCES = \
storage/storage_backend_vstorage.h \
storage/storage_backend_vstorage.c
STORAGE_HELPER_DISK_SOURCES = \
storage/parthelper.c
@ -1714,6 +1718,10 @@ if WITH_STORAGE_ZFS
libvirt_driver_storage_impl_la_SOURCES += $(STORAGE_DRIVER_ZFS_SOURCES)
endif WITH_STORAGE_ZFS
if WITH_STORAGE_VSTORAGE
libvirt_driver_storage_impl_la_SOURCES += $(STORAGE_DRIVER_VSTORAGE_SOURCES)
endif WITH_STORAGE_VSTORAGE
if WITH_NODE_DEVICES
# Needed to keep automake quiet about conditionals
if WITH_DRIVER_MODULES
@ -1925,6 +1933,7 @@ EXTRA_DIST += \
$(STORAGE_DRIVER_SHEEPDOG_SOURCES) \
$(STORAGE_DRIVER_GLUSTER_SOURCES) \
$(STORAGE_DRIVER_ZFS_SOURCES) \
$(STORAGE_DRIVER_VSTORAGE_SOURCES) \
$(NODE_DEVICE_DRIVER_SOURCES) \
$(NODE_DEVICE_DRIVER_HAL_SOURCES) \
$(NODE_DEVICE_DRIVER_UDEV_SOURCES) \

View File

@ -60,7 +60,8 @@ VIR_ENUM_IMPL(virStoragePool,
"dir", "fs", "netfs",
"logical", "disk", "iscsi",
"scsi", "mpath", "rbd",
"sheepdog", "gluster", "zfs")
"sheepdog", "gluster", "zfs",
"vstorage")
VIR_ENUM_IMPL(virStoragePoolFormatFileSystem,
VIR_STORAGE_POOL_FS_LAST,
@ -274,6 +275,16 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
.defaultFormat = VIR_STORAGE_FILE_RAW,
},
},
{.poolType = VIR_STORAGE_POOL_VSTORAGE,
.poolOptions = {
.flags = VIR_STORAGE_POOL_SOURCE_NAME,
},
.volOptions = {
.defaultFormat = VIR_STORAGE_FILE_RAW,
.formatFromString = virStorageVolumeFormatFromString,
.formatToString = virStorageFileFormatTypeToString,
},
},
};
@ -2611,6 +2622,10 @@ virStoragePoolSourceFindDuplicate(virConnectPtr conn,
/* Only one mpath pool is valid per host */
matchpool = pool;
break;
case VIR_STORAGE_POOL_VSTORAGE:
if (STREQ(pool->def->source.name, def->source.name))
matchpool = pool;
break;
case VIR_STORAGE_POOL_RBD:
case VIR_STORAGE_POOL_LAST:
break;

View File

@ -95,6 +95,7 @@ typedef enum {
VIR_STORAGE_POOL_SHEEPDOG, /* Sheepdog device */
VIR_STORAGE_POOL_GLUSTER, /* Gluster device */
VIR_STORAGE_POOL_ZFS, /* ZFS */
VIR_STORAGE_POOL_VSTORAGE, /* Virtuozzo Storage */
VIR_STORAGE_POOL_LAST,
} virStoragePoolType;

View File

@ -64,6 +64,9 @@
#if WITH_STORAGE_ZFS
# include "storage_backend_zfs.h"
#endif
#if WITH_STORAGE_VSTORAGE
# include "storage_backend_vstorage.h"
#endif
#define VIR_FROM_THIS VIR_FROM_STORAGE
@ -103,6 +106,9 @@ static virStorageBackendPtr backends[] = {
#endif
#if WITH_STORAGE_ZFS
&virStorageBackendZFS,
#endif
#if WITH_STORAGE_VSTORAGE
&virStorageBackendVstorage,
#endif
NULL
};

View File

@ -0,0 +1,16 @@
#include <config.h>
#include "viralloc.h"
#include "virerror.h"
#include "virfile.h"
#include "storage_backend_vstorage.h"
#include "virlog.h"
#include "virstring.h"
#define VIR_FROM_THIS VIR_FROM_STORAGE
VIR_LOG_INIT("storage.storage_backend_vstorage");
virStorageBackend virStorageBackendVstorage = {
.type = VIR_STORAGE_POOL_VSTORAGE,
};

View File

@ -0,0 +1,28 @@
/*
* storage_backend_vstorage.h: storage backend for Virtuozzo storage
* handling
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#ifndef __VIR_STORAGE_BACKEND_VSTORAGE_H__
# define __VIR_STORAGE_BACKEND_VSTORAGE_H__
# include "storage_backend.h"
extern virStorageBackend virStorageBackendVstorage;
#endif /* __VIR_STORAGE_BACKEND_VSTORAGE_H__ */

View File

@ -1619,6 +1619,7 @@ storageVolLookupByPath(virConnectPtr conn,
case VIR_STORAGE_POOL_ISCSI:
case VIR_STORAGE_POOL_SCSI:
case VIR_STORAGE_POOL_MPATH:
case VIR_STORAGE_POOL_VSTORAGE:
stable_path = virStorageBackendStablePath(pool,
cleanpath,
false);
@ -3502,6 +3503,7 @@ virStorageTranslateDiskSourcePool(virConnectPtr conn,
case VIR_STORAGE_POOL_DISK:
case VIR_STORAGE_POOL_SCSI:
case VIR_STORAGE_POOL_ZFS:
case VIR_STORAGE_POOL_VSTORAGE:
if (!(def->src->path = virStorageVolGetPath(vol)))
goto cleanup;

View File

@ -1185,6 +1185,9 @@ cmdPoolList(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
case VIR_STORAGE_POOL_ZFS:
flags |= VIR_CONNECT_LIST_STORAGE_POOLS_ZFS;
break;
case VIR_STORAGE_POOL_VSTORAGE:
flags |= VIR_CONNECT_LIST_STORAGE_POOLS_VSTORAGE;
break;
case VIR_STORAGE_POOL_LAST:
break;
}

View File

@ -647,6 +647,9 @@ virshShowVersion(vshControl *ctl ATTRIBUTE_UNUSED)
#endif
#ifdef WITH_STORAGE_ZFS
vshPrint(ctl, " ZFS");
#endif
#ifdef WITH_STORAGE_VSTORAGE
vshPrint(ctl, "Virtuozzo Storage");
#endif
vshPrint(ctl, "\n");