[ovirt-users] API Importing a VM from an export domain fails
Tim Bielawa
tbielawa at redhat.com
Wed Jan 13 11:54:38 EST 2016
On Wed, Jan 13, 2016 at 5:01 AM, Juan Hernández <jhernand at redhat.com> wrote:
> On 01/12/2016 08:44 PM, Tim Bielawa wrote:
> > Hello virt folks,
> >
> > Background:
> >
> > I'm using the REST API to import a VM from an attached export domain.
> > The VM was imported using the virt-v2v tool. I've tried this with cURL
> > and with the python SDK, both yield the same error message.
> >
> > RHEVM Version: 3.5.6.0-1
> > Python SDK Version: 3.5.6.0-1
> >
> > According to the documentation, importing should follow this syntax:
> >
> >> POST
> > /ovirt-engine/api/storagedomains/{storagedomain:id}/vms/{vm:id}/import
> >
> > With a small <action> body attached. In theory (by the documentation and
> > bug tracker [1]) either of these XML documents (both in the same paste)
> > should work:
> >
> > http://fpaste.org/309944/52627148/
> >
> > However, this fails with the following error message (full response in
> [2])
> >
> >> Cannot import VM. Storage Domain type not specified.
> >
> >
> > Steps to reproduce:
> >
> > 1. Import a VM into an export storage domain
> > 2. Create an XML document with an action like this (filling in the
> > correct values for the ID variables)
> >
> > <action>
> > <cluster id="<CLUSTER_ID>"/>
> > <storage_domain id="<STORAGE_DOMAIN_ID>">
> > <type>export</type>
> > </storage_domain>
> > <clone>True</clone>
> > <vm>
> > <name>IMPORTED_VM</name>
> > </vm>
> > </action>
> >
> >
> > 3. POST to the import location (again, substitute the correct ID
> > variables in the location)
> >
> >
> /ovirt-engine/api/storagedomains/<STORAGE_DOMAIN_ID>/vms/<VM_ID>/import
> >
> >
> >
> > Where is this storage domain type supposed to be defined, if not inside
> > of the storage_domain element as demonstrated in the documentation?
> >
> > I would appreciate any advice you can offer or pointers to useful
> > resources/documentation.
> >
> > Thanks!
> >
> >
> > [1] https://bugzilla.redhat.com/show_bug.cgi?id=1147011#c13
> > [2] http://fpaste.org/309949/14526274/
> >
> > --
> > Tim Bielawa
> > 1BA0 4FAB 4C13 FBA0 A036 4958 AD05 E75E 0333 AE37
> >
>
> The bug that you are referring to (bug 1147011) isn't fixed in version
> 3.5, and there are no plans to fix it, as far as I know. It will be
> fixed on only in 3.6. This means that you have to apply the workaround
> that Sven Kieske mentions in the description of the bug. So the XML
> document to send should look like this:
>
> <action>
> <cluster id="00000001-0001-0001-0001-000000000001"/>
> <storage_domain id="00000001-0001-0001-0001-000000000002"/>
> <clone>true</clone>
> <vm>
> <name>TBIELAWA_IMPORTED_VM</name>
>
> <!-- Note that this "snapshot" element is needed to avoid
> the bug, even if the VM doesn't have any snapshot. -->
> <snapshots>
> <collapse_snapshots>true</collapse_snapshots>
> </snapshots>
>
> </vm>
> </action>
>
> With the Python SDK should be something like this:
>
> # Find the target cluster and storage domain:
> target_cluster_id = api.clusters.get(name="mycluster").get_id()
> target_sd_id = api.storagedomains.get(name="mydata").get_id()
>
> # Find the export storage domain:
> export_sd = api.storagedomains.get(name="myexport")
>
> # Find the VM:
> vm = export_sd.vms.get(name="myvm")
>
> # Import the VM:
> vm.import_vm(
> params.Action(
> cluster=params.Cluster(id=target_cluster_id),
> storage_domain=params.StorageDomain(id=target_sd_id),
> clone=True,
> vm=params.VM(
> name="TBIELAWA_IMPORTED_VM",
> snapshots=params.Snapshots(
> collapse_snapshots=True
> )
> )
> )
> )
>
> --
> 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.
>
Thanks for the tips Juan, I appreciate the response.
I didn't understand how that work-around was supposed to work the first
time I read that in the BZ, thanks for clarifying with those examples.
Unfortunately though, I've integrated what you offered into my script and
am still running into walls. I found the ParseHelper.toXml function and
used that to debug what the params.Action is evaluating to before calling
the import_vm() method on the target import VM:
> <action>
> <storage_domain id="27b5c6eb-ae68-4e85-930d-01bba13c07fc"/>
> <cluster id="00000001-0001-0001-0001-000000000159"/>
> <vm>
> <name>vm.example.com</name>
> <snapshots>
> <collapse_snapshots>true</collapse_snapshots>
> </snapshots>
> </vm>
> <clone>true</clone>
> </action>
It's basically identical to what you offered in your example. Yet still, I
run into this problem:
Traceback (most recent call last):
> File "./rhev-test.py", line 300, in <module>
> result = latest_image.import_vm(import_params)
> File
> "/usr/lib/python2.7/site-packages/ovirtsdk/infrastructure/brokers.py", line
> 18763, in import_vm
> headers={"Correlation-Id":correlation_id}
> File
> "/usr/lib/python2.7/site-packages/ovirtsdk/infrastructure/proxy.py", line
> 118, in request
> persistent_auth=self._persistent_auth)
> File
> "/usr/lib/python2.7/site-packages/ovirtsdk/infrastructure/proxy.py", line
> 146, in __doRequest
> persistent_auth=persistent_auth
> File "/usr/lib/python2.7/site-packages/ovirtsdk/web/connection.py", line
> 134, in doRequest
> raise RequestError, response
> ovirtsdk.infrastructure.errors.RequestError:
> status: 400
> reason: Bad Request
> detail: Cannot import VM. Storage Domain type not specified.
Just to be absolutely sure about this, I ran some tests using the API and
cURL. Two tests, first without a <type> element in the storage domain,
second test with a <type> in the storage domain.
First test failed, same error message:
$ cat import-params.xml
> <action>
> <storage_domain id="27b5c6eb-ae68-4e85-930d-01bba13c07fc"/>
> <cluster id="00000001-0001-0001-0001-000000000159"/>
> <vm>
> <name>vm.example.com</name>
> <snapshots>
> <collapse_snapshots>true</collapse_snapshots>
> </snapshots>
> </vm>
> <clone>true</clone>
> </action>
>
> $ curl -X POST -H "Accept: application/xml" -H "Content-type:
> application/xml" -u tbielawa at redhat.com --cacert /home/....crt -d
> @import-params.xml https://
> ...:443/ovirt-engine/api/storagedomains/27b5c6eb-ae68-4e85-930d-01bba13c07fc/vms/69902f78-7dbf-45cb-a264-f29edb8e7f0a/import
> Enter host password for user 'tbielawa at redhat.com':
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <action>
> <storage_domain id="27b5c6eb-ae68-4e85-930d-01bba13c07fc"/>
> <cluster id="00000001-0001-0001-0001-000000000159"/>
> <vm>
> <name>vm.example.com</name>
> <snapshots>
> <collapse_snapshots>true</collapse_snapshots>
> </snapshots>
> </vm>
> <clone>true</clone>
> <status>
> <state>failed</state>
> </status>
> <fault>
> <reason>Operation Failed</reason>
> <detail>[Cannot import VM. Storage Domain type not
> specified.]</detail>
> </fault>
> </action>
Second test with the <type> set failed as well:
$ cat import-params.xml
> <action>
> <storage_domain id="27b5c6eb-ae68-4e85-930d-01bba13c07fc">
> <type>export</type>
> </storage_domain>
> <cluster id="00000001-0001-0001-0001-000000000159"/>
> <vm>
> <name>vm.example.com</name>
> <snapshots>
> <collapse_snapshots>true</collapse_snapshots>
> </snapshots>
> </vm>
> <clone>true</clone>
> </action>
>
$ curl -X POST -H "Accept: application/xml" -H "Content-type:
> application/xml" -u tbielawa at redhat.com --cacert /home/....crt -d
> @import-params.xml https://
> ...:443/ovirt-engine/api/storagedomains/27b5c6eb-ae68-4e85-930d-01bba13c07fc/vms/69902f78-7dbf-45cb-a264-f29edb8e7f0a/import
> Enter host password for user 'tbielawa at redhat.com':
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <action>
> <storage_domain id="27b5c6eb-ae68-4e85-930d-01bba13c07fc">
> <type>export</type>
> </storage_domain>
> <cluster id="00000001-0001-0001-0001-000000000159"/>
> <vm>
> <name>vm.example.com</name>
> <snapshots>
> <collapse_snapshots>true</collapse_snapshots>
> </snapshots>
> </vm>
> <clone>true</clone>
> <status>
> <state>failed</state>
> </status>
> <fault>
> <reason>Operation Failed</reason>
> <detail>[Cannot import VM. Storage Domain type not
> specified.]</detail>
> </fault>
> </action>
I'm stumped. Any other ideas?
--
Tim Bielawa, Sr. ${::title}
Cell: 919.332.6411 | IRC: tbielawa (#platops)
1BA0 4FAB 4C13 FBA0 A036 4958 AD05 E75E 0333 AE37
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/users/attachments/20160113/8270f796/attachment-0001.html>
More information about the Users
mailing list