]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
storage: Introduce Virtuozzo vstorage backend
authorOlga Krishtal <okrishtal@virtuozzo.com>
Tue, 17 Jan 2017 14:10:55 +0000 (17:10 +0300)
committerJohn Ferlan <jferlan@redhat.com>
Thu, 26 Jan 2017 15:43:42 +0000 (10:43 -0500)
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>
12 files changed:
configure.ac
include/libvirt/libvirt-storage.h
m4/virt-storage-vstorage.m4 [new file with mode: 0644]
src/Makefile.am
src/conf/storage_conf.c
src/conf/storage_conf.h
src/storage/storage_backend.c
src/storage/storage_backend_vstorage.c [new file with mode: 0644]
src/storage/storage_backend_vstorage.h [new file with mode: 0644]
src/storage/storage_driver.c
tools/virsh-pool.c
tools/virsh.c

index 7efaddb1bfe67c768501c337175580979468b83f..a995a05a6d7f783cb0505f4050dbb3aa63e6dd96 100644 (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([])
index 8a861e4340521476d5bf084e24f8e581f9ed0bd1..45ec72065620e589a305ca0ad972c8680e4b45a9 100644 (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,
diff --git a/m4/virt-storage-vstorage.m4 b/m4/virt-storage-vstorage.m4
new file mode 100644 (file)
index 0000000..8a926c8
--- /dev/null
@@ -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])
+])
index dc26ddf53c4e9db366286bbb06a7ee87bbd4825a..2f32d41979a30150a21af22e04cb3a65f85b12dd 100644 (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)              \
index c53f08046db9935e2f909129fbfbbd847f3f67a0..c9b93aab752fade568f935c477172dbbe6516f7e 100644 (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;
index b35471d988d48da5568471dfd9bb0d7a4d9cea36..e952f5f40e0d24476db80ed40044942340ed8a9f 100644 (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;
index 92b08a2b4a91c6fb69adc10649a0734591005ad2..500d7567dd1631dd5a1dff47a752a8f7801c89c6 100644 (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
 };
diff --git a/src/storage/storage_backend_vstorage.c b/src/storage/storage_backend_vstorage.c
new file mode 100644 (file)
index 0000000..3a57385
--- /dev/null
@@ -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,
+};
diff --git a/src/storage/storage_backend_vstorage.h b/src/storage/storage_backend_vstorage.h
new file mode 100644 (file)
index 0000000..262e454
--- /dev/null
@@ -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__ */
index a52eae3e20b304f0516f4569952fee28a13860ac..ed4772ad9700cea82a11c1d7f48ecb7d6ec4a2aa 100644 (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;
 
index d50ae2a692104078748eab2a76ae618874f6a218..ba9281fbb914e4648bc8b5481214a7877326d174 100644 (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;
             }
index 1068447d663f1a971ec32eb7ae92c652123655bb..7eb51ab7dc40c93202cb101fc2c3b7bfd6979734 100644 (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");