[libvirt] [PATCH v10 9/9] parallels: implement VM creation

Daniel Veillard veillard at redhat.com
Wed Aug 1 03:34:17 UTC 2012


On Tue, Jul 31, 2012 at 10:56:13PM +0400, Dmitry Guryanov wrote:
> To create a new VM in Parallels Clud Server we should issue
> "prlctl create" command, and give path to the directory,
> where VM should be created. VM's storage will be in that
> directory later. So in this first version find out location
> of first VM's hard disk and create VM there.
> 
> Signed-off-by: Dmitry Guryanov <dguryanov at parallels.com>
> ---
>  src/parallels/parallels_driver.c  |   82 ++++++++++++++++++++++++++++++++++++-
>  src/parallels/parallels_storage.c |    5 +--
>  src/parallels/parallels_utils.h   |    2 +
>  3 files changed, 83 insertions(+), 6 deletions(-)
> 
> diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c
> index 54df6ce..a503fab 100644
> --- a/src/parallels/parallels_driver.c
> +++ b/src/parallels/parallels_driver.c
> @@ -1542,6 +1542,77 @@ parallelsApplyChanges(virDomainObjPtr dom, virDomainDefPtr new)
>      return 0;
>  }
>  
> +static int
> +parallelsCreateVm(virConnectPtr conn, virDomainDefPtr def)
> +{
> +    parallelsConnPtr privconn = conn->privateData;
> +    int i;
> +    virStorageVolDefPtr privvol = NULL;
> +    virStoragePoolObjPtr pool = NULL;
> +    virStorageVolPtr vol = NULL;
> +    char uuidstr[VIR_UUID_STRING_BUFLEN];
> +
> +    for (i = 0; i < def->ndisks; i++) {
> +        if (def->disks[i]->device != VIR_DOMAIN_DISK_DEVICE_DISK)
> +            continue;
> +
> +        vol = parallelsStorageVolumeLookupByPathLocked(conn, def->disks[i]->src);
> +        if (!vol) {
> +            virReportError(VIR_ERR_INVALID_ARG,
> +                           _("Can't find volume with path '%s'"),
> +                           def->disks[i]->src);
> +            return -1;
> +        }
> +        break;
> +    }
> +
> +    if (!vol) {
> +        /* We determine path to VM directory from volume, so
> +         * let's report error if no disk until better solution
> +         * will be found */
> +        virReportError(VIR_ERR_INVALID_ARG,
> +                       _("Can't create VM without hard disks"));
> +        return -1;
> +    }

  This error message without context

[...]
> @@ -1582,9 +1653,16 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
>  
>          def = NULL;
>      } else {
> -        virReportError(VIR_ERR_NO_SUPPORT, "%s",
> -                       _("Not implemented yet"));
> +        if (parallelsCreateVm(conn, def))
>              goto cleanup;
> +        if (parallelsLoadDomains(privconn, def->name))
> +            goto cleanup;
> +        dom = virDomainFindByName(&privconn->domains, def->name);
> +        if (!dom) {
> +            virReportError(VIR_ERR_INTERNAL_ERROR,
> +                           _("Domain is not defined after creation"));
> +            goto cleanup;
> +        }
>      }

  as well as this one led to 'make syntax-check errors', I squashed in
  the following which looks a safe way to try to provide informations,

Daniel

diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c
index e1bc83e..b57ac96 100644
--- a/src/parallels/parallels_driver.c
+++ b/src/parallels/parallels_driver.c
@@ -1568,7 +1568,8 @@ parallelsCreateVm(virConnectPtr conn, virDomainDefPtr def)
          * let's report error if no disk until better solution
          * will be found */
         virReportError(VIR_ERR_INVALID_ARG,
-                       _("Can't create VM without hard disks"));
+                       _("Can't create VM '%s' without hard disks"),
+                       (def->name ? def->name : "no name"));
         return -1;
     }
 
@@ -1657,7 +1658,8 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
         dom = virDomainFindByName(&privconn->domains, def->name);
         if (!dom) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
-                           _("Domain is not defined after creation"));
+                           _("Domain for '%s' is not defined after creation"),
+                           (def->name ? def->name : "no name"));
             goto cleanup;
         }
     }

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list