Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 4b137326f38b5adf1f9ffd3dbbb48a7b > files > 522

deltacloud-core-doc-0.4.0-4.fc15.noarch.rpm

<?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">&amp;&amp;</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">&gt;</span> <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:memorySizeMB</span>],
            <span class="ruby-identifier">:cpus</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:numCpu</span>],
            <span class="ruby-identifier">:storage</span> =<span class="ruby-operator">&gt;</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">&gt;</span> <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:name</span>],
            <span class="ruby-identifier">:full_name</span> =<span class="ruby-operator">&gt;</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">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:cpus</span>],
                                                  <span class="ruby-identifier">:hwp_memory</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:memory</span>],
                                                  <span class="ruby-identifier">:hwp_storage</span> =<span class="ruby-operator">&gt;</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">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:name</span>],
            <span class="ruby-identifier">:name</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:name</span>],
            <span class="ruby-identifier">:owner_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">credentials</span>.<span class="ruby-identifier">user</span>,
            <span class="ruby-identifier">:image_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">template_id</span>,
            <span class="ruby-identifier">:description</span> =<span class="ruby-operator">&gt;</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">&gt;</span> <span class="ruby-identifier">realm_id</span>,
            <span class="ruby-identifier">:state</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">instance_state</span>,
            <span class="ruby-identifier">:public_addresses</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">instance_address</span>,
            <span class="ruby-identifier">:private_addresses</span> =<span class="ruby-operator">&gt;</span> [],
            <span class="ruby-identifier">:instance_profile</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">instance_profile</span>,
            <span class="ruby-identifier">:actions</span> =<span class="ruby-operator">&gt;</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">&gt;</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>