On Mon, 2015-06-15 at 17:12 +0200, Christophe Fergeau wrote: > Hey, > > On Mon, Jun 15, 2015 at 03:37:12PM +0200, Cédric Bosdonnat wrote: > > 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 | 30 +++++++++++++++++++++++- > > libvirt-gconfig/libvirt-gconfig-domain-filesys.h | 4 ++++ > > libvirt-gconfig/libvirt-gconfig.sym | 5 ++++ > > 3 files changed, 38 insertions(+), 1 deletion(-) > > > > diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c > > index 006a407..fffbe88 100644 > > --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c > > +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c > > @@ -125,7 +125,9 @@ 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"); > > + if (!(node = gvir_config_object_get_child(GVIR_CONFIG_OBJECT(filesys), "driver"))) { > > + node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(filesys), "driver"); > > + } > > I believe you could use gvir_config_object_replace_child() here? This > should be split in a different commit. > > > > g_return_if_fail(GVIR_CONFIG_IS_OBJECT(node)); > > if (type != GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_DEFAULT) > > gvir_config_object_set_attribute_with_type( > > @@ -137,6 +139,32 @@ 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; > > + GVirConfigDomainFilesysDriverType type = GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_LOOP; > > + > > + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_FILESYS(filesys)); > > + if (!(node = gvir_config_object_get_child(GVIR_CONFIG_OBJECT(filesys), "driver"))) { > > + node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(filesys), "driver"); > > + } > > _replace_child() ? > > > + g_return_if_fail(GVIR_CONFIG_IS_OBJECT(node)); > > + if (format != GVIR_CONFIG_DOMAIN_DISK_FORMAT_RAW) > > + type = GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_NBD; > > + > > + gvir_config_object_set_attribute_with_type( > > + node, "type", > > + GVIR_CONFIG_TYPE_DOMAIN_FILESYS_DRIVER_TYPE, > > + type, NULL); > > + > > + gvir_config_object_set_attribute_with_type( > > + node, "format", > > + GVIR_CONFIG_TYPE_DOMAIN_DISK_FORMAT, > > + format, NULL); > > These 2 calls can probably be grouped in a single one? > > I haven't looked if there are other similar situations in > libvirt-gconfig, but silently overwriting a preexisting "type" attribute > with something different when setting the format does not seem very nice > to the library user. What should we do in that case? Plainly return an error or just a warning? > > > + 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 4f3973e..18c4069 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; > > Different commit? > > Could you add some small test case for the filesys node to > tests/test/gconfig.c while you are at it? I'll do it... but it really seems that there are a lot of untested areas there ;) -- Cedric -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list