[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