Re: [PATCH 1/2] test: Implementing testDomainRename().

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/21/2017 08:33 PM, Julio Faracco wrote:
> There is no method to rename inactive domains for test driver.
> After this patch, we can rename the domains using 'domrename'.
> 
>     virsh# domrename test anothertest
>     Domain successfully renamed
> 
> Signed-off-by: Julio Faracco <jcfaracco@xxxxxxxxx>
> ---
>  src/test/test_driver.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 96 insertions(+)
> 
> diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> index 8adc216..710fd5d 100644
> --- a/src/test/test_driver.c
> +++ b/src/test/test_driver.c
> @@ -2618,6 +2618,101 @@ testDomainGetVcpuPinInfo(virDomainPtr dom,
>      return ret;
>  }
>  
> +static int
> +testDomainRenameCallback(virDomainObjPtr privdom,
> +                         const char *new_name,
> +                         unsigned int flags,
> +                         void *opaque)
> +{
> +    testDriverPtr driver = opaque;
> +    virObjectEventPtr event_new = NULL;
> +    virObjectEventPtr event_old = NULL;
> +    int ret = -1;
> +    char *new_dom_name = NULL;
> +    char *old_dom_name = NULL;
> +
> +    virCheckFlags(0, ret);
> +
> +    if (VIR_STRDUP(new_dom_name, new_name) < 0)
> +        goto cleanup;
> +
> +    event_old = virDomainEventLifecycleNewFromObj(privdom,
> +                                            VIR_DOMAIN_EVENT_UNDEFINED,
> +                                            VIR_DOMAIN_EVENT_UNDEFINED_RENAMED);
> +
> +    /* Switch name in domain definition. */
> +    old_dom_name = privdom->def->name;
> +    privdom->def->name = new_dom_name;
> +    new_dom_name = NULL;
> +
> +    event_new = virDomainEventLifecycleNewFromObj(privdom,
> +                                              VIR_DOMAIN_EVENT_DEFINED,
> +                                              VIR_DOMAIN_EVENT_DEFINED_RENAMED);
> +    ret = 0;
> +
> + cleanup:
> +    VIR_FREE(old_dom_name);
> +    VIR_FREE(new_dom_name);
> +    testObjectEventQueue(driver, event_old);
> +    testObjectEventQueue(driver, event_new);
> +    return ret;
> +}
> +
> +static int testDomainRename(virDomainPtr dom,
> +                            const char *new_name,
> +                            unsigned int flags)
> +{
> +    testDriverPtr driver = dom->conn->privateData;
> +    virDomainObjPtr privdom = NULL;
> +    int ret = -1;
> +
> +    virCheckFlags(0, -1);
> +
> +    if (!(privdom = testDomObjFromDomain(dom)))
> +        goto cleanup;
> +
> +    if (virDomainObjIsActive(privdom)) {
> +        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> +                       _("cannot rename active domain"));
> +        goto cleanup;
> +    }
> +
> +    if (!privdom->persistent) {
> +        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> +                       _("cannot rename a transient domain"));
> +        goto cleanup;
> +    }
> +
> +    if (privdom->hasManagedSave) {
> +        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> +                       _("domain with a managed saved state can't be renamed"));
> +        goto cleanup;
> +    }
> +
> +    if (virDomainObjGetState(privdom, NULL) != VIR_DOMAIN_SHUTOFF) {
> +        virReportError(VIR_ERR_OPERATION_INVALID,
> +                       "%s", _("domain has to be shutoff before renaming"));
> +        goto cleanup;
> +    }
> +
> +    if (virDomainSnapshotObjListNum(privdom->snapshots, NULL, 0) > 0) {
> +        virReportError(VIR_ERR_OPERATION_INVALID,
> +                       "%s", _("cannot rename domain with snapshots"));
> +        goto cleanup;
> +    }

I'm not quite sure why these checks are needed. In qemu driver we have
some because:

a) domain name is used for other things too (e.g. filenames of snapshot
XMLs, and so on)
b) we were too lazy to write code that handles rename for cases from a)
c) not everything is possible, e.g. qemu does not have command to change
domain name that we've given on cmd line.

I don't think that these reasons are true for test driver though.
Otherwise looking good.

Michal

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux