[libvirt] [libvirt-designer PATCHv3 1/9] Improve VM skeleton created by gvir_designer_domain_setup_guest()

Michal Privoznik mprivozn at redhat.com
Tue Jun 4 17:10:45 UTC 2013


On 04.06.2013 16:33, Christophe Fergeau wrote:
> Add various devices/configuration to libvirt XML config when
> creating the VM. This configuration is generic enough that it
> should be useful on all created VMs, that's why no public API is
> added to set them up. However, they are split in several helpers
> that can easily be exported if needed.
> 
> What this commit adds is:
> - clock
> - input device (a tablet which will act as a mouse)
> - a console (Boxes is adding one, not sure if it's required...)
> 
> For maximum flexibility, we may want to let applications decide whether
> they want a console or not.

I'd argue that majority cases do want a console or don't care about it.
So I guess it's okay if a console is added implicitly.

> 
> In addition to these devices, gvir_designer_domain_setup_guest()
> now disables power management, and sets the domain to stop on
> power off/crash, and to restart on reboots.
> ---
>  libvirt-designer/libvirt-designer-domain.c | 95 ++++++++++++++++++++++++++++++
>  1 file changed, 95 insertions(+)
> 
> diff --git a/libvirt-designer/libvirt-designer-domain.c b/libvirt-designer/libvirt-designer-domain.c
> index 2d4204f..e4f72e6 100644
> --- a/libvirt-designer/libvirt-designer-domain.c
> +++ b/libvirt-designer/libvirt-designer-domain.c
> @@ -313,6 +313,95 @@ end:
>  }
>  
>  
> +static void gvir_designer_domain_add_clock(GVirDesignerDomain *design)
> +{
> +    GVirConfigDomainClock *clock;
> +    GVirConfigDomainTimer *timer;
> +    GVirConfigDomainClockOffset offset;
> +
> +    clock = gvir_config_domain_clock_new();
> +    offset = GVIR_CONFIG_DOMAIN_CLOCK_UTC;
> +    if (design->priv->os != NULL) {
> +        const gchar *short_id;
> +
> +        short_id = osinfo_product_get_short_id(OSINFO_PRODUCT(design->priv->os));
> +        if (short_id != NULL && g_str_has_suffix(short_id, "win")) {
> +            offset = GVIR_CONFIG_DOMAIN_CLOCK_LOCALTIME;
> +        }
> +    }
> +    gvir_config_domain_clock_set_offset(clock, offset);
> +
> +    timer = GVIR_CONFIG_DOMAIN_TIMER(gvir_config_domain_timer_rtc_new());
> +    gvir_config_domain_timer_set_tick_policy(timer,
> +                                             GVIR_CONFIG_DOMAIN_TIMER_TICK_POLICY_CATCHUP);
> +    gvir_config_domain_clock_add_timer(clock, timer);
> +    g_object_unref(G_OBJECT(timer));
> +
> +    timer = GVIR_CONFIG_DOMAIN_TIMER(gvir_config_domain_timer_pit_new());
> +    gvir_config_domain_timer_set_tick_policy(timer,
> +                                             GVIR_CONFIG_DOMAIN_TIMER_TICK_POLICY_DELAY);
> +    gvir_config_domain_clock_add_timer(clock, timer);
> +    g_object_unref(G_OBJECT(timer));
> +
> +    gvir_config_domain_set_clock(design->priv->config, clock);
> +    g_object_unref(G_OBJECT(clock));
> +}
> +
> +static void gvir_designer_domain_add_power_management(GVirDesignerDomain *design)
> +{
> +    GVirConfigDomainPowerManagement *pm;
> +
> +    pm = gvir_config_domain_power_management_new();
> +    gvir_config_domain_power_management_set_mem_suspend_enabled(pm, FALSE);
> +    gvir_config_domain_power_management_set_disk_suspend_enabled(pm, FALSE);
> +
> +    gvir_config_domain_set_power_management(design->priv->config, pm);
> +    g_object_unref(G_OBJECT(pm));
> +}
> +
> +static void gvir_designer_domain_set_lifecycle(GVirDesignerDomain *design)
> +{
> +    gvir_config_domain_set_lifecycle(design->priv->config,
> +                                     GVIR_CONFIG_DOMAIN_LIFECYCLE_ON_POWEROFF,
> +                                     GVIR_CONFIG_DOMAIN_LIFECYCLE_DESTROY);
> +    gvir_config_domain_set_lifecycle(design->priv->config,
> +                                     GVIR_CONFIG_DOMAIN_LIFECYCLE_ON_REBOOT,
> +                                     GVIR_CONFIG_DOMAIN_LIFECYCLE_RESTART);
> +    gvir_config_domain_set_lifecycle(design->priv->config,
> +                                     GVIR_CONFIG_DOMAIN_LIFECYCLE_ON_CRASH,
> +                                     GVIR_CONFIG_DOMAIN_LIFECYCLE_DESTROY);
> +}
> +
> +static void gvir_designer_domain_add_console(GVirDesignerDomain *design)
> +{
> +    GVirConfigDomainConsole *console;
> +    GVirConfigDomainChardevSourcePty *pty;
> +
> +    console = gvir_config_domain_console_new();
> +    pty = gvir_config_domain_chardev_source_pty_new();
> +    gvir_config_domain_chardev_set_source(GVIR_CONFIG_DOMAIN_CHARDEV(console),
> +                                          GVIR_CONFIG_DOMAIN_CHARDEV_SOURCE(pty));
> +    g_object_unref(G_OBJECT(pty));
> +
> +    gvir_config_domain_add_device(design->priv->config,
> +                                  GVIR_CONFIG_DOMAIN_DEVICE(console));
> +    g_object_unref(G_OBJECT(console));
> +}
> +
> +static void gvir_designer_domain_add_input(GVirDesignerDomain *design)
> +{
> +    GVirConfigDomainInput *input;
> +
> +    input = gvir_config_domain_input_new();
> +    gvir_config_domain_input_set_device_type(input,
> +                                             GVIR_CONFIG_DOMAIN_INPUT_DEVICE_TABLET);
> +
> +    gvir_config_domain_add_device(design->priv->config,
> +                                  GVIR_CONFIG_DOMAIN_DEVICE(input));
> +    g_object_unref(G_OBJECT(input));
> +}
> +
> +
>  static void gvir_designer_domain_init(GVirDesignerDomain *design)
>  {
>      GVirDesignerDomainPrivate *priv;
> @@ -670,6 +759,12 @@ gvir_designer_domain_setup_guest(GVirDesignerDomain *design,
>          gvir_config_capabilities_guest_domain_get_virt_type(domain));
>      gvir_config_domain_set_os(priv->config, os);
>  
> +    gvir_designer_domain_add_clock(design);
> +    gvir_designer_domain_add_power_management(design);
> +    gvir_designer_domain_set_lifecycle(design);
> +    gvir_designer_domain_add_console(design);
> +    gvir_designer_domain_add_input(design);
> +
>      ret = TRUE;
>  cleanup:
>      if (domain != NULL)
> 




More information about the libvir-list mailing list