[libvirt] [libvirt-glib] Add API to redefine an existing domain

Marc-André Lureau marcandre.lureau at gmail.com
Mon Nov 21 22:00:31 UTC 2011


ack

On Mon, Nov 21, 2011 at 10:10 PM, Zeeshan Ali (Khattak)
<zeeshanak at gnome.org> wrote:
> From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
>
> ---
>  libvirt-gobject/libvirt-gobject-domain.c |   68 ++++++++++++++++++++++++++++++
>  libvirt-gobject/libvirt-gobject-domain.h |    3 +
>  libvirt-gobject/libvirt-gobject.sym      |    1 +
>  3 files changed, 72 insertions(+), 0 deletions(-)
>
> diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
> index 1fa27bd..7ff820b 100644
> --- a/libvirt-gobject/libvirt-gobject-domain.c
> +++ b/libvirt-gobject/libvirt-gobject-domain.c
> @@ -449,6 +449,74 @@ GVirConfigDomain *gvir_domain_get_config(GVirDomain *dom,
>     return conf;
>  }
>
> +/**
> + * gvir_domain_set_config:
> + * @domain: the domain
> + * @conf: the new configuration for the domain
> + * @err: (allow-none): Place-holder for error or NULL
> + *
> + * Resets configuration of an existing domain.
> + *
> + * Note: If domain is already running, the new configuration will not take
> + * affect until domain reboots.
> + *
> + * Returns: TRUE on success, FALSE if an error occurred.
> + */
> +gboolean gvir_domain_set_config(GVirDomain *domain,
> +                                GVirConfigDomain *conf,
> +                                GError **err)
> +{
> +    gchar *xml;
> +    virConnectPtr conn;
> +    virDomainPtr handle;
> +    gchar uuid[VIR_UUID_STRING_BUFLEN];
> +    GVirDomainPrivate *priv = domain->priv;
> +
> +    g_return_val_if_fail(GVIR_IS_DOMAIN (domain), FALSE);
> +    g_return_val_if_fail(GVIR_IS_CONFIG_DOMAIN (conf), FALSE);
> +    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
> +
> +    xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(conf));
> +
> +    g_return_val_if_fail(xml != NULL, FALSE);
> +
> +    if ((conn = virDomainGetConnect(priv->handle)) == NULL) {
> +        if (err != NULL)
> +            *err = gvir_error_new_literal(GVIR_DOMAIN_ERROR,
> +                                          0,
> +                                          "Failed to get domain connection");
> +        g_free (xml);
> +
> +        return FALSE;
> +    }
> +
> +    handle = virDomainDefineXML(conn, xml);
> +    g_free (xml);
> +
> +    if (handle == NULL) {
> +        if (err != NULL)
> +            *err = gvir_error_new_literal(GVIR_DOMAIN_ERROR,
> +                                          0,
> +                                          "Failed to set "
> +                                          "domain configuration");
> +        return FALSE;
> +    }
> +
> +    virDomainGetUUIDString(handle, uuid);
> +    virDomainFree(handle);
> +
> +    if (g_strcmp0 (uuid, priv->uuid) != 0) {
> +        if (err != NULL)
> +            *err = gvir_error_new_literal(GVIR_DOMAIN_ERROR,
> +                                          0,
> +                                          "Failed to set "
> +                                          "domain configuration");
> +
> +        return FALSE;
> +    }
> +
> +    return TRUE;
> +}
>
>  /**
>  * gvir_domain_get_info:
> diff --git a/libvirt-gobject/libvirt-gobject-domain.h b/libvirt-gobject/libvirt-gobject-domain.h
> index 94bd53e..0479de8 100644
> --- a/libvirt-gobject/libvirt-gobject-domain.h
> +++ b/libvirt-gobject/libvirt-gobject-domain.h
> @@ -123,6 +123,9 @@ GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
>  GVirConfigDomain *gvir_domain_get_config(GVirDomain *dom,
>                                          guint64 flags,
>                                          GError **err);
> +gboolean gvir_domain_set_config(GVirDomain *domain,
> +                                GVirConfigDomain *conf,
> +                                GError **err);
>
>  gchar *gvir_domain_screenshot(GVirDomain *dom,
>                               GVirStream *stream,
> diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
> index 164b6b8..46c53f9 100644
> --- a/libvirt-gobject/libvirt-gobject.sym
> +++ b/libvirt-gobject/libvirt-gobject.sym
> @@ -53,6 +53,7 @@ LIBVIRT_GOBJECT_0.0.1 {
>        gvir_domain_shutdown;
>        gvir_domain_reboot;
>        gvir_domain_get_config;
> +       gvir_domain_set_config;
>        gvir_domain_get_info;
>        gvir_domain_screenshot;
>
> --
> 1.7.7.1
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>



-- 
Marc-André Lureau




More information about the libvir-list mailing list