<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>images (Deltacloud::Drivers::VSphere::VSphereDriver)</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" /> </head> <body class="standalone-code"> <pre><span class="ruby-comment cmt"># File lib/deltacloud/drivers/vsphere/vsphere_driver.rb, line 71</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">images</span>(<span class="ruby-identifier">credentials</span>, <span class="ruby-identifier">opts</span>=<span class="ruby-keyword kw">nil</span>) <span class="ruby-identifier">cloud</span> = <span class="ruby-identifier">new_client</span>(<span class="ruby-identifier">credentials</span>) <span class="ruby-identifier">img_arr</span> = [] <span class="ruby-comment cmt"># Skip traversing through all instances in all datacenters when ID</span> <span class="ruby-comment cmt"># attribute is set</span> <span class="ruby-identifier">safely</span> <span class="ruby-keyword kw">do</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:id</span>] <span class="ruby-identifier">template_vms</span> = [ <span class="ruby-identifier">find_vm</span>(<span class="ruby-identifier">credentials</span>, <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:id</span>]) ].<span class="ruby-identifier">select</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">vm</span><span class="ruby-operator">|</span> <span class="ruby-identifier">vm</span>[<span class="ruby-identifier">:instance</span>] }.<span class="ruby-identifier">compact</span> <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">template_vms</span> = <span class="ruby-identifier">list_virtual_machines</span>(<span class="ruby-identifier">credentials</span>).<span class="ruby-identifier">select</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">vm</span><span class="ruby-operator">|</span> <span class="ruby-identifier">vm</span>[<span class="ruby-identifier">:instance</span>] <span class="ruby-operator">&&</span> <span class="ruby-identifier">vm</span>[<span class="ruby-identifier">:instance</span>].<span class="ruby-identifier">summary</span>.<span class="ruby-identifier">config</span>[<span class="ruby-identifier">:template</span>] } <span class="ruby-keyword kw">end</span> <span class="ruby-identifier">img_arr</span> = <span class="ruby-identifier">template_vms</span>.<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">image_hash</span><span class="ruby-operator">|</span> <span class="ruby-identifier">image</span>, <span class="ruby-identifier">realm</span> = <span class="ruby-identifier">image_hash</span>[<span class="ruby-identifier">:instance</span>], <span class="ruby-identifier">image_hash</span>[<span class="ruby-identifier">:datastore</span>] <span class="ruby-identifier">config</span> = <span class="ruby-identifier">image</span>.<span class="ruby-identifier">summary</span>.<span class="ruby-identifier">config</span> <span class="ruby-identifier">instance_state</span> = <span class="ruby-identifier">convert_state</span>(<span class="ruby-identifier">:instance</span>, <span class="ruby-identifier">image</span>.<span class="ruby-identifier">summary</span>.<span class="ruby-identifier">runtime</span>[<span class="ruby-identifier">:powerState</span>]) <span class="ruby-comment cmt"># Preload all properties to save multiple SOAP calls to vSphere</span> <span class="ruby-identifier">properties</span> = { <span class="ruby-identifier">:name</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:name</span>], <span class="ruby-identifier">:full_name</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:guestFullName</span>] } <span class="ruby-identifier">image_state</span> = <span class="ruby-identifier">convert_state</span>(<span class="ruby-identifier">:image</span>, <span class="ruby-identifier">image</span>.<span class="ruby-identifier">summary</span>.<span class="ruby-identifier">runtime</span>[<span class="ruby-identifier">:powerState</span>]) <span class="ruby-comment cmt"># This will determine image architecture using image description.</span> <span class="ruby-comment cmt"># Ussualy description include '64-bit' or '32-bit'. In case you used</span> <span class="ruby-comment cmt"># some weird template/OS it will fallback to 64 bit</span> <span class="ruby-identifier">image_architecture</span> = <span class="ruby-identifier">extract_architecture</span>(<span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:full_name</span>]) <span class="ruby-operator">||</span> <span class="ruby-value str">'x86_64'</span> <span class="ruby-constant">Image</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">:id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:name</span>], <span class="ruby-identifier">:name</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:name</span>], <span class="ruby-identifier">:architecture</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">image_architecture</span>, <span class="ruby-identifier">:owner_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">credentials</span>.<span class="ruby-identifier">user</span>, <span class="ruby-identifier">:description</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:full_name</span>], <span class="ruby-identifier">:state</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">image_state</span> ) <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span> <span class="ruby-identifier">img_arr</span> = <span class="ruby-identifier">filter_on</span>( <span class="ruby-identifier">img_arr</span>, <span class="ruby-identifier">:architecture</span>, <span class="ruby-identifier">opts</span> ) <span class="ruby-identifier">img_arr</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">e</span>.<span class="ruby-identifier">owner_id</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">name</span>]} <span class="ruby-keyword kw">end</span></pre> </body> </html>