chef-extensions 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Guardfile +6 -0
 - data/Rakefile +9 -0
 - data/chef-extensions.gemspec +6 -2
 - data/docs/lib/chef-extensions.html +0 -108
 - data/docs/lib/chef-extensions/ip.html +68 -0
 - data/lib/chef-extensions.rb +6 -4
 - data/lib/chef-extensions/ec2.rb +13 -0
 - data/lib/chef-extensions/ip.rb +25 -0
 - data/lib/chef-extensions/version.rb +1 -1
 - data/test/chef-extensions/ip_test.rb +40 -0
 - data/test/test_helper.rb +21 -0
 - metadata +65 -14
 
    
        data/Guardfile
    CHANGED
    
    | 
         @@ -3,3 +3,9 @@ require 'rdiscount' 
     | 
|
| 
       3 
3 
     | 
    
         
             
            guard 'rocco', :run_on => [:start, :change], :dir => 'docs' do
         
     | 
| 
       4 
4 
     | 
    
         
             
              watch(%r{^lib/.*\.rb$})
         
     | 
| 
       5 
5 
     | 
    
         
             
            end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            guard 'minitest', :notify => false do
         
     | 
| 
      
 8 
     | 
    
         
            +
              watch(%r|^test/(.*)_test\.rb|)
         
     | 
| 
      
 9 
     | 
    
         
            +
              watch(%r|^lib/(.*)([^/]+)\.rb|)     { |m| "test/#{m[1]}#{m[2]}_test.rb" }
         
     | 
| 
      
 10 
     | 
    
         
            +
              watch(%r|^test/test_helper\.rb|)    { "test" }
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -1,9 +1,18 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'bundler/gem_tasks'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       2 
3 
     | 
    
         
             
            require 'rake/clean'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rake/testtask'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       3 
6 
     | 
    
         
             
            require 'rdiscount'
         
     | 
| 
       4 
7 
     | 
    
         
             
            require 'rocco/tasks'
         
     | 
| 
       5 
8 
     | 
    
         
             
            Rocco::make 'docs/'
         
     | 
| 
       6 
9 
     | 
    
         | 
| 
      
 10 
     | 
    
         
            +
            Rake::TestTask.new do |t|
         
     | 
| 
      
 11 
     | 
    
         
            +
              t.pattern = 'test/**/*_test.rb'
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            task :default => [:test]
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       7 
16 
     | 
    
         
             
            task :version do
         
     | 
| 
       8 
17 
     | 
    
         
             
              require 'chef'
         
     | 
| 
       9 
18 
     | 
    
         
             
              puts Chef::Extensions::VERSION
         
     | 
    
        data/chef-extensions.gemspec
    CHANGED
    
    | 
         @@ -18,8 +18,12 @@ Gem::Specification.new do |s| 
     | 
|
| 
       18 
18 
     | 
    
         
             
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         
     | 
| 
       19 
19 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
              s.add_development_dependency "chef"
         
     | 
| 
      
 22 
     | 
    
         
            +
              s.add_development_dependency 'guard-minitest'
         
     | 
| 
      
 23 
     | 
    
         
            +
              s.add_development_dependency "guard-rocco"
         
     | 
| 
      
 24 
     | 
    
         
            +
              s.add_development_dependency 'minitest'
         
     | 
| 
      
 25 
     | 
    
         
            +
              s.add_development_dependency 'pry'
         
     | 
| 
       21 
26 
     | 
    
         
             
              s.add_development_dependency "rdiscount"
         
     | 
| 
       22 
27 
     | 
    
         
             
              s.add_development_dependency "rocco"
         
     | 
| 
       23 
     | 
    
         
            -
              s.add_development_dependency  
     | 
| 
       24 
     | 
    
         
            -
              s.add_development_dependency "chef"
         
     | 
| 
      
 28 
     | 
    
         
            +
              s.add_development_dependency 'turn'
         
     | 
| 
       25 
29 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,108 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            <!DOCTYPE html>
         
     | 
| 
       2 
     | 
    
         
            -
            <html>
         
     | 
| 
       3 
     | 
    
         
            -
            <head>
         
     | 
| 
       4 
     | 
    
         
            -
              <meta http-equiv="content-type" content="text/html;charset=utf-8">
         
     | 
| 
       5 
     | 
    
         
            -
              <title>chef-extensions.rb</title>
         
     | 
| 
       6 
     | 
    
         
            -
              <link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css">
         
     | 
| 
       7 
     | 
    
         
            -
            </head>
         
     | 
| 
       8 
     | 
    
         
            -
            <body>
         
     | 
| 
       9 
     | 
    
         
            -
            <div id='container'>
         
     | 
| 
       10 
     | 
    
         
            -
              <div id="background"></div>
         
     | 
| 
       11 
     | 
    
         
            -
              <div id="jump_to">
         
     | 
| 
       12 
     | 
    
         
            -
                Jump To …
         
     | 
| 
       13 
     | 
    
         
            -
                <div id="jump_wrapper">
         
     | 
| 
       14 
     | 
    
         
            -
                  <div id="jump_page">
         
     | 
| 
       15 
     | 
    
         
            -
                      <a class="source" href="chef-extensions.html">chef-extensions.rb</a>
         
     | 
| 
       16 
     | 
    
         
            -
                      <a class="source" href="chef-extensions/version.html">version.rb</a>
         
     | 
| 
       17 
     | 
    
         
            -
                  </div>
         
     | 
| 
       18 
     | 
    
         
            -
                </div>
         
     | 
| 
       19 
     | 
    
         
            -
              </div>
         
     | 
| 
       20 
     | 
    
         
            -
              <table cellspacing=0 cellpadding=0>
         
     | 
| 
       21 
     | 
    
         
            -
              <thead>
         
     | 
| 
       22 
     | 
    
         
            -
                <tr>
         
     | 
| 
       23 
     | 
    
         
            -
                  <th class=docs><h1>chef-extensions.rb</h1></th>
         
     | 
| 
       24 
     | 
    
         
            -
                  <th class=code></th>
         
     | 
| 
       25 
     | 
    
         
            -
                </tr>
         
     | 
| 
       26 
     | 
    
         
            -
              </thead>
         
     | 
| 
       27 
     | 
    
         
            -
              <tbody>
         
     | 
| 
       28 
     | 
    
         
            -
                <tr id='section-1'>
         
     | 
| 
       29 
     | 
    
         
            -
                  <td class=docs>
         
     | 
| 
       30 
     | 
    
         
            -
                    <div class="pilwrap">
         
     | 
| 
       31 
     | 
    
         
            -
                      <a class="pilcrow" href="#section-1">¶</a>
         
     | 
| 
       32 
     | 
    
         
            -
                    </div>
         
     | 
| 
       33 
     | 
    
         
            -
                    
         
     | 
| 
       34 
     | 
    
         
            -
                  </td>
         
     | 
| 
       35 
     | 
    
         
            -
                  <td class=code>
         
     | 
| 
       36 
     | 
    
         
            -
                    <div class='highlight'><pre><span class="nb">require</span> <span class="s1">'chef-extensions/version'</span>
         
     | 
| 
       37 
     | 
    
         
            -
            <span class="nb">require</span> <span class="s1">'securerandom'</span>
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
            <span class="k">module</span> <span class="nn">Chef</span>
         
     | 
| 
       40 
     | 
    
         
            -
              <span class="k">module</span> <span class="nn">Extensions</span>
         
     | 
| 
       41 
     | 
    
         
            -
                <span class="kp">extend</span> <span class="nb">self</span></pre></div>
         
     | 
| 
       42 
     | 
    
         
            -
                  </td>
         
     | 
| 
       43 
     | 
    
         
            -
                </tr>
         
     | 
| 
       44 
     | 
    
         
            -
                <tr id='section-2'>
         
     | 
| 
       45 
     | 
    
         
            -
                  <td class=docs>
         
     | 
| 
       46 
     | 
    
         
            -
                    <div class="pilwrap">
         
     | 
| 
       47 
     | 
    
         
            -
                      <a class="pilcrow" href="#section-2">¶</a>
         
     | 
| 
       48 
     | 
    
         
            -
                    </div>
         
     | 
| 
       49 
     | 
    
         
            -
                    <p><strong>Ping Google’s DNS.</strong> <br />
         
     | 
| 
       50 
     | 
    
         
            -
            If it doesn’t hear back within 1s, it’s safe to
         
     | 
| 
       51 
     | 
    
         
            -
            assume that we don’t have internet connectivity</p>
         
     | 
| 
       52 
     | 
    
         
            -
                  </td>
         
     | 
| 
       53 
     | 
    
         
            -
                  <td class=code>
         
     | 
| 
       54 
     | 
    
         
            -
                    <div class='highlight'><pre>    <span class="k">def</span> <span class="nf">wan_up?</span>
         
     | 
| 
       55 
     | 
    
         
            -
                  <span class="sb">`ping -c 1 8.8.8.8 -W 2`</span><span class="o">.</span><span class="n">include?</span> <span class="s2">"1 received"</span>
         
     | 
| 
       56 
     | 
    
         
            -
                <span class="k">end</span></pre></div>
         
     | 
| 
       57 
     | 
    
         
            -
                  </td>
         
     | 
| 
       58 
     | 
    
         
            -
                </tr>
         
     | 
| 
       59 
     | 
    
         
            -
                <tr id='section-3'>
         
     | 
| 
       60 
     | 
    
         
            -
                  <td class=docs>
         
     | 
| 
       61 
     | 
    
         
            -
                    <div class="pilwrap">
         
     | 
| 
       62 
     | 
    
         
            -
                      <a class="pilcrow" href="#section-3">¶</a>
         
     | 
| 
       63 
     | 
    
         
            -
                    </div>
         
     | 
| 
       64 
     | 
    
         
            -
                    <p><strong>Checks if vagrant user exists.</strong> <br />
         
     | 
| 
       65 
     | 
    
         
            -
            If it does, we’re running in the context of a VirtualBox VM, provisioned
         
     | 
| 
       66 
     | 
    
         
            -
            through Vagrant.</p>
         
     | 
| 
       67 
     | 
    
         
            -
                  </td>
         
     | 
| 
       68 
     | 
    
         
            -
                  <td class=code>
         
     | 
| 
       69 
     | 
    
         
            -
                    <div class='highlight'><pre>    <span class="k">def</span> <span class="nf">vagrant?</span>
         
     | 
| 
       70 
     | 
    
         
            -
                  <span class="vi">@vagrant</span> <span class="o">||=</span> <span class="sb">`id vagrant 2>&1`</span><span class="o">.</span><span class="n">index</span> <span class="s1">'uid'</span>
         
     | 
| 
       71 
     | 
    
         
            -
                <span class="k">end</span></pre></div>
         
     | 
| 
       72 
     | 
    
         
            -
                  </td>
         
     | 
| 
       73 
     | 
    
         
            -
                </tr>
         
     | 
| 
       74 
     | 
    
         
            -
                <tr id='section-4'>
         
     | 
| 
       75 
     | 
    
         
            -
                  <td class=docs>
         
     | 
| 
       76 
     | 
    
         
            -
                    <div class="pilwrap">
         
     | 
| 
       77 
     | 
    
         
            -
                      <a class="pilcrow" href="#section-4">¶</a>
         
     | 
| 
       78 
     | 
    
         
            -
                    </div>
         
     | 
| 
       79 
     | 
    
         
            -
                    <p><strong>Get this instance’s ID.</strong> <br />
         
     | 
| 
       80 
     | 
    
         
            -
            If within 1s it gets a response which starts with ‘i-’, it’s safe to
         
     | 
| 
       81 
     | 
    
         
            -
            assume that we’re running within the context of an EC2 instance.</p>
         
     | 
| 
       82 
     | 
    
         
            -
                  </td>
         
     | 
| 
       83 
     | 
    
         
            -
                  <td class=code>
         
     | 
| 
       84 
     | 
    
         
            -
                    <div class='highlight'><pre>    <span class="k">def</span> <span class="nf">ec2?</span>
         
     | 
| 
       85 
     | 
    
         
            -
                  <span class="vi">@ec2</span> <span class="o">||=</span> <span class="sb">`curl --connect-timeout 1 http://169.254.169.254/2011-01-01/meta-data/instance-id 2>&1`</span><span class="o">.</span><span class="n">include?</span><span class="p">(</span><span class="s1">'i-'</span><span class="p">)</span>
         
     | 
| 
       86 
     | 
    
         
            -
                <span class="k">end</span></pre></div>
         
     | 
| 
       87 
     | 
    
         
            -
                  </td>
         
     | 
| 
       88 
     | 
    
         
            -
                </tr>
         
     | 
| 
       89 
     | 
    
         
            -
                <tr id='section-5'>
         
     | 
| 
       90 
     | 
    
         
            -
                  <td class=docs>
         
     | 
| 
       91 
     | 
    
         
            -
                    <div class="pilwrap">
         
     | 
| 
       92 
     | 
    
         
            -
                      <a class="pilcrow" href="#section-5">¶</a>
         
     | 
| 
       93 
     | 
    
         
            -
                    </div>
         
     | 
| 
       94 
     | 
    
         
            -
                    <p><strong>Generate base64 password using SecureRandom.</strong> <br />
         
     | 
| 
       95 
     | 
    
         
            -
            Trims the ending ==.</p>
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                  </td>
         
     | 
| 
       98 
     | 
    
         
            -
                  <td class=code>
         
     | 
| 
       99 
     | 
    
         
            -
                    <div class='highlight'><pre>    <span class="k">def</span> <span class="nf">password</span><span class="p">(</span><span class="n">length</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
         
     | 
| 
       100 
     | 
    
         
            -
                  <span class="no">SecureRandom</span><span class="o">.</span><span class="n">base64</span><span class="p">(</span><span class="n">length</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">tr</span><span class="p">(</span><span class="s1">'='</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
         
     | 
| 
       101 
     | 
    
         
            -
                <span class="k">end</span>
         
     | 
| 
       102 
     | 
    
         
            -
              <span class="k">end</span>
         
     | 
| 
       103 
     | 
    
         
            -
            <span class="k">end</span></pre></div>
         
     | 
| 
       104 
     | 
    
         
            -
                  </td>
         
     | 
| 
       105 
     | 
    
         
            -
                </tr>
         
     | 
| 
       106 
     | 
    
         
            -
              </table>
         
     | 
| 
       107 
     | 
    
         
            -
            </div>
         
     | 
| 
       108 
     | 
    
         
            -
            </body>
         
     | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!DOCTYPE html>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <html>
         
     | 
| 
      
 3 
     | 
    
         
            +
            <head>
         
     | 
| 
      
 4 
     | 
    
         
            +
              <meta http-equiv="content-type" content="text/html;charset=utf-8">
         
     | 
| 
      
 5 
     | 
    
         
            +
              <title>ip.rb</title>
         
     | 
| 
      
 6 
     | 
    
         
            +
              <link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css">
         
     | 
| 
      
 7 
     | 
    
         
            +
            </head>
         
     | 
| 
      
 8 
     | 
    
         
            +
            <body>
         
     | 
| 
      
 9 
     | 
    
         
            +
            <div id='container'>
         
     | 
| 
      
 10 
     | 
    
         
            +
              <div id="background"></div>
         
     | 
| 
      
 11 
     | 
    
         
            +
              <div id="jump_to">
         
     | 
| 
      
 12 
     | 
    
         
            +
                Jump To …
         
     | 
| 
      
 13 
     | 
    
         
            +
                <div id="jump_wrapper">
         
     | 
| 
      
 14 
     | 
    
         
            +
                  <div id="jump_page">
         
     | 
| 
      
 15 
     | 
    
         
            +
                      <a class="source" href="../chef-extensions.html">chef-extensions.rb</a>
         
     | 
| 
      
 16 
     | 
    
         
            +
                      <a class="source" href="ec2.html">ec2.rb</a>
         
     | 
| 
      
 17 
     | 
    
         
            +
                      <a class="source" href="ip.html">ip.rb</a>
         
     | 
| 
      
 18 
     | 
    
         
            +
                      <a class="source" href="version.html">version.rb</a>
         
     | 
| 
      
 19 
     | 
    
         
            +
                  </div>
         
     | 
| 
      
 20 
     | 
    
         
            +
                </div>
         
     | 
| 
      
 21 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 22 
     | 
    
         
            +
              <table cellspacing=0 cellpadding=0>
         
     | 
| 
      
 23 
     | 
    
         
            +
              <thead>
         
     | 
| 
      
 24 
     | 
    
         
            +
                <tr>
         
     | 
| 
      
 25 
     | 
    
         
            +
                  <th class=docs><h1>ip.rb</h1></th>
         
     | 
| 
      
 26 
     | 
    
         
            +
                  <th class=code></th>
         
     | 
| 
      
 27 
     | 
    
         
            +
                </tr>
         
     | 
| 
      
 28 
     | 
    
         
            +
              </thead>
         
     | 
| 
      
 29 
     | 
    
         
            +
              <tbody>
         
     | 
| 
      
 30 
     | 
    
         
            +
                <tr id='section-1'>
         
     | 
| 
      
 31 
     | 
    
         
            +
                  <td class=docs>
         
     | 
| 
      
 32 
     | 
    
         
            +
                    <div class="pilwrap">
         
     | 
| 
      
 33 
     | 
    
         
            +
                      <a class="pilcrow" href="#section-1">¶</a>
         
     | 
| 
      
 34 
     | 
    
         
            +
                    </div>
         
     | 
| 
      
 35 
     | 
    
         
            +
                    
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  </td>
         
     | 
| 
      
 38 
     | 
    
         
            +
                  <td class=code>
         
     | 
| 
      
 39 
     | 
    
         
            +
                    <div class='highlight'><pre><span class="nb">require</span> <span class="s1">'socket'</span>
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            <span class="k">class</span> <span class="nc">Chef</span>
         
     | 
| 
      
 42 
     | 
    
         
            +
              <span class="k">module</span> <span class="nn">Extensions</span>
         
     | 
| 
      
 43 
     | 
    
         
            +
                <span class="k">module</span> <span class="nn">IP</span>
         
     | 
| 
      
 44 
     | 
    
         
            +
                  <span class="kp">extend</span> <span class="nb">self</span>
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  <span class="k">def</span> <span class="nf">all</span>
         
     | 
| 
      
 47 
     | 
    
         
            +
                    <span class="vi">@all</span> <span class="o">||=</span> <span class="no">Socket</span><span class="o">.</span><span class="n">ip_address_list</span>
         
     | 
| 
      
 48 
     | 
    
         
            +
                  <span class="k">end</span>
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  <span class="k">def</span> <span class="nf">ipv4</span>
         
     | 
| 
      
 51 
     | 
    
         
            +
                    <span class="n">all</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">&</span><span class="ss">:ipv4?</span><span class="p">)</span>
         
     | 
| 
      
 52 
     | 
    
         
            +
                  <span class="k">end</span>
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  <span class="k">def</span> <span class="nf">ipv6</span>
         
     | 
| 
      
 55 
     | 
    
         
            +
                    <span class="n">all</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">&</span><span class="ss">:ipv6?</span><span class="p">)</span>
         
     | 
| 
      
 56 
     | 
    
         
            +
                  <span class="k">end</span>
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  <span class="k">def</span> <span class="nf">addresses</span><span class="p">(</span><span class="nb">type</span><span class="p">)</span>
         
     | 
| 
      
 59 
     | 
    
         
            +
                    <span class="nb">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="nb">type</span><span class="p">)</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:ip_address</span><span class="p">)</span>
         
     | 
| 
      
 60 
     | 
    
         
            +
                  <span class="k">end</span>
         
     | 
| 
      
 61 
     | 
    
         
            +
                <span class="k">end</span>
         
     | 
| 
      
 62 
     | 
    
         
            +
              <span class="k">end</span>
         
     | 
| 
      
 63 
     | 
    
         
            +
            <span class="k">end</span></pre></div>
         
     | 
| 
      
 64 
     | 
    
         
            +
                  </td>
         
     | 
| 
      
 65 
     | 
    
         
            +
                </tr>
         
     | 
| 
      
 66 
     | 
    
         
            +
              </table>
         
     | 
| 
      
 67 
     | 
    
         
            +
            </div>
         
     | 
| 
      
 68 
     | 
    
         
            +
            </body>
         
     | 
    
        data/lib/chef-extensions.rb
    CHANGED
    
    | 
         @@ -1,4 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'chef-extensions/version'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'chef-extensions/ec2'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'chef-extensions/ip'
         
     | 
| 
       2 
4 
     | 
    
         
             
            require 'securerandom'
         
     | 
| 
       3 
5 
     | 
    
         | 
| 
       4 
6 
     | 
    
         
             
            class Chef
         
     | 
| 
         @@ -19,11 +21,11 @@ class Chef 
     | 
|
| 
       19 
21 
     | 
    
         
             
                  @vagrant ||= `id vagrant 2>&1`.index 'uid'
         
     | 
| 
       20 
22 
     | 
    
         
             
                end
         
     | 
| 
       21 
23 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                # ** 
     | 
| 
       23 
     | 
    
         
            -
                # If  
     | 
| 
       24 
     | 
    
         
            -
                #  
     | 
| 
      
 24 
     | 
    
         
            +
                # **Check if this instance ID is a valid one.** <br />
         
     | 
| 
      
 25 
     | 
    
         
            +
                # If it  starts with 'i-', it's safe to assume that we're running within
         
     | 
| 
      
 26 
     | 
    
         
            +
                # the context of an EC2 instance.
         
     | 
| 
       25 
27 
     | 
    
         
             
                def ec2?
         
     | 
| 
       26 
     | 
    
         
            -
                  @ec2 ||=  
     | 
| 
      
 28 
     | 
    
         
            +
                  @ec2 ||= EC2.instance_id.include?('i-')
         
     | 
| 
       27 
29 
     | 
    
         
             
                end
         
     | 
| 
       28 
30 
     | 
    
         | 
| 
       29 
31 
     | 
    
         
             
                # **Generate base64 password using SecureRandom.** <br />
         
     | 
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Chef
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Extensions
         
     | 
| 
      
 3 
     | 
    
         
            +
                module EC2
         
     | 
| 
      
 4 
     | 
    
         
            +
                  extend self
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  # **Get the instance ID from AWS's metadata service**
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # If we don't hear back within 1 second, time out.
         
     | 
| 
      
 8 
     | 
    
         
            +
                  def instance_id
         
     | 
| 
      
 9 
     | 
    
         
            +
                    `curl --connect-timeout 1 http://169.254.169.254/2011-01-01/meta-data/instance-id 2>&1`.chomp
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'socket'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class Chef
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Extensions
         
     | 
| 
      
 5 
     | 
    
         
            +
                module IP
         
     | 
| 
      
 6 
     | 
    
         
            +
                  extend self
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  def all
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @all ||= Socket.ip_address_list
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def ipv4
         
     | 
| 
      
 13 
     | 
    
         
            +
                    all.select(&:ipv4?)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def ipv6
         
     | 
| 
      
 17 
     | 
    
         
            +
                    all.select(&:ipv6?)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def addresses(type)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    self.send(type).map(&:ip_address)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.expand_path('../../test_helper', __FILE__)
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'chef-extensions/ip'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class Chef
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Extensions
         
     | 
| 
      
 6 
     | 
    
         
            +
                describe IP do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  describe "all" do
         
     | 
| 
      
 8 
     | 
    
         
            +
                    it "returns all local ips" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                      IP.all.each do |ip|
         
     | 
| 
      
 10 
     | 
    
         
            +
                        ip.must_be_instance_of Addrinfo
         
     | 
| 
      
 11 
     | 
    
         
            +
                      end
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  describe "ipv4" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                    it "only returns IPv4 ips" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                      IP.ipv4.each do |ip|
         
     | 
| 
      
 18 
     | 
    
         
            +
                        ip.must_be :ipv4?
         
     | 
| 
      
 19 
     | 
    
         
            +
                      end
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  describe "ipv6" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    it "only returns IPv6 ips" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                      IP.ipv6.each do |ip|
         
     | 
| 
      
 26 
     | 
    
         
            +
                        ip.must_be :ipv6?
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  describe "addresses" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                    it "returns ips of a certain type as strings" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                      IP.addresses(:ipv4).each do |ip|
         
     | 
| 
      
 34 
     | 
    
         
            +
                        ip.must_match /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/
         
     | 
| 
      
 35 
     | 
    
         
            +
                      end
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
    
        data/test/test_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'bundler'
         
     | 
| 
      
 3 
     | 
    
         
            +
            Bundler.setup
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require 'minitest/unit'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'minitest/spec'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'turn/colorize'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'turn/controller'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'turn/runners/minirunner'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            Turn.config do |config|
         
     | 
| 
      
 13 
     | 
    
         
            +
              config.format = :pretty
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            MiniTest::Unit.runner = Turn::MiniRunner.new
         
     | 
| 
      
 17 
     | 
    
         
            +
            MiniTest::Unit.autorun
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'pry'
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            $:.push File.expand_path("../../lib", __FILE__)
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: chef-extensions
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,11 +9,11 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012-01- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-01-24 00:00:00.000000000Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
     | 
    
         
            -
              name:  
     | 
| 
       16 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 15 
     | 
    
         
            +
              name: chef
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &2164269240 !ruby/object:Gem::Requirement
         
     | 
| 
       17 
17 
     | 
    
         
             
                none: false
         
     | 
| 
       18 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
19 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -21,10 +21,10 @@ dependencies: 
     | 
|
| 
       21 
21 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       22 
22 
     | 
    
         
             
              type: :development
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *2164269240
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       26 
     | 
    
         
            -
              name:  
     | 
| 
       27 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 26 
     | 
    
         
            +
              name: guard-minitest
         
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &2164268620 !ruby/object:Gem::Requirement
         
     | 
| 
       28 
28 
     | 
    
         
             
                none: false
         
     | 
| 
       29 
29 
     | 
    
         
             
                requirements:
         
     | 
| 
       30 
30 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -32,10 +32,10 @@ dependencies: 
     | 
|
| 
       32 
32 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       33 
33 
     | 
    
         
             
              type: :development
         
     | 
| 
       34 
34 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       35 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *2164268620
         
     | 
| 
       36 
36 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       37 
37 
     | 
    
         
             
              name: guard-rocco
         
     | 
| 
       38 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &2160320740 !ruby/object:Gem::Requirement
         
     | 
| 
       39 
39 
     | 
    
         
             
                none: false
         
     | 
| 
       40 
40 
     | 
    
         
             
                requirements:
         
     | 
| 
       41 
41 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -43,10 +43,54 @@ dependencies: 
     | 
|
| 
       43 
43 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       44 
44 
     | 
    
         
             
              type: :development
         
     | 
| 
       45 
45 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       46 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 46 
     | 
    
         
            +
              version_requirements: *2160320740
         
     | 
| 
       47 
47 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       48 
     | 
    
         
            -
              name:  
     | 
| 
       49 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 48 
     | 
    
         
            +
              name: minitest
         
     | 
| 
      
 49 
     | 
    
         
            +
              requirement: &2160319940 !ruby/object:Gem::Requirement
         
     | 
| 
      
 50 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 55 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 56 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 57 
     | 
    
         
            +
              version_requirements: *2160319940
         
     | 
| 
      
 58 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 59 
     | 
    
         
            +
              name: pry
         
     | 
| 
      
 60 
     | 
    
         
            +
              requirement: &2160319280 !ruby/object:Gem::Requirement
         
     | 
| 
      
 61 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 62 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 63 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 64 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 65 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 66 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 67 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 68 
     | 
    
         
            +
              version_requirements: *2160319280
         
     | 
| 
      
 69 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: rdiscount
         
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: &2160318580 !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 73 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 74 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 75 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 76 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 77 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 78 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 79 
     | 
    
         
            +
              version_requirements: *2160318580
         
     | 
| 
      
 80 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 81 
     | 
    
         
            +
              name: rocco
         
     | 
| 
      
 82 
     | 
    
         
            +
              requirement: &2160317500 !ruby/object:Gem::Requirement
         
     | 
| 
      
 83 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 84 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 85 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 86 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 87 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 88 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 89 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 90 
     | 
    
         
            +
              version_requirements: *2160317500
         
     | 
| 
      
 91 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 92 
     | 
    
         
            +
              name: turn
         
     | 
| 
      
 93 
     | 
    
         
            +
              requirement: &2160315680 !ruby/object:Gem::Requirement
         
     | 
| 
       50 
94 
     | 
    
         
             
                none: false
         
     | 
| 
       51 
95 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
96 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -54,7 +98,7 @@ dependencies: 
     | 
|
| 
       54 
98 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       55 
99 
     | 
    
         
             
              type: :development
         
     | 
| 
       56 
100 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       57 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 101 
     | 
    
         
            +
              version_requirements: *2160315680
         
     | 
| 
       58 
102 
     | 
    
         
             
            description: Commands useful for checking internet connectivity, VM presence etc.
         
     | 
| 
       59 
103 
     | 
    
         
             
            email:
         
     | 
| 
       60 
104 
     | 
    
         
             
            - gerhard@lazu.co.uk
         
     | 
| 
         @@ -71,9 +115,14 @@ files: 
     | 
|
| 
       71 
115 
     | 
    
         
             
            - chef-extensions.gemspec
         
     | 
| 
       72 
116 
     | 
    
         
             
            - docs/index.html
         
     | 
| 
       73 
117 
     | 
    
         
             
            - docs/lib/chef-extensions.html
         
     | 
| 
      
 118 
     | 
    
         
            +
            - docs/lib/chef-extensions/ip.html
         
     | 
| 
       74 
119 
     | 
    
         
             
            - docs/lib/chef-extensions/version.html
         
     | 
| 
       75 
120 
     | 
    
         
             
            - lib/chef-extensions.rb
         
     | 
| 
      
 121 
     | 
    
         
            +
            - lib/chef-extensions/ec2.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
            - lib/chef-extensions/ip.rb
         
     | 
| 
       76 
123 
     | 
    
         
             
            - lib/chef-extensions/version.rb
         
     | 
| 
      
 124 
     | 
    
         
            +
            - test/chef-extensions/ip_test.rb
         
     | 
| 
      
 125 
     | 
    
         
            +
            - test/test_helper.rb
         
     | 
| 
       77 
126 
     | 
    
         
             
            homepage: http://gchef.github.com/chef-extensions
         
     | 
| 
       78 
127 
     | 
    
         
             
            licenses: []
         
     | 
| 
       79 
128 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
         @@ -98,5 +147,7 @@ rubygems_version: 1.8.10 
     | 
|
| 
       98 
147 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       99 
148 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       100 
149 
     | 
    
         
             
            summary: Chef extensions, can be used stand-alone
         
     | 
| 
       101 
     | 
    
         
            -
            test_files: 
     | 
| 
      
 150 
     | 
    
         
            +
            test_files:
         
     | 
| 
      
 151 
     | 
    
         
            +
            - test/chef-extensions/ip_test.rb
         
     | 
| 
      
 152 
     | 
    
         
            +
            - test/test_helper.rb
         
     | 
| 
       102 
153 
     | 
    
         
             
            has_rdoc: 
         
     |