On Fri, Aug 19, 2016 at 06:03:29PM +0300, Olga Krishtal wrote:
API follows the API of storage pools closely in parts which
do not differ for filesystems.
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy(a)virtuozzo.com>
---
include/libvirt/libvirt-fs.h | 273 +++++++++++++++++++++++++++++++++++++++++++
include/libvirt/libvirt.h | 1 +
2 files changed, 274 insertions(+)
create mode 100644 include/libvirt/libvirt-fs.h
diff --git a/include/libvirt/libvirt-fs.h b/include/libvirt/libvirt-fs.h
new file mode 100644
index 0000000..4385220
--- /dev/null
+++ b/include/libvirt/libvirt-fs.h
+typedef enum {
+ VIR_FS_POOL_CREATE_NORMAL = 0,
+
+ /* Create the fspool and perform fspool build without any flags */
+ VIR_FS_POOL_CREATE_WITH_BUILD = 1 << 0,
+
+ /* Create the fspool and perform fspool build using the
+ * exclusive to VIR_FS_POOL_CREATE_WITH_BUILD_NO_OVERWRITE */
+ VIR_FS_POOL_CREATE_WITH_BUILD_OVERWRITE = 1 << 1,
+
+ /* Create the pool and perform pool build using the
+ * VIR_FS_POOL_BUILD_NO_OVERWRITE flag. This is mutually
+ * exclusive to VIR_FS_POOL_CREATE_WITH_BUILD_OVERWRITE */
+ VIR_FS_POOL_CREATE_WITH_BUILD_NO_OVERWRITE = 1 << 2,
+} virFsPoolCreateFlags;
nitpick, I suggest we use virFSPool, not virFsPool, since 'fs'
is an abbreviation and thus normal to capitalize both parts.
+
+typedef enum {
+ VIR_FS_POOL_BUILD_NEW = 0, /* Regular build from scratch */
+ VIR_FS_POOL_BUILD_NO_OVERWRITE = (1 << 2), /* Do not overwrite existing pool
*/
+ VIR_FS_POOL_BUILD_OVERWRITE = (1 << 3), /* Overwrite data */
+} virFsPoolBuildFlags;
+
+/**
+ * virFsPool:
+ *
+ * a virFsPool is a private structure representing a fspool
+ */
+typedef struct _virFsPool virFsPool;
+
+/**
+ * virFsPoolPtr:
+ *
+ * a virFSPoolPtr is pointer to a virFsPool private structure, this is the
+ * type used to reference a fspool in the API.
+ */
+typedef virFsPool *virFsPoolPtr;
+
+typedef enum {
+ VIR_FS_POOL_INACTIVE = 0,
+ VIR_FS_POOL_BUILDING = 1,
+ VIR_FS_POOL_RUNNING = 2,
+
+# ifdef VIR_ENUM_SENTINELS
+ VIR_FS_POOL_STATE_LAST
+# endif
+} virFsPoolState;
+
+typedef struct _virFsPoolInfo virFsPoolInfo;
+
+struct _virFsPoolInfo {
+ int state; /* virFsPoolState flags */
+ unsigned long long capacity; /* Logical size bytes */
+ unsigned long long allocation; /* Current allocation bytes */
+ unsigned long long available; /* Remaining free space bytes */
+};
+
+typedef virFsPoolInfo *virFsPoolInfoPtr;
+
+/**
+ * virFsItem:
+ *
+ * a virFsItem is a private structure representing a fspool item
+ */
+typedef struct _virFsItem virFsItem;
+
+/**
+ * virFsItemPtr:
+ *
+ * a virFsItemPtr is pointer to a virFsItem private structure, this is the
+ * type used to reference a fspool item in the API.
+ */
+typedef virFsItem *virFsItemPtr;
+
+typedef struct _virFsItemInfo virFsItemInfo;
+
+typedef enum {
+ VIR_FS_ITEM_DIR = 0,
+ VIR_FS_ITEM_LAST
+} virFsItemType;
+
+struct _virFsItemInfo {
+ int type; /* virFsItemType flags */
+ unsigned long long capacity; /* Logical size bytes */
+ unsigned long long allocation; /* Current allocation bytes */
+};
+
+typedef virFsItemInfo *virFsItemInfoPtr;
+/*
+ * Get connection from fspool.
+ */
+virConnectPtr virFsPoolGetConnect (virFsPoolPtr fsool);
No need to copy the crazy whitespace we have in other headers - a single
' ' between return value and function name, is fine and no space at all
between function name and '('
+
+/*
+ * List active fspools
+ */
+int virConnectNumOfFsPools (virConnectPtr conn);
+int virConnectListFsPools (virConnectPtr conn,
+ char **const names,
+ int maxnames);
+
+/*
+ * List inactive fspools
+ */
+int virConnectNumOfDefinedFsPools(virConnectPtr conn);
+int virConnectListDefinedFsPools(virConnectPtr conn,
+ char **const names,
+ int maxnames);
The 4 apis follow our old model for listing objects which we discourage
apps from using since they require O(N) API calls and have a designed
in race condition.
So, I suggest just skip these 4 APis and exclusively rely on
the virConnectListAllFsPools API, as we have no need for back
compat with old apps for this new stuff.
+
+/*
+ * virConnectListAllFsPoolsFlags:
+ *
+ * Flags used to tune fspools returned by virConnectListAllFsPools().
+ * Note that these flags come in groups; if all bits from a group are 0,
+ * then that group is not used to filter results.
+ */
+typedef enum {
+ VIR_CONNECT_LIST_FS_POOLS_INACTIVE = 1 << 0,
+ VIR_CONNECT_LIST_FS_POOLS_ACTIVE = 1 << 1,
+
+ VIR_CONNECT_LIST_FS_POOLS_PERSISTENT = 1 << 2,
+ VIR_CONNECT_LIST_FS_POOLS_TRANSIENT = 1 << 3,
+
+ VIR_CONNECT_LIST_FS_POOLS_AUTOSTART = 1 << 4,
+ VIR_CONNECT_LIST_FS_POOLS_NO_AUTOSTART = 1 << 5,
+
+ /* List fspools by type */
+ VIR_CONNECT_LIST_FS_POOLS_DIR = 1 << 6,
+} virConnectListAllFsPoolsFlags;
+
+typedef enum {
+ VIR_FS_XML_INACTIVE = (1 << 0), /* dump inactive fspool/item information
*/
+} virFsXMLFlags;
+
+
+int virConnectListAllFsPools(virConnectPtr conn,
+ virFsPoolPtr **fspools,
+ unsigned int flags);
+
+/*
+ * Lookup fspool by name or uuid
+ */
+virFsPoolPtr virFsPoolLookupByName (virConnectPtr conn,
+ const char *name);
+virFsPoolPtr virFsPoolLookupByUUID (virConnectPtr conn,
+ const unsigned char *uuid);
+virFsPoolPtr virFsPoolLookupByUUIDString (virConnectPtr conn,
+ const char *uuid);
+virFsPoolPtr virFsPoolLookupByItem (virFsItemPtr item);
+
+
+/*
+ * Creating/destroying fspools
+ */
+virFsPoolPtr virFsPoolCreateXML (virConnectPtr conn,
+ const char *xmlDesc,
+ unsigned int flags);
+virFsPoolPtr virFsPoolDefineXML (virConnectPtr conn,
+ const char *xmlDesc,
+ unsigned int flags);
+int virFsPoolBuild (virFsPoolPtr fsool,
+ unsigned int flags);
+int virFsPoolRefresh (virFsPoolPtr fsool,
+ unsigned int flags);
+int virFsPoolUndefine (virFsPoolPtr fsool);
+int virFsPoolCreate (virFsPoolPtr pool,
+ unsigned int flags);
+int virFsPoolDestroy (virFsPoolPtr fsool);
+int virFsPoolDelete (virFsPoolPtr fsool,
+ unsigned int flags);
+int virFsPoolRefresh (virFsPoolPtr fsool,
+ unsigned int flags);
+int virFsPoolRef (virFsPoolPtr fspool);
+int virFsPoolFree (virFsPoolPtr fspool);
+
+/*
+ * FsPool information
+ */
+const char* virFsPoolGetName (virFsPoolPtr fsool);
+int virFsPoolGetUUID (virFsPoolPtr fsool,
+ unsigned char *uuid);
+int virFsPoolGetUUIDString (virFsPoolPtr fsool,
+ char *buf);
+
+int virFsPoolGetInfo (virFsPoolPtr item,
+ virFsPoolInfoPtr info);
+
+char * virFsPoolGetXMLDesc (virFsPoolPtr fsool,
+ unsigned int flags);
+int virFsPoolGetAutostart (virFsPoolPtr pool,
+ int *autostart);
+int virFsPoolSetAutostart (virFsPoolPtr pool,
+ int autostart);
+
+
+/*
+ * List/lookup fs items within a fsool
+ */
+int virFsPoolNumOfItems (virFsPoolPtr fsool);
+int virFsPoolListItems (virFsPoolPtr fsool,
+ char **const names,
+ int maxnames);
+int virFsPoolListAllItems (virFsPoolPtr fsool,
+ virFsItemPtr **items,
+ unsigned int flags);
+
+virConnectPtr virFsItemGetConnect (virFsItemPtr item);
+
+/*
+ * Lookup itemumes based on various attributes
+ */
+virFsItemPtr virFsItemLookupByName (virFsPoolPtr fsool,
+ const char *name);
+virFsItemPtr virFsItemLookupByKey (virConnectPtr conn,
+ const char *key);
+virFsItemPtr virFsItemLookupByPath (virConnectPtr conn,
+ const char *path);
+
+
+const char* virFsItemGetName (virFsItemPtr item);
+const char* virFsItemGetKey (virFsItemPtr item);
+
+virFsItemPtr virFsItemCreateXML (virFsPoolPtr fsool,
+ const char *xmldesc,
+ unsigned int flags);
+virFsItemPtr virFsItemCreateXMLFrom (virFsPoolPtr fsool,
+ const char *xmldesc,
+ virFsItemPtr cloneitem,
+ unsigned int flags);
+
+int virFsItemDelete (virFsItemPtr item,
+ unsigned int flags);
+int virFsItemRef (virFsItemPtr item);
+int virFsItemFree (virFsItemPtr item);
+
+int virFsItemGetInfo (virFsItemPtr item,
+ virFsItemInfoPtr info);
+char * virFsItemGetXMLDesc (virFsItemPtr item,
+ unsigned int flags);
+
+char * virFsItemGetPath (virFsItemPtr item);
+
+int virFsPoolIsActive(virFsPoolPtr fspool);
+int virFsPoolIsPersistent(virFsPoolPtr fspool);
All this looks fine to me.
Regards,
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|