[libvirt] [PATCH v3 1/2] test: Implementing testDomainRename().
Michal Privoznik
mprivozn at redhat.com
Mon Jan 29 09:05:44 UTC 2018
On 01/15/2018 08:18 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 | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 84 insertions(+)
>
> diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> index dc743b4..1461efb 100644
> --- a/src/test/test_driver.c
> +++ b/src/test/test_driver.c
> @@ -2618,6 +2618,89 @@ 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, -1);
> +
> + 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;
> + }
This looks like redundant check. I mean, if domain has to be SHUTOFF it
will certainly not be transient. But this is more user friendly error
message so I'm keeping it in.
> +
> + if (virDomainObjGetState(privdom, NULL) != VIR_DOMAIN_SHUTOFF) {
> + virReportError(VIR_ERR_OPERATION_INVALID,
> + "%s", _("domain has to be shutoff before renaming"));
> + goto cleanup;
> + }
> +
> + if (virDomainObjListRename(driver->domains, privdom, new_name, flags,
> + testDomainRenameCallback, driver) < 0)
> + goto cleanup;
> +
> + /* Success, domain has been renamed. */
> + ret = 0;
> +
> + cleanup:
> + virDomainObjEndAPI(&privdom);
> + return ret;
> +}
> +
> static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
> {
> testDriverPtr privconn = domain->conn->privateData;
> @@ -6822,6 +6905,7 @@ static virHypervisorDriver testHypervisorDriver = {
> .connectDomainEventDeregisterAny = testConnectDomainEventDeregisterAny, /* 0.8.0 */
> .connectIsAlive = testConnectIsAlive, /* 0.9.8 */
> .nodeGetCPUMap = testNodeGetCPUMap, /* 1.0.0 */
> + .domainRename = testDomainRename, /* 4.0.0 */
No, 4.0.0 is already released. We're aiming towards 4.1.0 now ;-)
> .domainScreenshot = testDomainScreenshot, /* 1.0.5 */
> .domainGetMetadata = testDomainGetMetadata, /* 1.1.3 */
> .domainSetMetadata = testDomainSetMetadata, /* 1.1.3 */
>
I'm fixing raised issues (and other small nits), ACKing and pushing.
Michal
More information about the libvir-list
mailing list