[ovirt-users] Attaching storage to VM via JSON REST

Juan Hernandez jhernand at redhat.com
Thu May 8 09:34:30 UTC 2014


On 05/08/2014 08:30 AM, Gadi Ickowicz wrote:
> I have no experience using JSON myself (I use XML when using REST), however, note that the storage_domain is a list of ids, inside of a storage_domains object. Maybe try to send a request formatted like that?
> 
> Juan - any other insights?
> 
> Gadi Ickowicz
> 

When adding a disk to a VM both a single domain storage and a list of
storage domains are accepted. The JSON representation is the following:

  "storage_domain": {
    "id": "6fbee79d-5b71-48c1-b86c-ee9755a46013"
  }

Note that "name" isn't accepted here, you have to use the "id".

The JSON representation for multiple domains is the following (note that
only the first one is used):

  "storage_domains": {
    "storage_domain": [ {
      "name": "am_data"
    } ]
  }

Note that "id" isn't accepted here, you have to use "name".

> ----- Original Message -----
> From: "Andrew Morrison" <andy.wmorrison at gmail.com>
> To: users at ovirt.org
> Sent: Wednesday, May 7, 2014 11:23:13 PM
> Subject: [ovirt-users] Attaching storage to VM via JSON REST
> 
> Hi all, 
> 
> I'm exploring using ovirt's REST APIs to manage VM creation/deletion/etc. I can create the VM, attach an ISO and change boot order, but I'm unable to attach a storage disk to the VM. I send a POST request to /api/vms/<vm uuid>/disks with the structure: 
> {"storage_domain": 
> {"name":"am_data", 
> "id":"6fbee79d-5b71-48c1-b86c-ee9755a46013" 
> }, 
> "size":"4294967296", 
> "type":"system", 
> "interface":"ide", 
> "format":"raw", 
> "sparse":"false", 
> "bootable":"true", 
> "wipe_after_delete":"false" 
> } 
> The response I receive is 
> { 
> "reason" : "Operation Failed", 
> "detail" : "[Cannot add Virtual Machine Disk. Storage Domain doesn't exist.]" 
> } 
> For the storage domain, I've tried just the name, just the id, and both with the same results. When I attach storage from the GUI, the disk is created/attached fine, and a GET request for the disks of the VM shows the storage domain as the same as I was attempting to use before. 
> "storage_domains" : { 
> "storage_domain" : [ { 
> "id" : "6fbee79d-5b71-48c1-b86c-ee9755a46013" 
> } ] 
> }, 
> 
> Any idea what I might be doing wrong? 
> 
> Thanks, 
> Andrew 
> 

The problem with the JSON document that you are sending is that you are
using strings to represent numeric and boolean values. That generates an
exception inside the engine. Try the following:

  {
    "storage_domain": {
      "id": "6fbee79d-5b71-48c1-b86c-ee9755a46013"
    },
    "size": 4294967296,
    "type": "system",
    "interface": "ide",
    "format": "raw",
    "sparse": false,
    "bootable": true,
    "wipe_after_delete": false
  }

Note that "size" is an integer, no quotes allowed. Same for "sparse",
"bootable" and "wipe_after_delete", they are booleans, no quotes allowed.

The long exception message that you get when sending an incorrect JSON
document is a bug in the error reporting path, it will be fixed in
version 3.4.1:

  https://bugzilla.redhat.com/show_bug.cgi?id=1093755

-- 
Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta
3ºD, 28016 Madrid, Spain
Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.



More information about the Users mailing list