[ovirt-users] API Importing a VM from an export domain fails
Tim Bielawa
tbielawa at redhat.com
Wed Jan 13 14:50:25 EST 2016
Beautiful!!
Oh man, thanks so much. I never would have figured that out on my own.
On Wed, Jan 13, 2016 at 12:28 PM, Juan Hernández <jhernand at redhat.com>
wrote:
> On 01/13/2016 05:54 PM, Tim Bielawa wrote:
> >
> > On Wed, Jan 13, 2016 at 5:01 AM, Juan Hernández <jhernand at redhat.com
> > <mailto: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 <http://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 <http://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 <mailto: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
> > <mailto: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 <http://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 <http://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 <mailto: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
> > <mailto: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 <http://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?
> >
>
> In these latest examples that you sent looks like you are using the
> storage domain with id 27b5c6eb-ae68-4e85-930d-01bba13c07fc as both the
> source and the target of the import. They need to be different. The
> source, the one that you specify in the URL, should be the export
> storage domain. The target, the one you specify in <storage_domain
> id="...">, should be the one you want to import the VM to. Try to change
> that, please.
>
> --
> 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.
>
--
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/bf0404e7/attachment-0001.html>
More information about the Users
mailing list