[libvirt] [PATCHv2] bhyve: domainCreateXML

Roman Bogorodskiy bogorodskiy at gmail.com
Fri Apr 11 16:49:01 UTC 2014


  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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140411/fb6316e9/attachment-0001.sig>


More information about the libvir-list mailing list