Re: [libvirt] [PATCH 1/7] Add public API stubs for virStorageVolCreateXMLFrom
On Mon, May 04, 2009 at 01:42:56PM -0400, Cole Robinson wrote: Signed-off-by: Cole Robinson crobi...@redhat.com --- include/libvirt/libvirt.h|4 +++ include/libvirt/libvirt.h.in |4 +++ src/driver.h |6 src/libvirt.c| 61 - src/libvirt_public.syms |5 +++ 5 files changed, 78 insertions(+), 2 deletions(-) diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h index 30f559d..b1e45e4 100644 --- a/include/libvirt/libvirt.h +++ b/include/libvirt/libvirt.h @@ -1047,6 +1047,10 @@ const char* virStorageVolGetKey (virStorageVolPtr vol); virStorageVolPtrvirStorageVolCreateXML (virStoragePoolPtr pool, const char *xmldesc, unsigned int flags); +virStorageVolPtrvirStorageVolCreateXMLFrom (virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clonevol); just one nitpick, we usually keep flags at the end of the list of arguments, so I would just swap flags and clonevol diff --git a/src/driver.h b/src/driver.h index c357b76..ff12ada 100644 --- a/src/driver.h +++ b/src/driver.h @@ -586,6 +586,11 @@ typedef char * typedef char * (*virDrvStorageVolGetPath) (virStorageVolPtr vol); +typedef virStorageVolPtr +(*virDrvStorageVolCreateXMLFrom) (virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clone); same here, even if it's the internal one and less of a problem. Except for this ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ dan...@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 1/7] Add public API stubs for virStorageVolCreateXMLFrom
On Mon, May 04, 2009 at 01:42:56PM -0400, Cole Robinson wrote: Signed-off-by: Cole Robinson crobi...@redhat.com --- include/libvirt/libvirt.h|4 +++ include/libvirt/libvirt.h.in |4 +++ src/driver.h |6 src/libvirt.c| 61 - src/libvirt_public.syms |5 +++ 5 files changed, 78 insertions(+), 2 deletions(-) ACK, this looks good to me. Daniel diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h index 30f559d..b1e45e4 100644 --- a/include/libvirt/libvirt.h +++ b/include/libvirt/libvirt.h @@ -1047,6 +1047,10 @@ const char* virStorageVolGetKey (virStorageVolPtr vol); virStorageVolPtrvirStorageVolCreateXML (virStoragePoolPtr pool, const char *xmldesc, unsigned int flags); +virStorageVolPtrvirStorageVolCreateXMLFrom (virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clonevol); int virStorageVolDelete (virStorageVolPtr vol, unsigned int flags); int virStorageVolRef(virStorageVolPtr vol); diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index 2f7076f..f5cadb4 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -1047,6 +1047,10 @@ const char* virStorageVolGetKey (virStorageVolPtr vol); virStorageVolPtrvirStorageVolCreateXML (virStoragePoolPtr pool, const char *xmldesc, unsigned int flags); +virStorageVolPtrvirStorageVolCreateXMLFrom (virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clonevol); int virStorageVolDelete (virStorageVolPtr vol, unsigned int flags); int virStorageVolRef(virStorageVolPtr vol); diff --git a/src/driver.h b/src/driver.h index c357b76..ff12ada 100644 --- a/src/driver.h +++ b/src/driver.h @@ -586,6 +586,11 @@ typedef char * typedef char * (*virDrvStorageVolGetPath) (virStorageVolPtr vol); +typedef virStorageVolPtr +(*virDrvStorageVolCreateXMLFrom) (virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clone); typedef struct _virStorageDriver virStorageDriver; @@ -633,6 +638,7 @@ struct _virStorageDriver { virDrvStorageVolLookupByKey volLookupByKey; virDrvStorageVolLookupByPath volLookupByPath; virDrvStorageVolCreateXML volCreateXML; +virDrvStorageVolCreateXMLFrom volCreateXMLFrom; virDrvStorageVolDelete volDelete; virDrvStorageVolGetInfo volGetInfo; virDrvStorageVolGetXMLDesc volGetXMLDesc; diff --git a/src/libvirt.c b/src/libvirt.c index ded18a7..5a51c45 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -6767,6 +6767,65 @@ error: /** + * virStorageVolCreateXMLFrom: + * @pool: pointer to parent pool for the new volume + * @xmldesc: description of volume to create + * @flags: flags for creation (unused, pass 0) + * @clonevol: storage volume to use as input + * + * Create a storage volume in the parent pool, using the + * 'clonevol' volume as input. Information for the new + * volume (name, perms) are passed via a typical volume + * XML description. + * + * return the storage volume, or NULL on error + */ +virStorageVolPtr +virStorageVolCreateXMLFrom(virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clonevol) +{ +DEBUG(pool=%p, flags=%u, clonevol=%p, pool, flags, clonevol); + +virResetLastError(); + +if (!VIR_IS_STORAGE_POOL(pool)) { +virLibConnError(NULL, VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__); +return (NULL); +} + +if (!VIR_IS_STORAGE_VOL(clonevol)) { +virLibConnError(NULL, VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__); +return (NULL); +} + +if (pool-conn-flags VIR_CONNECT_RO || +
[libvirt] [PATCH 1/7] Add public API stubs for virStorageVolCreateXMLFrom
Signed-off-by: Cole Robinson crobi...@redhat.com --- include/libvirt/libvirt.h|4 +++ include/libvirt/libvirt.h.in |4 +++ src/driver.h |6 src/libvirt.c| 61 - src/libvirt_public.syms |5 +++ 5 files changed, 78 insertions(+), 2 deletions(-) diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h index 30f559d..b1e45e4 100644 --- a/include/libvirt/libvirt.h +++ b/include/libvirt/libvirt.h @@ -1047,6 +1047,10 @@ const char* virStorageVolGetKey (virStorageVolPtr vol); virStorageVolPtrvirStorageVolCreateXML (virStoragePoolPtr pool, const char *xmldesc, unsigned int flags); +virStorageVolPtrvirStorageVolCreateXMLFrom (virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clonevol); int virStorageVolDelete (virStorageVolPtr vol, unsigned int flags); int virStorageVolRef(virStorageVolPtr vol); diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index 2f7076f..f5cadb4 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -1047,6 +1047,10 @@ const char* virStorageVolGetKey (virStorageVolPtr vol); virStorageVolPtrvirStorageVolCreateXML (virStoragePoolPtr pool, const char *xmldesc, unsigned int flags); +virStorageVolPtrvirStorageVolCreateXMLFrom (virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clonevol); int virStorageVolDelete (virStorageVolPtr vol, unsigned int flags); int virStorageVolRef(virStorageVolPtr vol); diff --git a/src/driver.h b/src/driver.h index c357b76..ff12ada 100644 --- a/src/driver.h +++ b/src/driver.h @@ -586,6 +586,11 @@ typedef char * typedef char * (*virDrvStorageVolGetPath) (virStorageVolPtr vol); +typedef virStorageVolPtr +(*virDrvStorageVolCreateXMLFrom) (virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clone); typedef struct _virStorageDriver virStorageDriver; @@ -633,6 +638,7 @@ struct _virStorageDriver { virDrvStorageVolLookupByKey volLookupByKey; virDrvStorageVolLookupByPath volLookupByPath; virDrvStorageVolCreateXML volCreateXML; +virDrvStorageVolCreateXMLFrom volCreateXMLFrom; virDrvStorageVolDelete volDelete; virDrvStorageVolGetInfo volGetInfo; virDrvStorageVolGetXMLDesc volGetXMLDesc; diff --git a/src/libvirt.c b/src/libvirt.c index ded18a7..5a51c45 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -6767,6 +6767,65 @@ error: /** + * virStorageVolCreateXMLFrom: + * @pool: pointer to parent pool for the new volume + * @xmldesc: description of volume to create + * @flags: flags for creation (unused, pass 0) + * @clonevol: storage volume to use as input + * + * Create a storage volume in the parent pool, using the + * 'clonevol' volume as input. Information for the new + * volume (name, perms) are passed via a typical volume + * XML description. + * + * return the storage volume, or NULL on error + */ +virStorageVolPtr +virStorageVolCreateXMLFrom(virStoragePoolPtr pool, + const char *xmldesc, + unsigned int flags, + virStorageVolPtr clonevol) +{ +DEBUG(pool=%p, flags=%u, clonevol=%p, pool, flags, clonevol); + +virResetLastError(); + +if (!VIR_IS_STORAGE_POOL(pool)) { +virLibConnError(NULL, VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__); +return (NULL); +} + +if (!VIR_IS_STORAGE_VOL(clonevol)) { +virLibConnError(NULL, VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__); +return (NULL); +} + +if (pool-conn-flags VIR_CONNECT_RO || +clonevol-conn-flags VIR_CONNECT_RO) { +virLibConnError(pool-conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__); +goto error; +} + +if (pool-conn-storageDriver +