[libvirt] [glib v2 0/4] Filesystem config improvements

Hi all, Here is the previous patch split into a series. The difference with v1 are: * it adds test-gconfig test for file systems * the gvir_config_domain_filesys_set_driver_type fix has been moved to its own commit * the gvir_config_domain_filesys_set_driver_format doesn't set the type, the user "just" has to make sure he doesn't do stupid things * a test for the new function has been added to test-gconfig Cédric Bosdonnat (4): test-gconfig: add filesystem test gvir_config_domain_filesys_set_driver_type: replace the driver node Add loop and nbd filesystem types domain config: add API to set the filesystem image format libvirt-gconfig/libvirt-gconfig-domain-filesys.c | 18 +++++++++++- libvirt-gconfig/libvirt-gconfig-domain-filesys.h | 4 +++ libvirt-gconfig/libvirt-gconfig.sym | 5 ++++ tests/test-gconfig.c | 36 ++++++++++++++++++++++++ tests/xml/gconfig-domain-device-filesys.xml | 15 ++++++++++ 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 tests/xml/gconfig-domain-device-filesys.xml -- 2.1.4

--- tests/test-gconfig.c | 35 +++++++++++++++++++++++++++++ tests/xml/gconfig-domain-device-filesys.xml | 15 +++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tests/xml/gconfig-domain-device-filesys.xml diff --git a/tests/test-gconfig.c b/tests/test-gconfig.c index bd75008..e7dafde 100644 --- a/tests/test-gconfig.c +++ b/tests/test-gconfig.c @@ -358,6 +358,39 @@ static void test_domain_device_disk(void) } +static void test_domain_device_filesystem(void) +{ + GVirConfigDomain *domain; + GVirConfigDomainFilesys *fs; + + domain = gvir_config_domain_new(); + + fs = gvir_config_domain_filesys_new(); + gvir_config_domain_filesys_set_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_FILE); + gvir_config_domain_filesys_set_access_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_ACCESS_MAPPED); + gvir_config_domain_filesys_set_driver_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_DEFAULT); + gvir_config_domain_filesys_set_source(fs, "/path/to/source"); + gvir_config_domain_filesys_set_target(fs, "/path/to/target1"); + gvir_config_domain_filesys_set_readonly(fs, TRUE); + gvir_config_domain_add_device(domain, GVIR_CONFIG_DOMAIN_DEVICE(fs)); + g_object_unref(fs); + + /* Add a RAM fs */ + fs = gvir_config_domain_filesys_new(); + gvir_config_domain_filesys_set_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_RAM); + gvir_config_domain_filesys_set_access_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_ACCESS_PASSTHROUGH); + gvir_config_domain_filesys_set_driver_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_PATH); + gvir_config_domain_filesys_set_ram_usage(fs, 1234); + gvir_config_domain_filesys_set_target(fs, "/path/to/target2"); + gvir_config_domain_add_device(domain, GVIR_CONFIG_DOMAIN_DEVICE(fs)); + g_object_unref(fs); + + check_xml(domain, "gconfig-domain-device-filesys.xml"); + + g_object_unref(G_OBJECT(domain)); +} + + static void test_domain_device_network(void) { GVirConfigDomain *domain; @@ -665,6 +698,8 @@ int main(int argc, char **argv) g_test_add_func("/libvirt-gconfig/domain-cpu", test_domain_cpu); g_test_add_func("/libvirt-gconfig/domain-device-disk", test_domain_device_disk); + g_test_add_func("/libvirt-gconfig/domain-device-filesystem", + test_domain_device_filesystem); g_test_add_func("/libvirt-gconfig/domain-device-network", test_domain_device_network); g_test_add_func("/libvirt-gconfig/domain-device-input", diff --git a/tests/xml/gconfig-domain-device-filesys.xml b/tests/xml/gconfig-domain-device-filesys.xml new file mode 100644 index 0000000..5db6d61 --- /dev/null +++ b/tests/xml/gconfig-domain-device-filesys.xml @@ -0,0 +1,15 @@ +<domain> + <devices> + <filesystem type="file" accessmode="mapped"> + <driver/> + <source file="/path/to/source"/> + <target dir="/path/to/target1"/> + <readonly/> + </filesystem> + <filesystem type="ram" accessmode="passthrough"> + <driver type="path"/> + <source usage="1234" units="bytes"/> + <target dir="/path/to/target2"/> + </filesystem> + </devices> +</domain> -- 2.1.4

Replace the driver node in case the user calls the function more than one time. --- libvirt-gconfig/libvirt-gconfig-domain-filesys.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c index 006a407..dc49bcd 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c @@ -125,7 +125,7 @@ void gvir_config_domain_filesys_set_driver_type(GVirConfigDomainFilesys *filesys GVirConfigObject *node; g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_FILESYS(filesys)); - node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(filesys), "driver"); + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(filesys), "driver"); g_return_if_fail(GVIR_CONFIG_IS_OBJECT(node)); if (type != GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_DEFAULT) gvir_config_object_set_attribute_with_type( -- 2.1.4

--- libvirt-gconfig/libvirt-gconfig-domain-filesys.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.h b/libvirt-gconfig/libvirt-gconfig-domain-filesys.h index 4f3973e..4144976 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.h @@ -75,6 +75,8 @@ typedef enum { GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_DEFAULT, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_PATH, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_HANDLE, + GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_LOOP, + GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_NBD, } GVirConfigDomainFilesysDriverType; GType gvir_config_domain_filesys_get_type(void); -- 2.1.4

On Tue, Jun 16, 2015 at 10:58:13AM +0200, Cédric Bosdonnat wrote:
--- libvirt-gconfig/libvirt-gconfig-domain-filesys.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.h b/libvirt-gconfig/libvirt-gconfig-domain-filesys.h index 4f3973e..4144976 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.h @@ -75,6 +75,8 @@ typedef enum { GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_DEFAULT, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_PATH, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_HANDLE, + GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_LOOP, + GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_NBD,
Can you add GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_PLOOP while at it? (if you don't have libvirt commit rights, I can do that before pushing) Christophe

On Tue, 2015-06-16 at 14:43 +0200, Christophe Fergeau wrote:
On Tue, Jun 16, 2015 at 10:58:13AM +0200, Cédric Bosdonnat wrote:
--- libvirt-gconfig/libvirt-gconfig-domain-filesys.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.h b/libvirt-gconfig/libvirt-gconfig-domain-filesys.h index 4f3973e..4144976 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.h @@ -75,6 +75,8 @@ typedef enum { GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_DEFAULT, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_PATH, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_HANDLE, + GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_LOOP, + GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_NBD,
Can you add GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_PLOOP while at it? (if you don't have libvirt commit rights, I can do that before pushing)
I'll do it. I think I have the commit rights, as on the libvirt and libvirt-sandbox repos. -- Cedric

Add the gvir_config_domain_filesys_set_driver_format function to allow setting nbd driver type + image format for containers filesystems. --- libvirt-gconfig/libvirt-gconfig-domain-filesys.c | 16 ++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-filesys.h | 2 ++ libvirt-gconfig/libvirt-gconfig.sym | 5 +++++ tests/test-gconfig.c | 1 + tests/xml/gconfig-domain-device-filesys.xml | 2 +- 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c index dc49bcd..9b73af5 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c @@ -137,6 +137,22 @@ void gvir_config_domain_filesys_set_driver_type(GVirConfigDomainFilesys *filesys g_object_unref(G_OBJECT(node)); } +void gvir_config_domain_filesys_set_driver_format(GVirConfigDomainFilesys *filesys, + GVirConfigDomainDiskFormat format) +{ + GVirConfigObject *node; + + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_FILESYS(filesys)); + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(filesys), "driver"); + g_return_if_fail(GVIR_CONFIG_IS_OBJECT(node)); + + gvir_config_object_set_attribute_with_type( + node, + "format", GVIR_CONFIG_TYPE_DOMAIN_DISK_FORMAT, format, + NULL); + g_object_unref(G_OBJECT(node)); +} + void gvir_config_domain_filesys_set_source(GVirConfigDomainFilesys *filesys, const char *source) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.h b/libvirt-gconfig/libvirt-gconfig-domain-filesys.h index 4144976..18c4069 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.h @@ -91,6 +91,8 @@ void gvir_config_domain_filesys_set_access_type(GVirConfigDomainFilesys *filesys GVirConfigDomainFilesysAccessType type); void gvir_config_domain_filesys_set_driver_type(GVirConfigDomainFilesys *filesys, GVirConfigDomainFilesysDriverType type); +void gvir_config_domain_filesys_set_driver_format(GVirConfigDomainFilesys *filesys, + GVirConfigDomainDiskFormat format); void gvir_config_domain_filesys_set_source(GVirConfigDomainFilesys *filesys, const char *source); void gvir_config_domain_filesys_set_ram_usage(GVirConfigDomainFilesys *filesys, diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 407a52f..6ce1511 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -719,4 +719,9 @@ global: gvir_config_storage_vol_target_set_compat; } LIBVIRT_GCONFIG_0.1.9; +LIBVIRT_GCONFIG_0.2.1 { +global: + gvir_config_domain_filesys_set_driver_format; +} LIBVIRT_GCONFIG_0.2.0; + # .... define new API here using predicted next version number .... diff --git a/tests/test-gconfig.c b/tests/test-gconfig.c index e7dafde..bd2daa6 100644 --- a/tests/test-gconfig.c +++ b/tests/test-gconfig.c @@ -369,6 +369,7 @@ static void test_domain_device_filesystem(void) gvir_config_domain_filesys_set_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_FILE); gvir_config_domain_filesys_set_access_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_ACCESS_MAPPED); gvir_config_domain_filesys_set_driver_type(fs, GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_DEFAULT); + gvir_config_domain_filesys_set_driver_format(fs, GVIR_CONFIG_DOMAIN_DISK_FORMAT_QCOW2); gvir_config_domain_filesys_set_source(fs, "/path/to/source"); gvir_config_domain_filesys_set_target(fs, "/path/to/target1"); gvir_config_domain_filesys_set_readonly(fs, TRUE); diff --git a/tests/xml/gconfig-domain-device-filesys.xml b/tests/xml/gconfig-domain-device-filesys.xml index 5db6d61..30152d2 100644 --- a/tests/xml/gconfig-domain-device-filesys.xml +++ b/tests/xml/gconfig-domain-device-filesys.xml @@ -1,7 +1,7 @@ <domain> <devices> <filesystem type="file" accessmode="mapped"> - <driver/> + <driver format="qcow2"/> <source file="/path/to/source"/> <target dir="/path/to/target1"/> <readonly/> -- 2.1.4

Hey, Thanks for adding the test! ACK to patches 1, 3 and 4, one comment in 2. Christophe On Tue, Jun 16, 2015 at 10:58:10AM +0200, Cédric Bosdonnat wrote:
Hi all,
Here is the previous patch split into a series. The difference with v1 are: * it adds test-gconfig test for file systems * the gvir_config_domain_filesys_set_driver_type fix has been moved to its own commit * the gvir_config_domain_filesys_set_driver_format doesn't set the type, the user "just" has to make sure he doesn't do stupid things * a test for the new function has been added to test-gconfig
Cédric Bosdonnat (4): test-gconfig: add filesystem test gvir_config_domain_filesys_set_driver_type: replace the driver node Add loop and nbd filesystem types domain config: add API to set the filesystem image format
libvirt-gconfig/libvirt-gconfig-domain-filesys.c | 18 +++++++++++- libvirt-gconfig/libvirt-gconfig-domain-filesys.h | 4 +++ libvirt-gconfig/libvirt-gconfig.sym | 5 ++++ tests/test-gconfig.c | 36 ++++++++++++++++++++++++ tests/xml/gconfig-domain-device-filesys.xml | 15 ++++++++++ 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 tests/xml/gconfig-domain-device-filesys.xml
-- 2.1.4
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
participants (3)
-
Cedric Bosdonnat
-
Christophe Fergeau
-
Cédric Bosdonnat