Re: [PATCHv2] bhyve: domainCreateXML

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

 



  Wojciech Macek wrote:

> Implement bhyveDomainCreteXML function.

s/Crete/Create/

> ---
>  src/bhyve/bhyve_driver.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 67 insertions(+)
> 
> diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
> index 7187202..4ac89c1 100644
> --- a/src/bhyve/bhyve_driver.c
> +++ b/src/bhyve/bhyve_driver.c
> @@ -1101,6 +1101,72 @@ bhyveConnectCompareCPU(virConnectPtr conn,
>      return ret;
>  }
>  
> +static virDomainPtr
> +bhyveDomainCreateXML(virConnectPtr conn,
> +                     const char *xml,
> +                     unsigned int flags)
> +{
> +    bhyveConnPtr privconn = conn->privateData;
> +    virDomainPtr dom = NULL;
> +    virDomainDefPtr def = NULL;
> +    virDomainObjPtr vm = NULL;
> +    virCapsPtr caps = NULL;
> +    int ret;
> +    unsigned int start_flags = 0;
> +
> +    virCheckFlags(VIR_DOMAIN_START_AUTODESTROY, NULL);
> +
> +    if (flags & VIR_DOMAIN_START_AUTODESTROY)
> +        start_flags |= VIR_BHYVE_PROCESS_START_AUTODESTROY;
> +
> +    caps = bhyveDriverGetCapabilities(privconn);
> +    if (!caps)
> +        return NULL;
> +
> +    if ((def = virDomainDefParseString(xml, caps, privconn->xmlopt,
> +                                       1 << VIR_DOMAIN_VIRT_BHYVE,
> +                                       VIR_DOMAIN_XML_INACTIVE)) == NULL)
> +        goto cleanup;
> +
> +    if (virDomainCreateXMLEnsureACL(conn, def) < 0)
> +        goto cleanup;
> +
> +    if (!(vm = virDomainObjListAdd(privconn->domains, def,
> +                                   privconn->xmlopt,
> +                                   VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, NULL)))
> +        goto cleanup;
> +    def = NULL;
> +
> +    dom = virGetDomain(conn, vm->def->name, vm->def->uuid);
> +    if (!dom)
> +        goto cleanup;
> +
> +    ret = virBhyveProcessStart(dom->conn, privconn, vm,
> +                               VIR_DOMAIN_RUNNING_BOOTED,
> +                               start_flags);
> +    if (ret) {
> +        virObjectUnref(dom);
> +        dom = NULL;
I think we could simplify the logic a little by calling
virBhyveProcessStart() after this block, right before

dom->id = vm->def->id; line. In that case we don't have to jump to
cleanup and do that cleanup in if (ret) block as well.

I'm going to push that with my comments squashed in, if no objections.

> +        /* If domain is not persistent, remove its data */
> +        if (!vm->persistent) {
> +            virDomainObjListRemove(privconn->domains, vm);
> +            vm = NULL;
> +        }
> +        goto cleanup;
> +    }
> +
> +    dom->id = vm->def->id;
> +
> + cleanup:
> +    virObjectUnref(caps);
> +    virDomainDefFree(def);
> +    if (vm)
> +        virObjectUnlock(vm);
> +
> +    return dom;
> +}
> +
>  static virDriver bhyveDriver = {
>      .no = VIR_DRV_BHYVE,
>      .name = "bhyve",
> @@ -1118,6 +1184,7 @@ static virDriver bhyveDriver = {
>      .connectNumOfDefinedDomains = bhyveConnectNumOfDefinedDomains, /* 1.2.2 */
>      .domainCreate = bhyveDomainCreate, /* 1.2.2 */
>      .domainCreateWithFlags = bhyveDomainCreateWithFlags, /* 1.2.3 */
> +    .domainCreateXML = bhyveDomainCreateXML, /* 1.2.4 */
>      .domainDestroy = bhyveDomainDestroy, /* 1.2.2 */
>      .domainLookupByUUID = bhyveDomainLookupByUUID, /* 1.2.2 */
>      .domainLookupByName = bhyveDomainLookupByName, /* 1.2.2 */
> -- 
> 1.9.0

Roman Bogorodskiy

Attachment: pgppWP17tAuSN.pgp
Description: PGP signature

--
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]