<?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>instances (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 137</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">instances</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">inst_arr</span>, <span class="ruby-identifier">machine_vms</span>, <span class="ruby-identifier">pending_vms</span> = [], [], [] <span class="ruby-identifier">safely</span> <span class="ruby-keyword kw">do</span> <span class="ruby-comment cmt"># Using find_vm is a way faster than listing all virtual machines</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:id</span>] <span class="ruby-identifier">list_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">compact</span> <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">list_vms</span> = <span class="ruby-identifier">list_virtual_machines</span>(<span class="ruby-identifier">credentials</span>) <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># Split machines to the 'real' one and PENDING one.</span> <span class="ruby-identifier">machine_vms</span> = <span class="ruby-identifier">list_vms</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-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-identifier">pending_vms</span> = <span class="ruby-identifier">list_vms</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">:stored_instance</span>] }.<span class="ruby-identifier">collect</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">:stored_instance</span>]} <span class="ruby-keyword kw">end</span> <span class="ruby-identifier">safely</span> <span class="ruby-keyword kw">do</span> <span class="ruby-identifier">inst_arr</span> = <span class="ruby-identifier">machine_vms</span>.<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vm_hash</span><span class="ruby-operator">|</span> <span class="ruby-comment cmt"># Since all calls to vm are threaten as SOAP calls, reduce them using</span> <span class="ruby-comment cmt"># local variable.</span> <span class="ruby-identifier">vm</span>, <span class="ruby-identifier">realm_id</span> = <span class="ruby-identifier">vm_hash</span>[<span class="ruby-identifier">:instance</span>], <span class="ruby-identifier">vm_hash</span>[<span class="ruby-identifier">:datastore</span>] <span class="ruby-identifier">config</span> = <span class="ruby-identifier">vm</span>.<span class="ruby-identifier">summary</span>.<span class="ruby-identifier">config</span> <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">config</span> <span class="ruby-comment cmt"># Template (image_id) is beeing stored as 'extraConfig' parameter in</span> <span class="ruby-comment cmt"># instance.</span> <span class="ruby-identifier">template_id</span> = <span class="ruby-identifier">vm</span>.<span class="ruby-identifier">config</span>[<span class="ruby-identifier">:extraConfig</span>].<span class="ruby-identifier">select</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">key</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'template_id'</span> } <span class="ruby-identifier">template_id</span> = <span class="ruby-identifier">template_id</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">value</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">template_id</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-identifier">properties</span> = { <span class="ruby-identifier">:memory</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:memorySizeMB</span>], <span class="ruby-identifier">:cpus</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:numCpu</span>], <span class="ruby-identifier">:storage</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">vm</span>.<span class="ruby-identifier">summary</span>.<span class="ruby-identifier">storage</span>[<span class="ruby-identifier">:unshared</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">instance_state</span> = <span class="ruby-identifier">convert_state</span>(<span class="ruby-identifier">:instance</span>, <span class="ruby-identifier">vm</span>.<span class="ruby-identifier">summary</span>.<span class="ruby-identifier">runtime</span>[<span class="ruby-identifier">:powerState</span>]) <span class="ruby-identifier">instance_profile</span> = <span class="ruby-constant">InstanceProfile</span><span class="ruby-operator">::</span><span class="ruby-identifier">new</span>(<span class="ruby-value str">'default'</span>, <span class="ruby-identifier">:hwp_cpu</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:cpus</span>], <span class="ruby-identifier">:hwp_memory</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:memory</span>], <span class="ruby-identifier">:hwp_storage</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:storage</span>]) <span class="ruby-comment cmt"># We're getting IP address from 'vmware guest tools'.</span> <span class="ruby-comment cmt"># If guest tools are not installed, we return list of MAC addresses</span> <span class="ruby-comment cmt"># assigned to this instance.</span> <span class="ruby-identifier">instance_address</span> = <span class="ruby-identifier">vm</span>.<span class="ruby-identifier">guest</span>[<span class="ruby-identifier">:net</span>].<span class="ruby-identifier">empty?</span> <span class="ruby-value">? </span><span class="ruby-identifier">vm</span>.<span class="ruby-identifier">macs</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">first</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">vm</span>.<span class="ruby-identifier">guest</span>[<span class="ruby-identifier">:net</span>].<span class="ruby-identifier">first</span>[<span class="ruby-identifier">:ipAddress</span>].<span class="ruby-identifier">first</span> <span class="ruby-constant">Instance</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">:owner_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">credentials</span>.<span class="ruby-identifier">user</span>, <span class="ruby-identifier">:image_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">template_id</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">:realm_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">realm_id</span>, <span class="ruby-identifier">:state</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">instance_state</span>, <span class="ruby-identifier">:public_addresses</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">instance_address</span>, <span class="ruby-identifier">:private_addresses</span> =<span class="ruby-operator">></span> [], <span class="ruby-identifier">:instance_profile</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">instance_profile</span>, <span class="ruby-identifier">:actions</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">instance_actions_for</span>( <span class="ruby-identifier">instance_state</span> ), <span class="ruby-identifier">:create_image</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span> ) <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span> <span class="ruby-identifier">inst_arr</span>.<span class="ruby-identifier">compact!</span> <span class="ruby-comment cmt"># Append 'temporary' instances to real instances.</span> <span class="ruby-comment cmt"># 'Temporary' or 'stored' instance are used to speed up instance creation</span> <span class="ruby-comment cmt"># process by serializing instances to datastore and map instance to task.</span> <span class="ruby-comment cmt">#</span> <span class="ruby-identifier">inst_arr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">pending_vms</span> <span class="ruby-identifier">filter_on</span>( <span class="ruby-identifier">inst_arr</span>, <span class="ruby-identifier">:state</span>, <span class="ruby-identifier">opts</span> ) <span class="ruby-keyword kw">end</span></pre> </body> </html>