<div dir="ltr">Beautiful!!<div><br></div><div>Oh man, thanks so much. I never would have figured that out on my own.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 13, 2016 at 12:28 PM, Juan Hernández <span dir="ltr">&lt;<a href="mailto:jhernand@redhat.com" target="_blank">jhernand@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 01/13/2016 05:54 PM, Tim Bielawa wrote:<br>
&gt;<br>
&gt; On Wed, Jan 13, 2016 at 5:01 AM, Juan Hernández &lt;<a href="mailto:jhernand@redhat.com">jhernand@redhat.com</a><br>
</span><div><div class="h5">&gt; &lt;mailto:<a href="mailto:jhernand@redhat.com">jhernand@redhat.com</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;     On 01/12/2016 08:44 PM, Tim Bielawa wrote:<br>
&gt;     &gt; Hello virt folks,<br>
&gt;     &gt;<br>
&gt;     &gt; Background:<br>
&gt;     &gt;<br>
&gt;     &gt; I&#39;m using the REST API to import a VM from an attached export domain.<br>
&gt;     &gt; The VM was imported using the virt-v2v tool. I&#39;ve tried this with cURL<br>
&gt;     &gt; and with the python SDK, both yield the same error message.<br>
&gt;     &gt;<br>
&gt;     &gt; RHEVM Version: 3.5.6.0-1<br>
&gt;     &gt; Python SDK Version: 3.5.6.0-1<br>
&gt;     &gt;<br>
&gt;     &gt; According to the documentation, importing should follow this syntax:<br>
&gt;     &gt;<br>
&gt;     &gt;&gt; POST<br>
&gt;     &gt; /ovirt-engine/api/storagedomains/{storagedomain:id}/vms/{vm:id}/import<br>
&gt;     &gt;<br>
&gt;     &gt; With a small &lt;action&gt; body attached. In theory (by the<br>
&gt;     documentation and<br>
&gt;     &gt; bug tracker [1]) either of these XML documents (both in the same<br>
&gt;     paste)<br>
&gt;     &gt; should work:<br>
&gt;     &gt;<br>
&gt;     &gt; <a href="http://fpaste.org/309944/52627148/" rel="noreferrer" target="_blank">http://fpaste.org/309944/52627148/</a><br>
&gt;     &gt;<br>
&gt;     &gt; However, this fails with the following error message (full<br>
&gt;     response in [2])<br>
&gt;     &gt;<br>
&gt;     &gt;&gt; Cannot import VM. Storage Domain type not specified.<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt; Steps to reproduce:<br>
&gt;     &gt;<br>
&gt;     &gt; 1. Import a VM into an export storage domain<br>
&gt;     &gt; 2. Create an XML document with an action like this (filling in the<br>
&gt;     &gt; correct values for the ID variables)<br>
&gt;     &gt;<br>
&gt;     &gt;     &lt;action&gt;<br>
&gt;     &gt;       &lt;cluster id=&quot;&lt;CLUSTER_ID&gt;&quot;/&gt;<br>
&gt;     &gt;       &lt;storage_domain id=&quot;&lt;STORAGE_DOMAIN_ID&gt;&quot;&gt;<br>
&gt;     &gt;         &lt;type&gt;export&lt;/type&gt;<br>
&gt;     &gt;       &lt;/storage_domain&gt;<br>
&gt;     &gt;       &lt;clone&gt;True&lt;/clone&gt;<br>
&gt;     &gt;       &lt;vm&gt;<br>
&gt;     &gt;         &lt;name&gt;IMPORTED_VM&lt;/name&gt;<br>
&gt;     &gt;       &lt;/vm&gt;<br>
&gt;     &gt;     &lt;/action&gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt; 3. POST to the import location (again, substitute the correct ID<br>
&gt;     &gt; variables in the location)<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;      /ovirt-engine/api/storagedomains/&lt;STORAGE_DOMAIN_ID&gt;/vms/&lt;VM_ID&gt;/import<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt; Where is this storage domain type supposed to be defined, if not<br>
&gt;     inside<br>
&gt;     &gt; of the storage_domain element as demonstrated in the documentation?<br>
&gt;     &gt;<br>
&gt;     &gt; I would appreciate any advice you can offer or pointers to useful<br>
&gt;     &gt; resources/documentation.<br>
&gt;     &gt;<br>
&gt;     &gt; Thanks!<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt; [1] <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1147011#c13" rel="noreferrer" target="_blank">https://bugzilla.redhat.com/show_bug.cgi?id=1147011#c13</a><br>
&gt;     &gt; [2] <a href="http://fpaste.org/309949/14526274/" rel="noreferrer" target="_blank">http://fpaste.org/309949/14526274/</a><br>
&gt;     &gt;<br>
&gt;     &gt; --<br>
&gt;     &gt; Tim Bielawa<br>
&gt;     &gt; 1BA0 4FAB 4C13 FBA0 A036  4958 AD05 E75E 0333 AE37<br>
&gt;     &gt;<br>
&gt;<br>
&gt;     The bug that you are referring to (bug 1147011) isn&#39;t fixed in version<br>
&gt;     3.5, and there are no plans to fix it, as far as I know. It will be<br>
&gt;     fixed on only in 3.6. This means that you have to apply the workaround<br>
&gt;     that Sven Kieske mentions in the description of the bug. So the XML<br>
&gt;     document to send should look like this:<br>
&gt;<br>
&gt;       &lt;action&gt;<br>
&gt;         &lt;cluster id=&quot;00000001-0001-0001-0001-000000000001&quot;/&gt;<br>
&gt;         &lt;storage_domain id=&quot;00000001-0001-0001-0001-000000000002&quot;/&gt;<br>
&gt;         &lt;clone&gt;true&lt;/clone&gt;<br>
&gt;         &lt;vm&gt;<br>
&gt;           &lt;name&gt;TBIELAWA_IMPORTED_VM&lt;/name&gt;<br>
&gt;<br>
&gt;           &lt;!-- Note that this &quot;snapshot&quot; element is needed to avoid<br>
&gt;                the bug, even if the VM doesn&#39;t have any snapshot. --&gt;<br>
&gt;           &lt;snapshots&gt;<br>
&gt;             &lt;collapse_snapshots&gt;true&lt;/collapse_snapshots&gt;<br>
&gt;           &lt;/snapshots&gt;<br>
&gt;<br>
&gt;         &lt;/vm&gt;<br>
&gt;       &lt;/action&gt;<br>
&gt;<br>
&gt;     With the Python SDK should be something like this:<br>
&gt;<br>
&gt;       # Find the target cluster and storage domain:<br>
&gt;       target_cluster_id = api.clusters.get(name=&quot;mycluster&quot;).get_id()<br>
&gt;       target_sd_id = api.storagedomains.get(name=&quot;mydata&quot;).get_id()<br>
&gt;<br>
&gt;       # Find the export storage domain:<br>
&gt;       export_sd = api.storagedomains.get(name=&quot;myexport&quot;)<br>
&gt;<br>
&gt;       # Find the VM:<br>
&gt;       vm = export_sd.vms.get(name=&quot;myvm&quot;)<br>
&gt;<br>
&gt;       # Import the VM:<br>
&gt;       vm.import_vm(<br>
&gt;           params.Action(<br>
&gt;               cluster=params.Cluster(id=target_cluster_id),<br>
&gt;               storage_domain=params.StorageDomain(id=target_sd_id),<br>
&gt;               clone=True,<br>
&gt;               vm=params.VM(<br>
&gt;                   name=&quot;TBIELAWA_IMPORTED_VM&quot;,<br>
&gt;                   snapshots=params.Snapshots(<br>
&gt;                       collapse_snapshots=True<br>
&gt;                   )<br>
&gt;               )<br>
&gt;           )<br>
&gt;       )<br>
&gt;<br>
&gt;     --<br>
&gt;     Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta<br>
&gt;     3ºD, 28016 Madrid, Spain<br>
&gt;     Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat<br>
&gt;     S.L.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Thanks for the tips Juan, I appreciate the response.<br>
&gt;<br>
&gt; I didn&#39;t understand how that work-around was supposed to work the first<br>
&gt; time I read that in the BZ, thanks for clarifying with those examples.<br>
&gt;<br>
&gt; Unfortunately though, I&#39;ve integrated what you offered into my script<br>
&gt; and am still running into walls. I found the ParseHelper.toXml function<br>
&gt; and used that to debug what the params.Action is evaluating to before<br>
&gt; calling the import_vm() method on the target import VM:<br>
&gt;<br>
&gt;&gt; &lt;action&gt;<br>
&gt;&gt;     &lt;storage_domain id=&quot;27b5c6eb-ae68-4e85-930d-01bba13c07fc&quot;/&gt;<br>
&gt;&gt;     &lt;cluster id=&quot;00000001-0001-0001-0001-000000000159&quot;/&gt;<br>
&gt;&gt;     &lt;vm&gt;<br>
</div></div>&gt;&gt;         &lt;name&gt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">vm.example.com</a> &lt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">http://vm.example.com</a>&gt;&lt;/name&gt;<br>
<div><div class="h5">&gt;&gt;         &lt;snapshots&gt;<br>
&gt;&gt;             &lt;collapse_snapshots&gt;true&lt;/collapse_snapshots&gt;<br>
&gt;&gt;         &lt;/snapshots&gt;<br>
&gt;&gt;     &lt;/vm&gt;<br>
&gt;  &gt;    &lt;clone&gt;true&lt;/clone&gt;<br>
&gt;&gt; &lt;/action&gt;<br>
&gt;<br>
&gt; It&#39;s basically identical to what you offered in your example. Yet still,<br>
&gt; I run into this problem:<br>
&gt;<br>
&gt;     Traceback (most recent call last):<br>
&gt;       File &quot;./rhev-test.py&quot;, line 300, in &lt;module&gt;<br>
&gt;         result = latest_image.import_vm(import_params)<br>
&gt;       File<br>
&gt;     &quot;/usr/lib/python2.7/site-packages/ovirtsdk/infrastructure/brokers.py&quot;,<br>
&gt;     line 18763, in import_vm<br>
&gt;         headers={&quot;Correlation-Id&quot;:correlation_id}<br>
&gt;       File<br>
&gt;     &quot;/usr/lib/python2.7/site-packages/ovirtsdk/infrastructure/proxy.py&quot;,<br>
&gt;     line 118, in request<br>
&gt;         persistent_auth=self._persistent_auth)<br>
&gt;       File<br>
&gt;     &quot;/usr/lib/python2.7/site-packages/ovirtsdk/infrastructure/proxy.py&quot;,<br>
&gt;     line 146, in __doRequest<br>
&gt;         persistent_auth=persistent_auth<br>
&gt;       File<br>
&gt;     &quot;/usr/lib/python2.7/site-packages/ovirtsdk/web/connection.py&quot;, line<br>
&gt;     134, in doRequest<br>
&gt;         raise RequestError, response<br>
&gt;     ovirtsdk.infrastructure.errors.RequestError:<br>
&gt;     status: 400<br>
&gt;     reason: Bad Request<br>
&gt;     detail: Cannot import VM. Storage Domain type not specified.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Just to be absolutely sure about this, I ran some tests using the API<br>
&gt; and cURL. Two tests, first without a &lt;type&gt; element in the storage<br>
&gt; domain, second test with a &lt;type&gt; in the storage domain.<br>
&gt;<br>
&gt; First test failed, same error message:<br>
&gt;<br>
&gt;     $ cat import-params.xml<br>
&gt;     &lt;action&gt;<br>
&gt;         &lt;storage_domain id=&quot;27b5c6eb-ae68-4e85-930d-01bba13c07fc&quot;/&gt;<br>
&gt;         &lt;cluster id=&quot;00000001-0001-0001-0001-000000000159&quot;/&gt;<br>
&gt;         &lt;vm&gt;<br>
</div></div>&gt;             &lt;name&gt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">vm.example.com</a> &lt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">http://vm.example.com</a>&gt;&lt;/name&gt;<br>
<span class="">&gt;             &lt;snapshots&gt;<br>
&gt;                 &lt;collapse_snapshots&gt;true&lt;/collapse_snapshots&gt;<br>
&gt;             &lt;/snapshots&gt;<br>
&gt;         &lt;/vm&gt;<br>
&gt;         &lt;clone&gt;true&lt;/clone&gt;<br>
&gt;     &lt;/action&gt;<br>
&gt;<br>
&gt;     $ curl -X POST -H &quot;Accept: application/xml&quot; -H &quot;Content-type:<br>
</span>&gt;     application/xml&quot; -u <a href="mailto:tbielawa@redhat.com">tbielawa@redhat.com</a> &lt;mailto:<a href="mailto:tbielawa@redhat.com">tbielawa@redhat.com</a>&gt;<br>
<span class="">&gt;     --cacert /home/....crt -d @import-params.xml<br>
&gt;     https://...:443/ovirt-engine/api/storagedomains/27b5c6eb-ae68-4e85-930d-01bba13c07fc/vms/69902f78-7dbf-45cb-a264-f29edb8e7f0a/import<br>
&gt;     Enter host password for user &#39;<a href="mailto:tbielawa@redhat.com">tbielawa@redhat.com</a><br>
</span>&gt;     &lt;mailto:<a href="mailto:tbielawa@redhat.com">tbielawa@redhat.com</a>&gt;&#39;:<br>
<span class="">&gt;     &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;<br>
&gt;     &lt;action&gt;<br>
&gt;         &lt;storage_domain id=&quot;27b5c6eb-ae68-4e85-930d-01bba13c07fc&quot;/&gt;<br>
&gt;         &lt;cluster id=&quot;00000001-0001-0001-0001-000000000159&quot;/&gt;<br>
&gt;         &lt;vm&gt;<br>
</span>&gt;             &lt;name&gt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">vm.example.com</a> &lt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">http://vm.example.com</a>&gt;&lt;/name&gt;<br>
<span class="">&gt;             &lt;snapshots&gt;<br>
&gt;                 &lt;collapse_snapshots&gt;true&lt;/collapse_snapshots&gt;<br>
&gt;             &lt;/snapshots&gt;<br>
&gt;         &lt;/vm&gt;<br>
&gt;         &lt;clone&gt;true&lt;/clone&gt;<br>
&gt;         &lt;status&gt;<br>
&gt;             &lt;state&gt;failed&lt;/state&gt;<br>
&gt;         &lt;/status&gt;<br>
&gt;         &lt;fault&gt;<br>
&gt;             &lt;reason&gt;Operation Failed&lt;/reason&gt;<br>
&gt;             &lt;detail&gt;[Cannot import VM. Storage Domain type not<br>
&gt;     specified.]&lt;/detail&gt;<br>
&gt;         &lt;/fault&gt;<br>
&gt;     &lt;/action&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Second test with the &lt;type&gt; set failed as well:<br>
&gt;<br>
&gt;     $ cat import-params.xml<br>
&gt;     &lt;action&gt;<br>
&gt;         &lt;storage_domain id=&quot;27b5c6eb-ae68-4e85-930d-01bba13c07fc&quot;&gt;<br>
&gt;             &lt;type&gt;export&lt;/type&gt;<br>
&gt;         &lt;/storage_domain&gt;<br>
&gt;         &lt;cluster id=&quot;00000001-0001-0001-0001-000000000159&quot;/&gt;<br>
&gt;         &lt;vm&gt;<br>
</span>&gt;             &lt;name&gt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">vm.example.com</a> &lt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">http://vm.example.com</a>&gt;&lt;/name&gt;<br>
<span class="">&gt;             &lt;snapshots&gt;<br>
&gt;                 &lt;collapse_snapshots&gt;true&lt;/collapse_snapshots&gt;<br>
&gt;             &lt;/snapshots&gt;<br>
&gt;         &lt;/vm&gt;<br>
&gt;         &lt;clone&gt;true&lt;/clone&gt;<br>
&gt;     &lt;/action&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;     $ curl -X POST -H &quot;Accept: application/xml&quot; -H &quot;Content-type:<br>
</span>&gt;     application/xml&quot; -u <a href="mailto:tbielawa@redhat.com">tbielawa@redhat.com</a> &lt;mailto:<a href="mailto:tbielawa@redhat.com">tbielawa@redhat.com</a>&gt;<br>
<span class="">&gt;     --cacert /home/....crt -d @import-params.xml<br>
&gt;     https://...:443/ovirt-engine/api/storagedomains/27b5c6eb-ae68-4e85-930d-01bba13c07fc/vms/69902f78-7dbf-45cb-a264-f29edb8e7f0a/import<br>
&gt;     Enter host password for user &#39;<a href="mailto:tbielawa@redhat.com">tbielawa@redhat.com</a><br>
</span>&gt;     &lt;mailto:<a href="mailto:tbielawa@redhat.com">tbielawa@redhat.com</a>&gt;&#39;:<br>
<span class="">&gt;     &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;<br>
&gt;     &lt;action&gt;<br>
&gt;         &lt;storage_domain id=&quot;27b5c6eb-ae68-4e85-930d-01bba13c07fc&quot;&gt;<br>
&gt;             &lt;type&gt;export&lt;/type&gt;<br>
&gt;         &lt;/storage_domain&gt;<br>
&gt;         &lt;cluster id=&quot;00000001-0001-0001-0001-000000000159&quot;/&gt;<br>
&gt;         &lt;vm&gt;<br>
</span>&gt;             &lt;name&gt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">vm.example.com</a> &lt;<a href="http://vm.example.com" rel="noreferrer" target="_blank">http://vm.example.com</a>&gt;&lt;/name&gt;<br>
<span class="">&gt;             &lt;snapshots&gt;<br>
&gt;                 &lt;collapse_snapshots&gt;true&lt;/collapse_snapshots&gt;<br>
&gt;             &lt;/snapshots&gt;<br>
&gt;         &lt;/vm&gt;<br>
&gt;         &lt;clone&gt;true&lt;/clone&gt;<br>
&gt;         &lt;status&gt;<br>
&gt;             &lt;state&gt;failed&lt;/state&gt;<br>
&gt;         &lt;/status&gt;<br>
&gt;         &lt;fault&gt;<br>
&gt;             &lt;reason&gt;Operation Failed&lt;/reason&gt;<br>
&gt;             &lt;detail&gt;[Cannot import VM. Storage Domain type not<br>
&gt;     specified.]&lt;/detail&gt;<br>
&gt;         &lt;/fault&gt;<br>
&gt;     &lt;/action&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; I&#39;m stumped. Any other ideas?<br>
&gt;<br>
<br>
</span>In these latest examples that you sent looks like you are using the<br>
storage domain with id 27b5c6eb-ae68-4e85-930d-01bba13c07fc as both the<br>
source and the target of the import. They need to be different. The<br>
source, the one that you specify in the URL, should be the export<br>
storage domain. The target, the one you specify in &lt;storage_domain<br>
id=&quot;...&quot;&gt;, should be the one you want to import the VM to. Try to change<br>
that, please.<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta<br>
3ºD, 28016 Madrid, Spain<br>
Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Tim Bielawa, Sr. ${::title}<br>Cell: 919.332.6411  | IRC: tbielawa (#platops)<br>1BA0 4FAB 4C13 FBA0 A036  4958 AD05 E75E 0333 AE37<br></div></div>
</div>