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

Michal Privoznik mprivozn at redhat.com
Thu Jan 4 12:24:23 UTC 2018


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 at gmail.com>
> ---
>  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




More information about the libvir-list mailing list