<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.gitmodules</filename>
    </added>
    <added>
      <filename>TODO.textile</filename>
    </added>
    <added>
      <filename>VERSION.yml</filename>
    </added>
    <added>
      <filename>bin/cloud-bootstrap</filename>
    </added>
    <added>
      <filename>bin/cloud-console</filename>
    </added>
    <added>
      <filename>bin/ec2-list-active</filename>
    </added>
    <added>
      <filename>config/jeweler.rb</filename>
    </added>
    <added>
      <filename>examples/default.rb</filename>
    </added>
    <added>
      <filename>examples/fairchild.rb</filename>
    </added>
    <added>
      <filename>examples/suspenders.conf.erb</filename>
    </added>
    <added>
      <filename>lib/poolparty/dependencies.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/dependency_resolver/dependency_resolver.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/dependency_resolver/puppet.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/dependency_resolver/puppet_resolver.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/exceptions/dependency_resolver_exception.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/exceptions/package_exception.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/helpers/hash_printer.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/lite.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/init.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/remote_bases.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/remoter/cloud_control.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/remoter/connections.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/remoter/interactive.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/remoter/lists.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/remoter_bases/ec2/ec2.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/remoter_bases/ec2/ec2_remote_instance.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/net/remoter_bases/ec2/ec2_response_object.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/plugins/chef.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/poolparty/default.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/poolparty/key.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/poolparty/neighborhoods.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/poolparty/poolparty_base_class.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/poolparty/service.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/poolparty/template.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provision/boot_strapper.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provision/configurations/chef.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provision/configurations/puppet.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provision/dr_configure.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provisioners/capistrano/recipes/aws.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provisioners/capistrano/recipes/base.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provisioners/capistrano/recipes/master.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provisioners/capistrano/recipes/puppet.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/provisioners/capistrano/recipes/slave.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/cron.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/custom_service.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/directory.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/exec.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/file.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/host.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/line.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/mount.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/package.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/remote_file.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/service.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/sshkey.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/symlink.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/user.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/resources/variable.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/schema.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/services/conditional.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/services/gem_package.rb</filename>
    </added>
    <added>
      <filename>lib/poolparty/templates/erlang_cookie_maker</filename>
    </added>
    <added>
      <filename>lib/poolparty/templates/gemrc</filename>
    </added>
    <added>
      <filename>lib/poolparty/templates/puppet/add_puppet_to_hosts</filename>
    </added>
    <added>
      <filename>lib/poolparty/templates/puppet/puppet.conf</filename>
    </added>
    <added>
      <filename>lib/poolparty/templates/puppet/puppetrunner</filename>
    </added>
    <added>
      <filename>lib/poolparty/templates/puppet/site.pp</filename>
    </added>
    <added>
      <filename>pkg/poolparty-1.0.1.gem</filename>
    </added>
    <added>
      <filename>spec/bin/bin_spec_helper.rb</filename>
    </added>
    <added>
      <filename>spec/bin/fixtures/bin_cloud_for_test.rb</filename>
    </added>
    <added>
      <filename>spec/bin/server-list-active_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/dependencies_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/dependency_resolver/dependency_resolver_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/dependency_resolver/puppet_resolver_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/fixtures/test_template.erb</filename>
    </added>
    <added>
      <filename>spec/poolparty/helpers/hash_printer_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/id_rsa</filename>
    </added>
    <added>
      <filename>spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/net/remoter_bases/ec2_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/plugins/chef_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/poolparty/default_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/poolparty/key_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/poolparty/neighborhoods_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/poolparty/service_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/poolparty/template_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/poolparty_base_class_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/cron_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/directory_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/exec_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/file_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/gem_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/host_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/package_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/service_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/sshkey_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/symlink_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/user_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/resources/variable_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/schema_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/services/conditional_spec.rb</filename>
    </added>
    <added>
      <filename>spec/poolparty/test_spec_helper.rb</filename>
    </added>
    <added>
      <filename>tasks/poolparty.rake</filename>
    </added>
    <added>
      <filename>vendor/gems/dslify</filename>
    </added>
    <added>
      <filename>vendor/gems/parenting</filename>
    </added>
    <added>
      <filename>vendor/gems/suitcase</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,5 @@
-tmp/*
+.com.apple.timemachine.supported
+.DS_Store
 *tmp*
 pkg/*.tgz
 pkg/poolparty*/*
@@ -10,4 +11,9 @@ test_manifest.pp
 # erl_crash.dump
 *erl_crash.dump*
 log
-*.beam
\ No newline at end of file
+*.beam
+ri/
+doc/
+config/manifest.pp
+vendor/dependencies/cache
+vendor/dependencies/packages
\ No newline at end of file</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-Copyright (c) 2008 Ari Lerner
+Copyright (c) 2009 Ari Lerner
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the</diff>
      <filename>License.txt</filename>
    </modified>
    <modified>
      <diff>@@ -49,7 +49,7 @@ sudo gem install auser-poolparty
 * Add queuing of tasks on the messenger
 * Add syntax checker on the manifests
 * Move in collectd support
-* Add master query
+* Remove master-slave protocol
 
 == LICENSE:
 </diff>
      <filename>README.txt</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,17 @@
 require 'config/requirements'
-require 'config/hoe' # setup Hoe + all gem configuration
+require 'config/jeweler' # setup gem configuration
 
 Dir['tasks/**/*.rake'].each { |rake| load rake }
 
 desc &quot;Clean tmp directory&quot;
 task :clean_tmp do |t|
-  %x[rm #{File.dirname(__FILE__)}/Manifest.txt; touch #{File.dirname(__FILE__)}/Manifest.txt]
+  FileUtils.rm_rf(&quot;#{File.dirname(__FILE__)}/Manifest.txt&quot;) if ::File.exists?(&quot;#{File.dirname(__FILE__)}/Manifest.txt&quot;) 
+  FileUtils.touch(&quot;#{File.dirname(__FILE__)}/Manifest.txt&quot;)
   %w(logs tmp).each do |dir|
     FileUtils.rm_rf(&quot;#{File.dirname(__FILE__)}/#{dir}&quot;) if ::File.exists?(&quot;#{File.dirname(__FILE__)}/#{dir}&quot;)
   end
 end
+
 desc &quot;Remove the pkg directory&quot;
 task :clean_pkg do |t|
   %w(pkg).each do |dir|
@@ -17,9 +19,6 @@ task :clean_pkg do |t|
   end
 end
 
-desc &quot;Generate a new manifest and a new gem&quot;
-task :build_local_gem =&gt; [:clean_tmp, :spec, :clean_pkg, :&quot;manifest:refresh&quot;, :package]
-
 desc &quot;Packge with timestamp&quot;
 task :update_timestamp do
   data = open(&quot;PostInstall.txt&quot;).read
@@ -33,37 +32,14 @@ task :update_timestamp do
   ::File.open(&quot;PostInstall.txt&quot;, &quot;w+&quot;) {|f| f &lt;&lt; data }
 end
 
-desc &quot;Release to github&quot;
-task :github_release =&gt; [:clean_tmp, :spec, :clean_pkg, :&quot;manifest:refresh&quot;, :update_timestamp, :package] do
-  res = %x[rake debug_gem]
-  res = res.split(&quot;\n&quot;)[1..-1].join(&quot;\n&quot;)
-  ::File.open(&quot;#{GEM_NAME.downcase}.gemspec&quot;, &quot;w+&quot;) do |f|
-    f &lt;&lt; res
-  end
-  `mv #{::File.expand_path(::File.dirname(__FILE__))}/pkg/*.gem #{::File.expand_path(::File.dirname(__FILE__))}/pkg/poolparty.gem`
-end
-
-desc &quot;Generate gemspec&quot;
-task :gemspec  =&gt; [:spec, :clean_tmp, :&quot;manifest:refresh&quot;, :build_local_gem] do |t|
-  res = %x[rake debug_gem]
-  res = res.split(&quot;\n&quot;)[1..-1].join(&quot;\n&quot;)
-  ::File.open(&quot;#{GEM_NAME.downcase}.gemspec&quot;, &quot;w+&quot;) do |f|
-    f &lt;&lt; res
-  end
-end
-
-desc &quot;Generate gemspec for github&quot;
-task :gh =&gt; [:github_release, :package] do
-  filepath = ::File.join(::File.dirname(__FILE__), &quot;poolparty.gemspec&quot;)
-  data = open(filepath).read
-  spec = eval(&quot;$SAFE = 3\n#{data}&quot;)
-  yml = YAML.dump spec
-  File.open(filepath, &quot;w+&quot;) do |f|
-    f &lt;&lt; yml
-  end
+namespace :gem do
+  task(:build).prerequisites.unshift :gemspec # Prepend the gemspec generation
+  
+  desc &quot;Build the gem only if the specs pass&quot;
+  task :test_then_build =&gt; [:spec, :build]
+  
+  desc &quot;Build and install the gem only if the specs pass&quot;
+  task :test_then_install =&gt; [:spec, :install]
 end
 
-desc &quot;Generate github gemspec and latest gem&quot;
-task :ghgem =&gt; [:gh] do
-  %x[sudo gem install pkg/poolparty.gem]
-end
\ No newline at end of file
+task :release =&gt; [:update_timestamp]
\ No newline at end of file</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,17 +1,22 @@
 #!/usr/bin/env ruby
 $:.unshift(File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;))
 require &quot;poolparty&quot;
-require &quot;poolpartycl&quot;
+# require &quot;poolpartycl&quot;
+
 
 o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
   optioner.cloudnames
   # optioner.daemonizeable
 end
 
-o.loaded_clouds.each do |cloud|
+o.loaded_clouds.each do |cld|
   
-  with_cloud(cloud) do
-    verbose ? provisioner_for(master).configure(testing) : hide_output { provisioner_for(master).configure(testing) }
-    cleanup_storage_directory unless testing
-  end    
+  # If an IP or DNS name is given, configure that node, otherwise, configure all running nodes.
+  nodes = !o.unflagged_args.empty? ?  o.unflagged_args : cld.remote_instances_list.collect {|inst| inst.ip if inst.running? }.compact
+  nodes.each do |address|
+    puts &quot;configuring: #{address}&quot;
+    ::PoolParty::Provision::DrConfigure.new( address, 
+                                             :full_keypair_path =&gt; cld.keypair.full_filepath, 
+                                             :cloud =&gt; cld )
+  end
 end
\ No newline at end of file</diff>
      <filename>bin/cloud-configure</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,6 @@
 #!/usr/bin/env ruby
 $:.unshift(File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;))
 require &quot;poolparty&quot;
-require &quot;poolpartycl&quot;
 
 o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
   opts.on('-f [remote|local]', '--from [remote|local]', 'Remote or local (default: local)')    { |o| optioner.location o }
@@ -10,17 +9,15 @@ o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
   opts.on('-n name', '--name name', 'Listing for cloud name')    { |c| optioner.cloudname c }
 end
 
-o.loaded_clouds.each do |cloud|
+o.loaded_clouds.each do |cld|
   
-  with_cloud(cloud) do
-    puts header(&quot;Listing cloud #{name}&quot;)
-    puts subheader(&quot;Active instances&quot;)
-    puts list_of_running_instances.map{|a| a.to_s}.join(&quot;\n&quot;)
-    puts &quot;&quot;
-    if list_of_pending_instances.size &gt; 0
-      puts subheader(&quot;Pending instances&quot;)
-      puts list_of_pending_instances.map{|a| a.to_s}.join(&quot;\n&quot;)
-    end
-  end  
+  puts header(&quot;Listing cloud #{cld.name}&quot;)
   
+  puts subheader(&quot;Active instances&quot;)
+  puts cld.list_of_running_instances.map{|a| a.to_s}.join(&quot;\n&quot;)
+    
+  if cld.list_of_pending_instances.size &gt; 0
+    puts subheader(&quot;Pending instances&quot;)
+    puts cld.list_of_pending_instances.map{|a| a.to_s}.join(&quot;\n&quot;)
+  end
 end
\ No newline at end of file</diff>
      <filename>bin/cloud-list</filename>
    </modified>
    <modified>
      <diff>@@ -1,34 +1,24 @@
 #!/usr/bin/env ruby
 $:.unshift(File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;))
 require &quot;poolparty&quot;
-require &quot;poolpartycl&quot;
+require &quot;poolparty/provision/boot_strapper&quot;
 
 o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
   opts.on('-n cloudname', '--name name', 'Start cloud by this name')    { |c| optioner.cloudname c }
-  opts.on('-p', '--slave', 'Provision slave (default: false)')    { optioner.provision_slave true }
-  opts.on('-i num', '--id num', 'Instance num to provision')    { |i| optioner.instance_number i }
 end
 
-o.loaded_clouds.each do |cloud|
-
-  with_cloud(cloud) do
-    setup_dev
-    instance_num = instance_number.to_i if instance_number
-    
-    if instance_num
-      @instance = get_instance_by_number( instance_num )
-      instance_num == 0 ? provisioner_for(master).install(testing) : provisioner_for(@instance).install(testing)
-    else
-      if provision_slave
-        vputs &quot;Provisioning slaves&quot;
-        verbose ? provisioner_for(nil).install(testing) : hide_output { provisioner_for(nil).install(testing) }
-      else
-        vputs &quot;Provisioning master&quot;
-        verbose ? provisioner_for(master).install(testing) : hide_output { provisioner_for(master).install(testing) }
-      end
+o.loaded_clouds.each do |cld|
+  # If an IP or DNS name is given, bootstrap that node, otherwise, bootstrap all running nodes.
+  nodes = !o.unflagged_args.empty? ?  o.unflagged_args : cld.remote_instances_list.collect {|inst| inst.ip if inst.running? }.compact
+  if nodes.empty?
+    puts &quot;No nodes to bootstrap&quot;
+  else
+    nodes.each do |address|
+      puts &quot;bootstrapping: #{address}&quot;
+      ::PoolParty::Provision::BootStrapper.new( address, {:full_keypair_path =&gt; cld.keypair.full_filepath, :cloud =&gt; cld} )
+      ::PoolParty::Provision::DrConfigure.new( address, :full_keypair_path =&gt; cld.keypair.full_filepath, 
+                                                        :cloud =&gt; cld )      
     end
-    
-    cleanup_storage_directory unless testing
   end
+end
 
-end
\ No newline at end of file</diff>
      <filename>bin/cloud-provision</filename>
    </modified>
    <modified>
      <diff>@@ -29,7 +29,8 @@ o.loaded_clouds.each do |cloud|
       case testtype
       when &quot;launch&quot;
       when nil
-        print_with_nice_printer(&quot;Starting live specing cloud #{name}&quot;)      
+        print_with_nice_printer(&quot;Starting live specing cloud #{name}&quot;)
+        puts &quot;TODO:  this isn't implented yet.&quot;
         # hide_output {launch_and_configure_master!}
         print_with_nice_printer(&quot;Waiting for cloud to provision&quot;)
         </diff>
      <filename>bin/cloud-spec</filename>
    </modified>
    <modified>
      <diff>@@ -4,11 +4,19 @@ require &quot;poolparty&quot;
 require &quot;poolpartycl&quot;
 
 o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
+  optioner.options( :num =&gt; 0 )
   opts.on('-n name', '--name name', 'Listing for cloud name')    { |c| optioner.cloudname c }
-  opts.on('-i num', '--id num', 'Instance num to ssh (default: 0)')    { |i| optioner.num i }
+  # opts.on('-i num', '--id num', 'Instance num to ssh (default: 0)')    { |i| optioner.num i.to_i }
 end
-load_pool(o.spec || Binary.get_existing_spec_location)
+load_pool(o.spec? ? o.spec : Binary.get_existing_spec_location)
 
 @cloud = o.loaded_clouds.first
+nodes = @cloud.list_of_running_instances
 
-@cloud.ssh_into_instance_number( o.num.to_i || 0 ) if @cloud
\ No newline at end of file
+puts nodes.map {|a| a.to_s}.join(&quot;\n&quot;)
+
+if !nodes.empty?
+  @cloud.ssh_into( nodes.first ) if @cloud
+else
+  puts &quot;No running instances can be found&quot;
+end
\ No newline at end of file</diff>
      <filename>bin/cloud-ssh</filename>
    </modified>
    <modified>
      <diff>@@ -1,32 +1,36 @@
 #!/usr/bin/env ruby
 $:.unshift(File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;))
 require &quot;poolparty&quot;
-require &quot;poolpartycl&quot;
 
-o = PoolParty::Optioner.new(ARGV) do |opts, optioner|  
-  optioner.cloudnames
-  optioner.daemonizeable
+o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
+  opts.on('-n cloudname', '--name name', 'Start cloud by this name')    { |c| optioner.cloudname c }
 end
 
-o.loaded_clouds.each do |cloud|
-  with_cloud(cloud) do
-    setup_dev
-    vputs header(&quot;Starting cloud #{name}&quot;)
-    vputs &quot;#{list_of_running_instances.size} running instances (#{minimum_instances} - #{maximum_instances})&quot;
-    # if list_of_running_instances.size &lt;= 1
-      puts &quot;Starting the master instance&quot;    
-      # if testing
-      #   puts(&quot;\tNot launching while in testing mode&quot;)
-      # else
-        vputs &quot;Launching and configuring the master&quot;
-        @cl = self
-        daemon ? daemonize {@cl.launch_and_configure_master!} : launch_and_configure_master!
-      # end
+o.loaded_clouds.each do |cld|
+  if cld.list_of_running_instances.size.zero?
+    puts header(&quot;Starting cloud #{cld.name}&quot;)
+    puts &quot;#{cld.list_of_running_instances.size} running instances (#{cld.minimum_instances} - #{cld.maximum_instances})&quot;
+    
+    inst = cld.launch_instance!
+    # unil inst.ip do 
+    #   sleep 2
+    #   node = cld.remote_instances_list.select {|i| i.running? }
     # end
-    when_no_pending_instances do
-      puts open(::File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;, &quot;poolparty&quot;, &quot;config&quot;, &quot;postlaunchmessage.txt&quot;)).read ^ {:master_ip =&gt; master.ip.chomp}
-      clear_base_directory unless testing
+    
+    cld.when_no_pending_instances do
+      cld.remote_instances_list.select {|i| i.running? }.each do |node|
+        ::PoolParty::Provision::BootStrapper.new(node.ip, :full_keypair_path =&gt; cld.keypair.full_filepath, :cloud =&gt; cld)
+        ::PoolParty::Provision::DrConfigure.new(node.ip,  :full_keypair_path =&gt; cld.keypair.full_filepath, :cloud =&gt; cld)
+      end
+
+      first_inst = cld.remote_instances_list.select {|i| i.running? }.first
+      puts &lt;&lt;-EOM
+        Your cloud has started. Your ip is #{first_inst.ip}
+      EOM
     end
+  else
+    puts &lt;&lt;-EOE
+      Your cloud is already running.
+    EOE
   end
-  
 end
\ No newline at end of file</diff>
      <filename>bin/cloud-start</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,7 @@ o.loaded_clouds.each do |cloud|
     
     list_of_running_instances.each do |inst|
       puts &quot;Shutting down #{inst.instance_id}&quot;
-      terminate_instance!(inst.instance_id)
+      terminate_instance!(:instance_id =&gt; inst.instance_id)
     end
     
   end    </diff>
      <filename>bin/cloud-terminate</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@ include Remote
 @clouds.each do |cl|
   
   with_cloud(cl, {:testing =&gt; o.testing}) do
-    cmd = &quot;hostname master &amp;&amp; #{PoolParty::Remote::RemoteInstance.puppet_runner_command}&quot;
+    cmd = &quot;hostname master &amp;&amp; #{PoolParty::Remote::RemoteInstance.dependency_resolver_comand}&quot;
     %x[#{cmd}] unless testing
     after_launch_master
   end  </diff>
      <filename>bin/server-become-master</filename>
    </modified>
    <modified>
      <diff>@@ -11,5 +11,5 @@ end
 o.loaded_clouds.each do |cloud|
   # @nodes = cloud.messenger_send!(&quot;get_current_nodes&quot;)
   # @nodes = @nodes.split(&quot; &quot;).map {|a| a.split(/@/)[-1] }  
-  PoolParty::Ruberl::Base.new(cloud.master, Base.messenger_client_port).messenger_send!(&quot;clear_cert_for #{cloud.for}&quot;)
+  PoolParty::Ruberl::Base.new(cloud.master, Default.messenger_client_port).messenger_send!(&quot;clear_cert_for #{cloud.for}&quot;)
 end
\ No newline at end of file</diff>
      <filename>bin/server-clean-cert-for</filename>
    </modified>
    <modified>
      <diff>@@ -20,8 +20,7 @@ o.loaded_clouds.each do |cloud|
       next if node == &quot;master&quot;
       # @tp.process do
       str = returning Array.new do |s|
-        s &lt;&lt; &quot;/usr/sbin/puppetca --clean #{node}.compute-1.internal&quot;
-        s &lt;&lt; &quot;/usr/sbin/puppetca --clean #{node}.ec2.internal&quot;
+        s &lt;&lt; cloud.dependency_resolver_command
       end.join(&quot;;&quot;)
   
       node_id = node.gsub(/node/, '')</diff>
      <filename>bin/server-ensure-provisioning</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,15 @@
 #!/usr/bin/env ruby
 $:.unshift(File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;))
-require &quot;poolparty&quot;
-require &quot;poolpartycl&quot;
+require &quot;poolparty/lite&quot;
+Dir[&quot;#{File.dirname(__FILE__)}/../lib/poolparty/monitors/base_monitor.rb&quot;].each {|f| require f}
 
-available_monitors = PoolParty::Monitors.available_monitors
-o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
-  # opts.on('-n name', '--name name', 'Listing for cloud name')    { |c| optioner.cloudname c }
-  opts.on('-m name', '--monitor monitor_name', &quot;Monitor name (default: cpu) (Available monitors: #{available_monitors.join(&quot;, &quot;)})&quot;) {|c| optioner.monitorname c}
-end
+monitor = ARGV.pop || &quot;cpu&quot;
 
-@monitor = o.monitorname ? o.monitorname : &quot;cpu&quot;
+begin
+  Dir[&quot;#{File.dirname(__FILE__)}/../lib/poolparty/monitors/monitors/#{monitor}_monitor.rb&quot;].each {|f| require f}
   
-if PoolParty::Monitors.available_monitors.include?(@monitor.downcase.to_sym)
-  print &quot;PoolParty::Monitors::#{@monitor.capitalize}Monitor&quot;.constantize.run.to_f
-else
-  puts &quot;Unknown monitor&quot;
+  klass = eval(&quot;PoolParty::Monitors::#{monitor.capitalize}Monitor&quot;)
+  print (klass.send :run).to_f rescue -1.0
+rescue Exception =&gt; e
+  puts -1.0
 end
\ No newline at end of file</diff>
      <filename>bin/server-get-load</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,14 @@
 #!/usr/bin/env ruby
 $:.unshift(File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;))
-require &quot;poolparty&quot;
-require &quot;poolpartycl&quot;
+require &quot;poolparty/lite&quot;
 
-o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
-  opts.on('-c name', '--class name', 'Listing for cloud class (valid args: [name|ip])')    { |t| optioner.classname t }
-  opts.on('-n name', '--name name', 'Listing for cloud name')    { |c| optioner.cloudname c }
-end
+list_type = ARGV.pop || &quot;ip&quot;
 
-@ctype = (o.classname || &quot;name&quot;).downcase.to_sym
+json_file = ARGV[0] || PoolParty::Default.properties_hash_file
+raise &quot;ERROR: no json_file given&quot; if !json_file
+schema = PoolParty::Schema.new( ::File.read(json_file) )
 
-o.loaded_clouds.each do |cloud|
-  with_cloud(cloud, {:ctype =&gt; @ctype}) do
-    print &quot;#{list_of_running_instances.collect{|a| &quot;#{a.send ctype}&quot; }.join(&quot;\t&quot;)}&quot;
-  end  
-  
-end
\ No newline at end of file
+remoter_base = schema.options.remote_base
+
+instances = PoolParty::Remote::Ec2.describe_instances(schema.options)
+print instances.map {|inst| inst.send list_type.to_sym }.join(&quot;\t&quot;)
\ No newline at end of file</diff>
      <filename>bin/server-list-active</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@ Dir[&quot;#{::File.dirname(__FILE__)}/../lib/poolparty/modules/*.rb&quot;].each {|f| requi
 require &quot;poolparty/base&quot;
 
 def query(meth, *args)
-  socket = TCPSocket.open(&quot;127.0.0.1&quot;, PoolParty::Base.agent_port)
+  socket = TCPSocket.open(&quot;127.0.0.1&quot;, PoolParty::Default.agent_port)
   out = socket.send(&quot;#{meth} #{args}&quot;, 100)
   socket.close
   out</diff>
      <filename>bin/server-query-agent</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@ include Remote
 @clouds.each do |cl|
   
   with_cloud(cl, {:testing =&gt; o.testing}) do
-    cmd = PoolParty::Remote::RemoteInstance.puppet_runner_command
+    cmd = PoolParty::Remote::RemoteInstance.dependency_resolver_comand
     %x[#{cmd}] unless testing
   end  
   </diff>
      <filename>bin/server-rerun</filename>
    </modified>
    <modified>
      <diff>@@ -30,7 +30,7 @@ o.loaded_clouds.each do |cloud|
     if testing
       puts new_hosts_listing
     else
-      new_hosts_file = &quot;#{Base.manifest_path}/classes/hosts.pp&quot;
+      new_hosts_file = &quot;#{Default.manifest_path}/classes/hosts.pp&quot;
       
       arr = returning Array.new do |arr|
         new_hosts_listing.split(/\n/).each do |line|</diff>
      <filename>bin/server-update-hosts</filename>
    </modified>
    <modified>
      <diff>@@ -11,7 +11,7 @@ end
 o.loaded_clouds.each do |cloud|
   with_cloud(cloud) do    
 
-    new_nodes_file = &quot;#{Base.manifest_path}/nodes/nodes.pp&quot;
+    new_nodes_file = &quot;#{Default.manifest_path}/nodes/nodes.pp&quot;
             
     str = returning Array.new do |arr|
       arr &lt;&lt; &quot;node default { include poolparty }&quot;</diff>
      <filename>bin/server-write-new-nodes</filename>
    </modified>
    <modified>
      <diff>@@ -2,14 +2,6 @@ require 'fileutils'
 include FileUtils
 
 require 'rubygems'
-%w[rake hoe newgem rubigen].each do |req_gem|
-  begin
-    require req_gem
-  rescue LoadError
-    puts &quot;This Rakefile requires the '#{req_gem}' RubyGem.&quot;
-    puts &quot;Installation: gem install #{req_gem} -y&quot;
-    exit
-  end
-end
+require 'rake'
 
 $:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))</diff>
      <filename>config/requirements.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,20 +1,23 @@
 # Basic pool spec
 # Shows global settings for the clouds
-
 pool :application do
-  
-  instances 3..5
+  instances 3..50
   keypair &quot;auser&quot;
+  testing true
   
-  cloud :app do
-    minimum_instances 2
+  cloud :basic_app do
+    minimum_instances 12
     ami &quot;ami-abc123&quot;
+    junk_yard_dogs &quot;pains&quot;
+    has_file :name =&gt; &quot;/etc/init.d/motd&quot;, :content =&gt; &quot;Welcome to your PoolParty instance&quot;
   end
   
-  cloud :db do
+  cloud :basic_db do
+    minimum_instances 19
     keypair &quot;hotstuff_database&quot;
     maximum_instances 20
     ami &quot;ami-1234bc&quot;
+    junk_yard_dogs &quot;are bad&quot;
   end
 
 end
\ No newline at end of file</diff>
      <filename>examples/basic.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@ class PoolspecGenerator &lt; RubiGen::Base
       m.directory ''
       BASEDIRS.each { |path| m.directory path }
       
-      m.template &quot;pool_spec_template.erb&quot;, &quot;clouds.pool&quot;
+      m.template &quot;pool_spec_template.erb&quot;, &quot;clouds.rb&quot;
       # Create stubs
       # m.template &quot;template.rb&quot;,  &quot;some_file_after_erb.rb&quot;
       # m.template_copy_each [&quot;template.rb&quot;, &quot;template2.rb&quot;]
@@ -31,14 +31,6 @@ class PoolspecGenerator &lt; RubiGen::Base
   end
 
   protected
-    def banner
-      &lt;&lt;-EOS
-Creates a basic poolparty spec tempalte
-
-USAGE: #{spec.name} name
-EOS
-    end
-
     def add_options!(opts)
       opts.separator ''
       opts.separator 'Options:'</diff>
      <filename>generators/poolspec/poolspec_generator.rb</filename>
    </modified>
    <modified>
      <diff>@@ -54,7 +54,7 @@ task :compile =&gt; ['ebin'] + OBJ
 desc &quot;Rebuild the boot scripts&quot;
 task :build_boot_scripts =&gt; [:recompile] do
   puts &quot;Rebuilding boot scripts&quot;
-  @version = &quot;0.1&quot;
+  @version = ENV[&quot;VERSION&quot;] || ENV[&quot;V&quot;] || 0.1
   cmd = &quot;erl -pa ./ebin/ -run pm_packager recompile_scripts #{@version} -run init stop -noshell&quot;
   Kernel.system cmd
 end</diff>
      <filename>lib/erlang/messenger/Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -38,7 +38,7 @@
 
 % Get the load for the type sent...
 get_current_load_for_type(Type) -&gt;
-	String = string:concat(&quot;. /etc/profile &amp;&amp; server-get-load -m &quot;,Type),
+	String = string:concat(&quot;. /etc/profile &amp;&amp; server-get-load &quot;,Type),
 	LatestLoad = os:cmd(String), 
 	Load = gen_server:call(server_location(), {update_load, Type, LatestLoad}),
 	{Load}.</diff>
      <filename>lib/erlang/messenger/src/pm_node.erl</filename>
    </modified>
    <modified>
      <diff>@@ -58,7 +58,6 @@ average_for_list(Num, L) -&gt;
 % Provisioning utils
 distribute_modules_to(Modules, Nodes) -&gt;
 	% transfer the modules to all the nodes
-	io:format(&quot;Sending ~p to ~p~n&quot;, [Modules, Nodes]),
 	lists:foreach(fun(Node) -&gt;
 			transfer_modules(Node, Modules)
 	end, Nodes).</diff>
      <filename>lib/erlang/messenger/src/utils.erl</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,8 @@
+$LOAD_PATH&lt;&lt; File.dirname(__FILE__)
 # Load required gems
+#TODO: remove activesupport
 @required_software = Array.new
-%w(rubygems activesupport ftools logging resolv ruby2ruby digest/sha2).each do |lib|
+%w(rubygems activesupport ftools logging resolv ruby2ruby digest/sha2 json pp).each do |lib|
   begin
     require lib
   rescue Exception =&gt; e
@@ -30,28 +32,79 @@ unless @required_software.empty?
   exit(0)
 end
 
-# Use active supports auto load mechanism
-ActiveSupport::Dependencies.load_paths &lt;&lt; File.dirname(__FILE__)
+Dir.glob(File.join(File.dirname(__FILE__),'..', 'vendor/gems/*/lib/*.rb')).each do |d|
+  require d
+end
 
+t=Time.now
 ## Load PoolParty
 %w(version).each do |f|
   require &quot;#{File.dirname(__FILE__)}/poolparty/#{f}&quot;
 end
 
-%w(core modules exceptions dependency_resolutions aska monitors provisioners server extra net).each do |dir|
-  Dir[File.dirname(__FILE__) + &quot;/poolparty/#{dir}/**.rb&quot;].each do |file|
-    require file
+def PoolParty.require_directory(dir)
+  if ::File.file?(dir)
+    puts &quot;#{::File.expand_path(dir)}&quot; if $DEBUGGING || $GENERATING_MANIFEST
+    require dir
+  else
+    Dir[&quot;#{dir}/*.rb&quot;].sort.each do |file|
+       puts &quot;#{::File.expand_path(file)}&quot; if $DEBUGGING || $GENERATING_MANIFEST
+       require &quot;#{file}&quot; if ::File.file?(file)
+    end
+    Dir[&quot;#{dir}/*&quot;].sort.each do |dir|
+      require_directory(dir) if ::File.directory?(dir)
+    end
+  end
+end
+
+#load poolparty framework in specific order
+$_poolparty_load_directories = [
+  &quot;core&quot;,
+  &quot;dependencies.rb&quot;,
+  &quot;dependency_resolver/dependency_resolver_cloud_extensions.rb&quot;,
+  &quot;poolparty/poolparty_base_class.rb&quot;,
+  &quot;modules&quot;,
+  &quot;exceptions&quot;,
+  'poolparty/key.rb',
+  &quot;dependency_resolver&quot;,
+  &quot;aska&quot;,
+  &quot;config&quot;,
+  &quot;monitors&quot;,
+  &quot;capistrano.rb&quot;,
+  'provisioners/provisioner_base.rb',
+  'provisioners/capistrano/capistrano.rb',
+  'provision',
+  &quot;extra&quot;,
+  &quot;net&quot;,
+  &quot;helpers&quot;,
+  &quot;poolparty/resource.rb&quot;,
+  &quot;poolparty/service.rb&quot;,
+  &quot;resources&quot;,
+  &quot;services&quot;,
+  &quot;poolparty/cloud.rb&quot;,
+  &quot;poolparty&quot;,
+  &quot;templates&quot;
+  ]
+manifest_file_location = ::File.join(::File.dirname(__FILE__), '../config/manifest.pp')
+
+if ::File.file?(manifest_file_location)
+  ::File.readlines(manifest_file_location).each do |line| 
+    puts &quot;#{::File.expand_path(line)}&quot; if $DEBUGGING
+    require &quot;#{line.gsub(/\n/, '')}&quot;
   end
+else
+  $_poolparty_load_directories.each do |dir|
+    PoolParty.require_directory(::File.join(::File.dirname(__FILE__),'poolparty', dir))
+  end  
 end
 
-Kernel.load_p File.dirname(__FILE__) + &quot;/poolparty/poolparty&quot;
 Logging.init :debug, :info, :warn, :error, :fatal
 
 module PoolParty
   include FileWriter
   
   def log
-    @logger ||= make_new_logger
+    @logger ||= STDOUT #make_new_logger
   end
   def reset!
     $pools = $clouds = $plugins = @describe_instances = nil
@@ -65,10 +118,10 @@ module PoolParty
   
   private
   #:nodoc:#
-  def make_new_logger
-    FileUtils.mkdir_p ::File.dirname(Base.pool_logger_location) unless ::File.directory?(::File.dirname(Base.pool_logger_location))
-    Loggable.new
-  end
+  # def make_new_logger
+  #   FileUtils.mkdir_p ::File.dirname(Default.pool_logger_location) unless ::File.directory?(::File.dirname(Default.pool_logger_location))
+  #   Loggable.new
+  # end
 end
 
 class Object
@@ -80,16 +133,15 @@ class Object
 end
 
 class Class
-  include PoolParty::PluginModel  
+  include PoolParty::PluginModel
 end
 
 ## Load PoolParty Plugins and package
 module PoolParty
   %w(plugins base_packages).each do |dir|
-    Dir[::File.dirname(__FILE__) + &quot;/poolparty/#{dir}/*.rb&quot;].each do |file|
-      require file
-    end
+    require_directory(::File.join(::File.dirname(__FILE__), 'poolparty', dir))
   end
 end
 
-PoolParty.reset!
\ No newline at end of file
+PoolParty.reset!
+puts &quot;duration = #{Time.now-t}&quot; if $DEBUGGING</diff>
      <filename>lib/poolparty.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,40 +1,43 @@
 module PoolParty
   class Base
-    plugin :haproxy do
+    plugin :poolparty_base_haproxy do
       
       def enable
-        execute_on_master do
-          has_package({:name =&gt; &quot;haproxy&quot;})
+        case_of &quot;hostname&quot; do
+          when_is &quot;master&quot; do
+            has_package({:name =&gt; &quot;haproxy&quot;})
           
-          # Restart sysklogd after we update the haproxy.log
-          has_service(:name =&gt; &quot;sysklogd&quot;)
+            # Restart sysklogd after we update the haproxy.log
+            has_service(:name =&gt; &quot;sysklogd&quot;)
           
-          # Template variables          
-          has_variable(:name =&gt; &quot;name_haproxy&quot;, :value =&gt; &quot;#{cloud.name}&quot;)
-          has_variable(:name =&gt; &quot;nodenames_haproxy&quot;, :value =&gt; &quot;generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'name', '-n', '#{cloud.name}')&quot;)
-          has_variable(:name =&gt; &quot;node_ips_haproxy&quot;,  :value =&gt; &quot;generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'ip', '-n', '#{cloud.name}')&quot;)
+            # Template variables
+            has_variable(&quot;name_haproxy&quot;, :value =&gt; &quot;#{cloud.name}&quot;)
+            has_variable(&quot;nodenames_haproxy&quot;, :value =&gt; &quot;generate('/usr/bin/env', '/usr/bin/server-list-active', 'name')&quot;)
+            has_variable(&quot;node_ips_haproxy&quot;,  :value =&gt; &quot;generate('/usr/bin/env', '/usr/bin/server-list-active', 'ip')&quot;)
+            # 
+            has_variable(&quot;ports_haproxy&quot;, :value =&gt; ([(self.respond_to?(:port) ? port : Default.port)].flatten))        
+            has_variable(&quot;forwarding_port&quot;, :value =&gt; (respond_to?(:forwarding_port) ? forwarding_port : Default.forwarding_port))
+            has_variable(&quot;proxy_mode&quot;, :value =&gt; (respond_to?(:proxy_mode) ? proxy_mode : Default.proxy_mode))
           
-          has_variable(:name =&gt; &quot;ports_haproxy&quot;, :value =&gt; ([(self.respond_to?(:port) ? port : Base.port)].flatten))        
-          has_variable(:name =&gt; &quot;forwarding_port&quot;, :value =&gt; (respond_to?(:forwarding_port) ? forwarding_port : Base.forwarding_port))
-          has_variable(:name =&gt; &quot;proxy_mode&quot;, :value =&gt; (respond_to?(:proxy_mode) ? proxy_mode : Base.proxy_mode))
+            # Startup haproxy and enable it
+            has_line_in_file(:line =&gt; &quot;ENABLED=1&quot;, :file =&gt; &quot;/etc/default/haproxy&quot;)
+            has_line_in_file({:line =&gt; &quot;SYSLOGD=\&quot;-r\&quot;&quot;, :file =&gt; &quot;/etc/default/syslogd&quot;})
+            has_line_in_file({:line =&gt; &quot;local0.* /var/log/haproxy.log&quot;, :file =&gt; &quot;/etc/syslog.conf&quot;}, {:notify =&gt; get_service(&quot;sysklogd&quot;)})
+                    
+            has_exec(:name =&gt; &quot;reloadhaproxy&quot;, 
+              :command =&gt; &quot;/etc/init.d/haproxy reload&quot;, 
+              :requires =&gt; get_package(&quot;haproxy&quot;))
+            # Service is required
+            has_service(&quot;haproxy&quot;, :ensures =&gt; &quot;running&quot;, :hasrestart =&gt; true)
+            has_service(:name =&gt; &quot;haproxy&quot;, :ensures =&gt; &quot;running&quot;, :hasrestart =&gt; true, :notify =&gt; get_exec(&quot;reloadhaproxy&quot;))
           
-          # Startup haproxy and enable it
-          has_line_in_file(&quot;ENABLED=1&quot;, &quot;/etc/default/haproxy&quot;)
-          has_line_in_file(&quot;SYSLOGD=\&quot;-r\&quot;&quot;, &quot;/etc/default/syslogd&quot;)
-          has_line_in_file(&quot;local0.* /var/log/haproxy.log&quot;, &quot;/etc/syslog.conf&quot;, {:notify =&gt; get_service(&quot;sysklogd&quot;)})
-          
-          has_exec(:name =&gt; &quot;reloadhaproxy&quot;, 
-            :command =&gt; &quot;/etc/init.d/haproxy reload&quot;, 
-            :requires =&gt; get_package(&quot;haproxy&quot;))
-          # Service is required
-          has_service(:name =&gt; &quot;haproxy&quot;, :ensures =&gt; &quot;running&quot;, :hasrestart =&gt; true, :notify =&gt; get_exec(&quot;reloadhaproxy&quot;))
-
-          # These can also be passed in via hash
-          has_remotefile(:name =&gt; &quot;/etc/haproxy.cfg&quot;) do
-            mode 644
-            requires get_package(&quot;haproxy&quot;)
-            notify get_service(&quot;haproxy&quot;)            
-            template &quot;haproxy.conf&quot;
+            # These can also be passed in via hash
+            # has_remotefile(:name =&gt; &quot;/etc/haproxy.cfg&quot;) do
+            #   mode 644
+            #   requires get_package(&quot;haproxy&quot;)
+            #   notify get_service(&quot;haproxy&quot;)            
+            #   template &quot;haproxy.conf&quot;
+            # end
           end
         end
       end</diff>
      <filename>lib/poolparty/base_packages/haproxy.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,70 +1,53 @@
 module PoolParty
   class Base
-    plugin :heartbeat do
+    plugin :poolparty_base_heartbeat do
       
-      def enable
+      def enable        
         # execute_on_master do
-          has_package(:name =&gt; &quot;heartbeat&quot;) do
-            has_service(:name =&gt; &quot;heartbeat&quot;, :hasstatus =&gt; true, :hasrestart =&gt; true)
-            has_directory(:name =&gt; &quot;/etc/ha.d&quot;)
-            
-            has_remotefile(:name =&gt; &quot;/etc/ha.d/ha.cf&quot;) do
-              mode 444
-              notify service(:name =&gt; &quot;heartbeat&quot;)
-              template &quot;ha.cf&quot;
-            end
-            
-            has_remotefile(:name =&gt; &quot;/etc/ha.d/logd.cf&quot;) do
-              mode 600
-              notify service(:name =&gt; &quot;heartbeat&quot;)
-              template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/logd.cf&quot;)
-            end
-            
-            has_exec(:name =&gt; &quot;heartbeat-update-cib&quot;, :command =&gt; &quot;/usr/sbin/cibadmin -R -x /etc/ha.d/cib.xml&quot;, :refreshonly =&gt; true)
-        
-            has_remotefile(:name =&gt; &quot;/etc/ha.d/authkeys&quot;) do
-              mode 600
-              notify service(:name =&gt; &quot;heartbeat&quot;)
-              template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/authkeys&quot;)
-            end
-        
-            has_remotefile(:name =&gt; &quot;/etc/ha.d/cib.xml&quot;) do
-              mode 444
-              notify exec(:name =&gt; &quot;heartbeat-update-cib&quot;)
-              template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/cib.xml&quot;)
-            end
-            
-            has_remotefile(:name =&gt; &quot;/etc/ha.d/haresources&quot;) do
-              mode 644
-              template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/haresources&quot;)
-            end
-          # end
-          
-          # variables for the templates
-          has_variable(:name =&gt; &quot;ha_nodenames&quot;, :value =&gt; &quot;generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'name', '-n', '#{cloud.name}')&quot;)
-          has_variable(:name =&gt; &quot;ha_node_ips&quot;,  :value =&gt; &quot;generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'ip', '-n', '#{cloud.name}')&quot;)
-          
-          has_variable({:name =&gt; &quot;ha_timeout&quot;,  :value =&gt; (self.respond_to?(:timeout) ? timeout : &quot;5s&quot;)})
-          has_variable({:name =&gt; &quot;ha_port&quot;, :value =&gt; (self.respond_to?(:port) ? port : Base.port)})
-          
-          # Finally, let's set a few options and start it
-#           has_exec(:name =&gt; &quot;set and start&quot;) do
-#             refreshonly true
-#             command &lt;&lt;-EOC
-# crm_mon -i5            
-#             EOC
-#           end
-          
-        end
-        
-        # execute_on_master do
-        #   if list_of_node_names.size &gt; 1
-        #     has_exec(:name =&gt; &quot;update pem for heartbeat&quot;, :refreshonly =&gt; true) do
-        #       command &quot;scp /etc/puppet/ssl/ca/ca_crl.pem #{user || Base.user}@#{list_of_node_ips[1]}:#{Base.base_config_directory}/ssl/ca&quot;
-        #     end
-        #   end
+        has_package({:name =&gt; &quot;heartbeat&quot;})
+      
+        # has_service(:name =&gt; &quot;heartbeat&quot;, :hasstatus =&gt; true, :hasrestart =&gt; true)
+        # has_directory(:name =&gt; &quot;/etc/ha.d&quot;)
+        # 
+        # has_remotefile(:name =&gt; &quot;/etc/ha.d/ha.cf&quot;) do
+        #   mode 444
+        #   notify service(:name =&gt; &quot;heartbeat&quot;)
+        #   template &quot;ha.cf&quot;
         # end
-        
+        # 
+        # has_remotefile(:name =&gt; &quot;/etc/ha.d/logd.cf&quot;) do
+        #   mode 600
+        #   notify service(:name =&gt; &quot;heartbeat&quot;)
+        #   template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/logd.cf&quot;)
+        # end
+        # 
+        # has_exec(:name =&gt; &quot;heartbeat-update-cib&quot;, :command =&gt; &quot;/usr/sbin/cibadmin -R -x /etc/ha.d/cib.xml&quot;, :refreshonly =&gt; true)
+        #     
+        # has_remotefile(:name =&gt; &quot;/etc/ha.d/authkeys&quot;) do
+        #   mode 600
+        #   notify service(:name =&gt; &quot;heartbeat&quot;)
+        #   template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/authkeys&quot;)
+        # end
+        #     
+        # has_remotefile(:name =&gt; &quot;/etc/ha.d/cib.xml&quot;) do
+        #   mode 444
+        #   notify exec(:name =&gt; &quot;heartbeat-update-cib&quot;)
+        #   template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/cib.xml&quot;)
+        # end
+        # 
+        # has_remotefile(:name =&gt; &quot;/etc/ha.d/haresources&quot;) do
+        #   mode 644
+        #   template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/haresources&quot;)
+        # end
+        # # end
+        # 
+        # # variables for the templates
+        # has_variable(:name =&gt; &quot;ha_nodenames&quot;, :value =&gt; &quot;generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'name', '-n', '#{cloud.name}')&quot;)
+        # has_variable(:name =&gt; &quot;ha_node_ips&quot;,  :value =&gt; &quot;generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'ip', '-n', '#{cloud.name}')&quot;)
+        # 
+        # has_variable({:name =&gt; &quot;ha_timeout&quot;,  :value =&gt; (self.respond_to?(:timeout) ? timeout : &quot;5s&quot;)})
+        # has_variable({:name =&gt; &quot;ha_port&quot;, :value =&gt; (self.respond_to?(:port) ? port : Default.port)})
+          
       end
 
     end  </diff>
      <filename>lib/poolparty/base_packages/heartbeat.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,92 +2,82 @@ module PoolParty
   class Base
     plugin :poolparty_base_packages do
       
-      def enable                
-        # Build hostsfile
-        
-        has_package(:name =&gt; &quot;erlang&quot;)
-        has_package(:name =&gt; &quot;erlang-dev&quot;)
-        has_package(:name =&gt; &quot;erlang-src&quot;)
-        # has_package(:name =&gt; &quot;yaws&quot;)
-        
-        has_package(:name =&gt; &quot;rubygems&quot;) do
-          # These should be installed automagically by poolparty, but just in case
-          # TODO: Fix the requires method with a helper
-          has_gempackage(:name =&gt; &quot;flexmock&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/42580/flexmock-0.8.3.gem&quot;)
-          has_gempackage(:name =&gt; &quot;lockfile&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/18698/lockfile-1.4.3.gem&quot;)
-          has_gempackage(:name =&gt; &quot;logging&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/44731/logging-0.9.4.gem&quot;, :requires =&gt; [get_gempackage(&quot;flexmock&quot;), get_gempackage(&quot;lockfile&quot;)])          
-          
-          has_gempackage(:name =&gt; &quot;rubyforge&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45546/rubyforge-1.0.1.gem&quot;)
-          has_gempackage(:name =&gt; &quot;hoe&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45685/hoe-1.8.2.gem&quot;, :version =&gt; &quot;1.8&quot;, :requires =&gt; get_gempackage(&quot;rubyforge&quot;))
-          has_gempackage(:name =&gt; &quot;ZenTest&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem&quot;, :requires =&gt; [get_gempackage(&quot;hoe&quot;), get_gempackage(&quot;rubyforge&quot;)])
-          
-          has_gempackage(:name =&gt; &quot;rake&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem&quot;)
-          has_gempackage(:name =&gt; &quot;xml-simple&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/18366/xml-simple-1.0.11.gem&quot;)
-          has_gempackage(:name =&gt; &quot;amazon-ec2&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem&quot;, :requires =&gt; get_gempackage(&quot;xml-simple&quot;))
-          
-          has_gempackage(:name =&gt; &quot;sexp_processor&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem&quot;)
-          
-          # Capistrano
-          has_gempackage(:name =&gt; &quot;net-ssh&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/51288/net-ssh-2.0.10.gem&quot;, :version =&gt; &quot;2.0.10&quot;)
-          has_gempackage(:name =&gt; &quot;net-sftp&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/37669/net-sftp-2.0.1.gem&quot;)
-          has_gempackage(:name =&gt; &quot;net-scp&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/37664/net-scp-1.0.1.gem&quot;)
-          has_gempackage(:name =&gt; &quot;net-ssh-gateway&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/36389/net-ssh-gateway-1.0.0.gem&quot;)
-          has_gempackage(:name =&gt; &quot;echoe&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/51240/echoe-3.1.gem&quot;)
-          has_gempackage(:name =&gt; &quot;highline&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/46328/highline-1.5.0.gem&quot;)
-          has_gempackage(:name =&gt; &quot;capistrano&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/51294/capistrano-2.5.4.gem&quot;, :requires =&gt; get_gempackage(&quot;highline&quot;))
-          
-          has_gempackage(:name =&gt; &quot;ParseTree&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45600/ParseTree-3.0.1.gem&quot;, :requires =&gt; [get_gempackage(&quot;sexp_processor&quot;), get_gempackage(&quot;ZenTest&quot;)])
-            
-          has_gempackage(:name =&gt; &quot;ruby2ruby&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45587/ruby2ruby-1.2.0.gem&quot;, :requires =&gt; get_gempackage(&quot;ParseTree&quot;))
-          
-          has_gempackage(:name =&gt; &quot;activesupport&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem&quot;)
- 
-          has_gempackage(:name =&gt; &quot;RubyInline&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem&quot;)
-          
-          has_gempackage(:name =&gt; &quot;poolparty&quot;, :download_url =&gt; &quot;http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true&quot;, :requires =&gt; [get_gempackage(&quot;ruby2ruby&quot;), get_gempackage(&quot;RubyInline&quot;), get_gempackage(&quot;ParseTree&quot;)])
-          
-          # , :ifnot =&gt; &quot;/bin/ps aux | /bin/grep -q pm_node&quot;
-          # has_runit_service(&quot;pm_node&quot;, &quot;pm_node&quot;, File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/messenger/node/&quot;))
-        end
-        
-        has_exec(:name =&gt; &quot;build_messenger&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; server-build-messenger&quot;)
-        has_exec(:name =&gt; &quot;start_node&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; server-start-node&quot;)        
-        
-        # execute_on_node do
-        has_remotefile(:name =&gt; &quot;/usr/bin/puppetrunner&quot;) do
-          mode 744
-          template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/puppetrunner&quot;)
-        end
-        
-        # has_exec(:name =&gt; &quot;Puppet runner&quot;, :command =&gt; &quot;/usr/bin/puppetrunner&quot;)
-        has_cron(:name =&gt; &quot;Run the provisioner&quot;, :command =&gt; &quot;/usr/bin/puppetrunner&quot;, :minute =&gt; &quot;*/15&quot;)
-        has_user(:name =&gt; user)
-        
-        # Custom run puppet to minimize footprint
-        # TODO: Update the offsetted times
-        has_remotefile(:name =&gt; &quot;/usr/bin/puppetrerun&quot;) do
-          mode 744
-          template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/puppetrerun&quot;)
-        end
-        
-        has_remotefile(:name =&gt; &quot;/usr/bin/puppetcleaner&quot;) do
-          mode 744
-          template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/puppetcleaner&quot;)
-        end
-        
-        execute_on_master do
-          has_exec(:name =&gt; &quot;update_hosts&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; server-update-hosts -n #{cloud.name}&quot;)
-          has_exec(:name =&gt; &quot;Handle load&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; cloud-handle-load -n #{cloud.name}&quot;)
-          has_exec(:name =&gt; &quot;Ensure provisioning&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; server-ensure-provisioning -n #{cloud.name}&quot;)            
-          has_exec(:name =&gt; &quot;start master messenger&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; server-start-master&quot;) #, :ifnot =&gt; &quot;/bin/ps aux | /bin/grep -q pm_master&quot;
-          has_exec(:name =&gt; &quot;start client server&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; server-start-client&quot;) #, :ifnot =&gt; &quot;/bin/ps aux | /bin/grep -q client_server&quot;
-          has_exec(:name =&gt; &quot;Maintain the cloud&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; cloud-maintain -n #{cloud.name}&quot;)          
-          has_cron(:name =&gt; &quot;ensure puppetmaster is running&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; puppetmasterd --verbose&quot;, :hour =&gt; &quot;1&quot;)
-          
-        end        
-        # has_host(:name =&gt; &quot;puppet&quot;, :ip =&gt; (self.respond_to?(:master) ? self : parent).master.ip)
-      end
+      # def enable
+      #   # Build hostsfile
+      #   
+      #   has_package(:name =&gt; &quot;erlang&quot;)
+      #   has_package(:name =&gt; &quot;erlang-dev&quot;)
+      #   has_package(:name =&gt; &quot;erlang-src&quot;)
+      #   # has_package(:name =&gt; &quot;yaws&quot;)
+      #   
+      #   has_package(:name =&gt; &quot;rubygems&quot;)
+      #     # These should be installed automagically by poolparty, but just in case
+      #     # TODO: Fix the requires method with a helper
+      #     has_gempackage(:name =&gt; &quot;flexmock&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/42580/flexmock-0.8.3.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;lockfile&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/18698/lockfile-1.4.3.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;logging&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/44731/logging-0.9.4.gem&quot;, :requires =&gt; [get_gempackage(&quot;flexmock&quot;), get_gempackage(&quot;lockfile&quot;)])          
+      #     
+      #     has_gempackage(:name =&gt; &quot;rubyforge&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45546/rubyforge-1.0.1.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;hoe&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45685/hoe-1.8.2.gem&quot;, :version =&gt; &quot;1.8&quot;, :requires =&gt; get_gempackage(&quot;rubyforge&quot;))
+      #     has_gempackage(:name =&gt; &quot;ZenTest&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem&quot;, :requires =&gt; [get_gempackage(&quot;hoe&quot;), get_gempackage(&quot;rubyforge&quot;)])
+      #     
+      #     has_gempackage(:name =&gt; &quot;rake&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;xml-simple&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/18366/xml-simple-1.0.11.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;amazon-ec2&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem&quot;, :requires =&gt; get_gempackage(&quot;xml-simple&quot;))
+      #     
+      #     has_gempackage(:name =&gt; &quot;sexp_processor&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem&quot;)
+      #     
+      #     # Capistrano
+      #     has_gempackage(:name =&gt; &quot;net-ssh&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/51288/net-ssh-2.0.10.gem&quot;, :version =&gt; &quot;2.0.10&quot;)
+      #     has_gempackage(:name =&gt; &quot;net-sftp&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/37669/net-sftp-2.0.1.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;net-scp&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/37664/net-scp-1.0.1.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;net-ssh-gateway&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/36389/net-ssh-gateway-1.0.0.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;echoe&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/51240/echoe-3.1.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;highline&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/46328/highline-1.5.0.gem&quot;)
+      #     has_gempackage(:name =&gt; &quot;capistrano&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/51294/capistrano-2.5.4.gem&quot;, :requires =&gt; get_gempackage(&quot;highline&quot;))
+      #     
+      #     has_gempackage(:name =&gt; &quot;ParseTree&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45600/ParseTree-3.0.1.gem&quot;, :requires =&gt; [get_gempackage(&quot;sexp_processor&quot;), get_gempackage(&quot;ZenTest&quot;)])
+      #       
+      #     has_gempackage(:name =&gt; &quot;ruby2ruby&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45587/ruby2ruby-1.2.0.gem&quot;, :requires =&gt; get_gempackage(&quot;ParseTree&quot;))
+      #     
+      #     has_gempackage(:name =&gt; &quot;activesupport&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem&quot;)
+      #  
+      #     has_gempackage(:name =&gt; &quot;RubyInline&quot;, :download_url =&gt; &quot;http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem&quot;)
+      #     
+      #     has_gempackage(:name =&gt; &quot;poolparty&quot;, :download_url =&gt; &quot;http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true&quot;, :requires =&gt; [get_gempackage(&quot;ruby2ruby&quot;), get_gempackage(&quot;RubyInline&quot;), get_gempackage(&quot;ParseTree&quot;)])
+      #     
+      #     # , :ifnot =&gt; &quot;/bin/ps aux | /bin/grep -q pm_node&quot;
+      #     # has_runit_service(&quot;pm_node&quot;, &quot;pm_node&quot;, File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/messenger/node/&quot;))
+      #   # end
+      #   
+      #   has_exec(:name =&gt; &quot;build_messenger&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; server-build-messenger&quot;)
+      #   has_exec(:name =&gt; &quot;start_node&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; server-start-node&quot;)        
+      #   
+      #   has_remotefile(:name =&gt; &quot;/usr/bin/puppetrunner&quot;) do
+      #     mode 744
+      #     template File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates/puppetrunner&quot;)
+      #   end
+      #   
+      #   has_exec(:name =&gt; &quot;Puppet runner&quot;, :command =&gt; &quot;/usr/bin/puppetrunner&quot;)
+      #   has_cron(:name =&gt; &quot;Run the provisioner&quot;, :command =&gt; &quot;/usr/bin/puppetrunner&quot;, :minute =&gt; &quot;*/10&quot;)
+      #   has_user(:name =&gt; user)
+      #   
+      #   # case_of &quot;hostname&quot;
+      #   # when_is &quot;master&quot; do
+      #   #   poolparty_bin_path=&quot;/var/lib/gems/1.8/bin&quot;
+      #   #   has_exec(:name =&gt; &quot;update_hosts&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; #{poolparty_bin_path}/server-update-hosts -n #{cloud.name}&quot;)
+      #   #   has_exec(:name =&gt; &quot;Handle load&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; #{poolparty_bin_path}/cloud-handle-load -n #{cloud.name}&quot;)
+      #   #   has_exec(:name =&gt; &quot;Ensure provisioning&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; #{poolparty_bin_path}/server-ensure-provisioning -n #{cloud.name}&quot;)            
+      #   #   has_exec(:name =&gt; &quot;start master messenger&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; #{poolparty_bin_path}/server-start-master&quot;) #, :ifnot =&gt; &quot;/bin/ps aux | /bin/grep -q pm_master&quot;
+      #   #   has_exec(:name =&gt; &quot;start client server&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; #{poolparty_bin_path}/server-start-client&quot;) #, :ifnot =&gt; &quot;/bin/ps aux | /bin/grep -q client_server&quot;
+      #   #   has_exec(:name =&gt; &quot;Maintain the cloud&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; #{poolparty_bin_path}/cloud-maintain -n #{cloud.name}&quot;)          
+      #   #   # has_cron(:name =&gt; &quot;ensure puppetmaster is running&quot;, :command =&gt; &quot;. /etc/profile &amp;&amp; puppetmasterd --verbose&quot;, :hour =&gt; &quot;1&quot;)
+      #   #   
+      #   # end
+      #   # end_of
+      #   # has_host(:name =&gt; &quot;puppet&quot;, :ip =&gt; (self.respond_to?(:master) ? self : parent).master.ip)
+      # end
       
-    end  
+    end
   end
 end
\ No newline at end of file</diff>
      <filename>lib/poolparty/base_packages/poolparty.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
 module PoolParty
   class Base
-    plugin :ruby do
+    plugin :poolparty_base_ruby do
       
-      def enable                
+      def enable
         install_base_packages
       end
       
@@ -10,9 +10,9 @@ module PoolParty
         has_package(:name =&gt; &quot;libreadline-ruby1.8&quot;)
         has_package(:name =&gt; &quot;libruby1.8&quot;)                
         has_package(:name =&gt; &quot;ruby1.8-dev&quot;)
-        has_package(:name =&gt; &quot;ruby1.8&quot;)        
+        has_package(:name =&gt; &quot;ruby1.8&quot;)
         
-        has_line_in_file(&quot;export PATH=$PATH:/var/lib/gems/1.8/bin:/sbin&quot;, &quot;/etc/profile&quot;)
+        has_line_in_file(:line =&gt; &quot;export PATH=$PATH:/var/lib/gems/1.8/bin&quot;, :file =&gt; &quot;/etc/profile&quot;)
         
         # exec(:name =&gt; &quot;update-rubygems&quot;) do
         #   command &quot;gem update --system&quot;</diff>
      <filename>lib/poolparty/base_packages/ruby.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@
 =end
 module PoolParty
   class Base
-    plugin :runit do
+    plugin :poolparty_base_runit do
       
       def enable
         unless enabled</diff>
      <filename>lib/poolparty/base_packages/runit.rb</filename>
    </modified>
    <modified>
      <diff>@@ -17,7 +17,7 @@ module PoolParty
         $cap_clouds[name] = cld
         @cloud = cld
         instance_eval &lt;&lt;-EOE
-  ssh_options[:keys] = [ '#{cld.full_keypair_basename_path}' ]
+  ssh_options[:keys] = [ '#{cld.full_keypair_path}' ]
   set :user, '#{cld.user}'
   set :username, &quot;#{cld.user}&quot;
   ssh_options[:forward_agent] = true
@@ -33,6 +33,7 @@ module PoolParty
       set_cloud(name)
     end
     
+    # Get the master ip for the cloud to set in the deploy.rb file
     def cloud_master(name)
       get_cloud(name).ip
     end</diff>
      <filename>lib/poolparty/capistrano.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,10 +21,16 @@ class Array
   def get_named(str=&quot;&quot;)
     map {|a| a.name == str ? a : nil }.reject {|a| a.nil? }
   end
-  def to_option_string(ns=[])
-    &quot;[ #{map {|e| e.to_option_string }.reject {|a| a.nil? || a.empty? }.join(&quot;, &quot;)} ]&quot;
-  end
   def respec_string(ns=[])
     &quot;'#{map {|e| e.to_option_string }.join(&quot;', '&quot;)}'&quot;
   end
+  # Example  nodes.select_with_hash(:status=&gt;'running')
+  def select_with_hash(conditions={})
+    select do |node|
+      conditions.any? do |k,v| 
+        ( node.has_key?(k) &amp;&amp; node[k]==v ) or ( node.respond_to?(k) &amp;&amp; node.send(k)==v )
+      end
+    end
+  end
+    
 end
\ No newline at end of file</diff>
      <filename>lib/poolparty/core/array.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,16 +2,23 @@
   Hash extentions
 =end
 class Hash
-  alias :old_select :select
-
-  def select(&amp;block)
-    Hash[*self.old_select(&amp;block).inject([]){|res,(k,v)| res &lt;&lt; k &lt;&lt; v}]    
+  def choose(&amp;block)
+    Hash[*self.select(&amp;block).inject([]){|res,(k,v)| res &lt;&lt; k &lt;&lt; v}]    
   end
-  def extract!(&amp;block)
-    o = select(&amp;block)
-    o.keys.each {|k| self.delete(k) }
-    o
+
+  def to_instance_variables(inst=nil)
+    each do |k,v|
+      inst.instance_variable_set &quot;@#{k}&quot;, v
+      inst.class.send :attr_reader, k if inst
+    end
   end
+  
+  #TODO: deprecate
+  # def extract!(&amp;block)
+  #   o = Hash[*select(&amp;block).flatten]
+  #   o.keys.each {|k| self.delete(k) }
+  #   o
+  # end
   def append(other_hash)
     returning Hash.new do |h|
       h.merge!(self)
@@ -32,15 +39,12 @@ class Hash
   def safe_merge!(other_hash)
     merge!(other_hash.delete_if {|k,v| has_key?(k) &amp;&amp; !v.nil? })
   end
-  def flush_out(pre=&quot;&quot;, post=&quot;&quot;)
-    map {|k,v| &quot;#{pre}#{k} =&gt; #{v.to_option_string}#{post}&quot;}
-  end
   def to_os
     m={}
     each {|k,v| m[k] = v.to_os }
     MyOpenStruct.new(m)
   end
   def method_missing(sym, *args, &amp;block)
-    key?(sym) ? fetch(sym) : super
+    has_key?(sym) ? fetch(sym) : super
   end
 end
\ No newline at end of file</diff>
      <filename>lib/poolparty/core/hash.rb</filename>
    </modified>
    <modified>
      <diff>@@ -27,14 +27,6 @@ module Kernel
   def as(klass_or_obj, &amp;block)
     block.in_context(klass_or_obj).call
   end
-  def load_p(dir)
-    Dir[&quot;#{dir}/*.rb&quot;].sort.each do |file|
-      require &quot;#{file}&quot; if ::FileTest.file?(file)
-    end
-    Dir[&quot;#{dir}/*&quot;].sort.each do |dir|
-      load_p(dir) if ::FileTest.directory?(dir)
-    end
-  end
   def with_warnings_suppressed
     saved_verbosity = $-v
     $-v = nil
@@ -42,6 +34,18 @@ module Kernel
   ensure
     $-v = saved_verbosity
   end
+  
+  def capture_stdout(&amp;block)
+     old_stdout = $stdout
+     out = StringIO.new
+     $stdout = out
+     begin
+        block.call if block
+     ensure
+        $stdout = old_stdout
+     end
+     out.string
+  end
 
   #redirect stdout and stderr to /dev/null and reopen after block
   def hide_output</diff>
      <filename>lib/poolparty/core/kernel.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,9 @@ class Object
   def my_methods
     self.methods.sort - (self.class.methods + self.class.superclass.methods)
   end
+  def this
+    self
+  end
   def to_os
     self
   end  
@@ -13,8 +16,8 @@ class Object
     original = self.method(original_id).to_proc
     define_method(new_id){|*args| original.call(*args)}
   end
-  def with_options(opts={}, parent=self, &amp;block)
-    @p = parent.clone
+  def with_options(opts={}, par=nil, &amp;block)
+    @p = par.clone
     @p.options.merge!(opts)
     @p.instance_eval &amp;block if block
   end  
@@ -31,17 +34,7 @@ class Object
       v
     else
       vs = v.to_s.to_sym
-      respond_to?(vs) ? self.send(vs, *args) : v rescue v
-    end
-  end
-  def to_option_string
-    case self.class
-    when String
-      self.to_option_string
-    when Array
-      self.each {|a| a.to_option_string }.join(&quot; &quot;)
-    else
-      &quot;#{self}&quot;
+      respond_to?(vs) ? self.send(vs, *args) : v rescue v  #NOTE MF: maybe we should not rescue all errors?
     end
   end
   def respec_string
@@ -72,13 +65,12 @@ class Object
   def meta_undef name
     meta_eval { remove_method name }
   end
-  def run_in_context(context=self, &amp;block)
-    name=&quot;temp_#{self.class}_#{respond_to?(:parent) ? parent.to_s : Time.now.to_i}&quot;.to_sym
-    meta_def name, &amp;block
-    self.send name, context
-    # self.instance_eval &amp;block if block
-    meta_undef name rescue &quot;&quot;
-  end
+  # def run_in_context(context=self, &amp;block)
+  #   name=&quot;temp_#{self.class}_#{respond_to?(:parent) ? parent.to_s : Time.now.to_i}&quot;.to_sym
+  #   meta_def name, &amp;block
+  #   self.send name, context
+  #   meta_undef name rescue &quot;&quot;
+  # end
   def vputs(m=&quot;&quot;, o=self)
     puts m if o.verbose rescue &quot;&quot;
   end
@@ -86,8 +78,15 @@ class Object
     print m if o.verbose rescue &quot;&quot;
   end
   def dputs(m=&quot;&quot;, o=self)
-    puts m if o.debugging rescue &quot;&quot;
+    puts &quot;-- #{m}&quot; if $DEBUGGING rescue &quot;&quot;
+  end
+  def debugging(bool=false)
+    $DEBUGGING = bool
+  end
+  def testing(bool=$TESTING)
+    bool.nil? ? false : bool
   end
+  alias :debug :debugging
   def unix_hide_string
     &quot;2&gt;&amp;1 &gt; /dev/null&quot;
   end</diff>
      <filename>lib/poolparty/core/object.rb</filename>
    </modified>
    <modified>
      <diff>@@ -43,23 +43,13 @@ class String
     self.downcase.gsub(/[ ]/, '_')
   end
   def safe_quote
-    self.gsub(/[']/, '\\\\\'')
+    self.gsub(/['&quot;]/, '\\\&quot;')
+    # self.gsub(/[&quot;']/, &quot;\\\&quot;&quot;)
   end
   def nice_runnable(quite=true)
     self.split(/ &amp;&amp; /).join(&quot;\n&quot;)
   end
-  # This is the method we use to turn the options into a string to build the main 
-  # manifests
-  def to_option_string(ns=[])
-    a_template = (self =~ /template/) == 0
-    a_service = self =~ /^[A-Z][a-zA-Z]*\[[a-zA-Z0-9\-\.\&quot;\'_\$\{\}\/]*\]/
-    a_function = self =~/(.)*\((.)*\)(.)*/
-    if is_a?(PoolParty::Resources::Resource)
-      self.to_s
-    else
-      (a_service || a_template || a_function) ? self : &quot;'#{self}'&quot;
-    end    
-  end
+
   # Refactor this guy to get the class if the class is defined, and not always create a new one
   # although, it doesn't really matter as ruby will just reopen the class
   def class_constant(superclass=nil, opts={}, &amp;block)
@@ -77,6 +67,42 @@ class String
     klass
   end
   
+  def camel_case
+    gsub(/(^|_|-)(.)/) { $2.upcase }
+  end
+  
+  # &quot;FooBar&quot;.snake_case #=&gt; &quot;foo_bar&quot;
+   def snake_case
+     gsub(/\B[A-Z]+/, '_\&amp;').downcase
+   end
+   
+    # &quot;FooBar&quot;.dasherize #=&gt; &quot;foo-bar&quot;
+    def dasherize
+      gsub(/\B[A-Z]+/, '-\&amp;').downcase
+    end
+    
+  # Constantize tries to find a declared constant with the name specified
+  # in the string. It raises a NameError when the name is not in CamelCase
+  # or is not initialized.
+  #
+  # Examples
+  #   &quot;Module&quot;.constantize #=&gt; Module
+  #   &quot;Class&quot;.constantize #=&gt; Class
+  def constantize
+    camel_cased_word = camel_case
+    begin
+      Object.module_eval(camel_cased_word, __FILE__, __LINE__)
+    rescue NameError
+      puts &quot;#{camel_cased_word} is not defined.&quot;
+      nil
+    end
+  end
+  
+  def preserved_class_constant(append=&quot;&quot;)
+    klass = &quot;#{self}#{append}&quot;.classify
+    Object.const_defined?(klass.to_sym) ? klass.to_s.constantize : nil
+  end
+  
   def module_constant(append=&quot;&quot;, &amp;block)
     symc = &quot;#{self}_Module#{append}&quot;.camelcase
     mod = Object.const_defined?(symc) ? Object.const_get(symc.to_sym) : Module.new(&amp;block)</diff>
      <filename>lib/poolparty/core/string.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,31 +1,31 @@
+#TODO: Reimplement
 module PoolParty
   module Extra
-    class Deployments
+    class Deployments        
 
-      class &lt;&lt; self
-        
-        def include_deployment(filename)
+        def self.include_deployment(filename)
           return nil unless ::File.file? filename
           name = ::File.basename(filename, ::File.extname(filename))
           contents = open(filename).read
 
           plugin_klass = PoolParty::PluginModel::PluginModel.new(name)
-          plugin_klass.klass.class_eval &lt;&lt;-EOE
+          plugin_klass.class_eval &lt;&lt;-EOE
             def enable
+              puts &quot;Called enable&quot;
               #{contents}
             end
           EOE
           plugin_klass
         end
         
-        def include_deployments(dir)
+        def self.include_deployments(dir)
           return nil unless ::File.directory? dir
           Dir[&quot;#{dir}/*&quot;].each do |fi|
             include_deployment fi
           end
           dir
         end
-      end
+        
     end    
   end
 end
\ No newline at end of file</diff>
      <filename>lib/poolparty/extra/deployments.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@ module PoolParty
   
   # Load a file that contains a pool into memory
   def load_pool(filename=nil)
-    filename = Binary.get_existing_spec_location#Dir[&quot;#{Dir.pwd}/**/*.rb&quot;].select {|f| ::File.basename(f) == &quot;clouds.rb&quot; }.first unless filename
+    filename = filename || Binary.get_existing_spec_location
     dputs &quot;Using spec at #{filename}&quot;
     
     unless filename &amp;&amp; ::File.readable?(filename)
@@ -11,7 +11,7 @@ module PoolParty
       exit(1)
     else
       $pool_specfile = filename
-      PoolParty::Script.inflate(open(filename).read, filename)
+      PoolParty::Pool::Pool.load_from_file filename
     end
   end
   
@@ -45,12 +45,11 @@ module PoolParty
       # aborts because it cannot load the cloud
       def get_existing_spec_location
         [
-            &quot;#{Base.remote_storage_path}/#{Base.default_specfile_name}&quot;, 
-            &quot;#{Base.default_specfile_name}&quot;,            
-            &quot;#{Base.base_config_directory}/#{Base.default_specfile_name}&quot;,            
+            &quot;#{Default.remote_storage_path}/#{Default.default_specfile_name}&quot;, 
+            &quot;#{Default.default_specfile_name}&quot;,            
+            &quot;#{Default.base_config_directory}/#{Default.default_specfile_name}&quot;,            
             Dir[&quot;#{Dir.pwd}/*/clouds.rb&quot;],
-            ENV[&quot;POOL_SPEC&quot;],
-            &quot;#{Base.storage_directory}/#{Base.default_specfile_name}&quot;
+            ENV[&quot;POOL_SPEC&quot;]
         ].flatten.reject {|a| a.nil?}.reject do |f|
           f unless ::File.readable?(f)
         end.first</diff>
      <filename>lib/poolparty/helpers/binary.rb</filename>
    </modified>
    <modified>
      <diff>@@ -17,11 +17,7 @@ module PoolParty
       puts &quot;&quot;
       pools.size
     end
-    
-    def available_bases
-      remote_bases
-    end
-    
+        
     def header(str=&quot;&quot;)
       &quot;*** #{str}&quot;
     end</diff>
      <filename>lib/poolparty/helpers/display.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,12 +7,16 @@ require 'date'
 
 module PoolParty
   class Optioner
-    include Configurable
-    include MethodMissingSugar
+    include Dslify
+    
+    default_options(:verbose =&gt; false, 
+                     :quiet =&gt; false, 
+                     :cloudname =&gt; false, 
+                     :poolname =&gt; false)
     
     def initialize(args=[], opts={}, &amp;block)      
       boolean_args &lt;&lt; opts[:boolean_args] if opts.has_key?(:boolean_args)
-
+      
       @arguments = parse_args(args)
       @extra_help = opts.has_key?(:extra_help) ? opts[:extra_help] : &quot;&quot;
       @abstract = opts.has_key?(:abstract) ? opts[:abstract] : false
@@ -21,11 +25,10 @@ module PoolParty
       @command = opts.has_key?(:command) ? opts[:command] : false
       
       parse_options(&amp;block) if @parse_options
-      set_default_options
       self
     end
     def daemonizeable
-      @opts.on('-d', '--daemonize', 'Daemonize starting the cloud')    { self.daemon true }
+      @opts.on('-D', '--daemonize', 'Daemonize starting the cloud')    { self.daemon true }
     end
     def cloudnames
       @opts.on('-n cloudname', '--name name', 'Start cloud by this name')    { |c| self.cloudname c }
@@ -63,18 +66,21 @@ module PoolParty
       args
     end
     
+    # def parent
+    #   self
+    # end
+    
     def parent
       self
     end
     
-    def set_default_options
-      self.verbose false
-      self.quiet false
-    end
-    
     def parse_options(&amp;blk)
+      self.spec = nil
+      self.num = nil
+      
       progname = $0.include?(&quot;-&quot;) ? &quot;#{::File.basename($0[/(\w+)-/, 1])} #{::File.basename($0[/-(.*)/, 1])}&quot; : ::File.basename($0)
       @opts = OptionParser.new
+      @opts.extend(Dslify)
       @opts.banner = &quot;Usage: #{progname} #{@abstract ? &quot;[command] &quot; : &quot;&quot;}[options]&quot;
 
       @opts.separator &quot;&quot;
@@ -82,10 +88,10 @@ module PoolParty
       unless @abstract
         @opts.separator &quot;Options:&quot;
         
-        @opts.on('-v', '--verbose', 'Be verbose')    { self.verbose true }  
-        @opts.on('', &quot;--debug&quot;, &quot;Debug setting&quot;) {self.debugging true}
-        @opts.on('-s [file]', '--spec-file [file]', 'Set the spec file')      { |file| self.spec file.chomp }
-        @opts.on('-t', '--test', 'Testing mode')    { self.testing true }
+        @opts.on('-v', '--verbose', 'Be verbose') { self.verbose true }  
+        @opts.on('-d', &quot;--debug&quot;, &quot;Debug setting&quot;) { self.debugging true }
+        @opts.on('-s [file]', '--spec-file [file]', 'Set the spec file') { |file| self.spec file.chomp }
+        @opts.on('-t', '--test', 'Testing mode') { self.testing true }
         
         blk.call(@opts, self) if blk
       end
@@ -103,26 +109,27 @@ module PoolParty
       output_options if verbose
       
       if @load_pools
-        self.loaded_pool load_pool(self.spec || Binary.get_existing_spec_location)
-
+        self.loaded_pool load_pool( spec? ? spec : Binary.get_existing_spec_location)
         self.loaded_clouds extract_cloud_from_options(self)
         self.loaded_pools extract_pool_from_options(self)
 
         reject_junk_options!
         raise CloudNotFoundException.new(&quot;Please specify your cloud with -s, move it to ./clouds.rb or in your POOL_SPEC environment variable&quot;) unless loaded_clouds &amp;&amp; !loaded_clouds.empty?
         loaded_pools.each do |pl|
-          pl.configure(self.options)
+          pl.options(self.options)
         end
         loaded_clouds.each do |cl|
-          cl.configure(self.options)
+          cl.options(self.options)
         end
       end
     end
+    
     def reject_junk_options!
       %w(loaded_pool cloudname extract_pool_from_options).each do |opt|
-        @options.delete(opt.to_sym)
+        @dsl_options.delete(opt.to_sym)
       end
     end
+    
     def process_options
     end
         </diff>
      <filename>lib/poolparty/helpers/optioner.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,5 +10,11 @@ module PoolParty
       has_directory(:name =&gt; loc)
     end
     
+    def dependency_resolver(name='puppet')
+      klass = name.preserved_class_constant(&quot;Resolver&quot;)
+      raise DependencyResolverException.new(&quot;Unknown resolver&quot;) unless klass
+      dsl_options[:dependency_resolver] = klass unless dsl_options[:dependency_resolver]
+    end
+    
   end
 end
\ No newline at end of file</diff>
      <filename>lib/poolparty/modules/cloud_dsl.rb</filename>
    </modified>
    <modified>
      <diff>@@ -11,9 +11,15 @@ require &quot;ftools&quot;
 module PoolParty
   module CloudResourcer
     
-    def plugin_directory(*args)
-      args = [&quot;#{::File.expand_path(Dir.pwd)}/plugins&quot;] if args.empty?
-      args.each {|arg| Dir[&quot;#{arg}/*/*.rb&quot;].each {|f| require f }}
+    def plugin_directory(arr=[])
+      arr = [arr] if arr.is_a?(String)
+      arr &lt;&lt; [
+        &quot;#{::File.expand_path(Dir.pwd)}/plugins&quot;,
+        &quot;#{::File.expand_path(Default.poolparty_home_path)}/plugins&quot;
+      ]
+      arr.flatten.each {|arg|    
+        Dir[&quot;#{arg}/*/*.rb&quot;].each {|f| require f } if ::File.directory?(arg)
+      }
     end
     
     # Store block
@@ -32,7 +38,7 @@ module PoolParty
     end
     
     # Set instances with a range or a number
-    def instances(arg)      
+    def instances(arg)
       case arg
       when Range
         minimum_instances arg.first
@@ -46,119 +52,56 @@ module PoolParty
     end
     
     def setup_dev
-      return true if ::File.exists?(&quot;#{remote_keypair_path}&quot;) || master.nil?
-      # unless ::File.exists?(&quot;#{full_keypair_basename_path}.pub&quot;)
-      #   cmd = &quot;scp #{scp_array.join(&quot; &quot;)} #{Base.user}@#{master.ip}:.ssh/authorized_keys #{full_keypair_basename_path}.pub&quot;
-      #   vputs &quot;Running #{cmd}&quot;
-      #   if %x[hostname].chomp == &quot;master&quot;
-      #     Kernel.system(&quot;cat ~/.ssh/authorized_keys &gt; #{full_keypair_basename_path}.pub&quot;)
-      #   else
-      #     Kernel.system(cmd)
-      #   end
-      # end
-    end
-    
-    # Keypairs
-    def keypair(*args)
-      if args &amp;&amp; !args.empty? &amp;&amp; !has_keypair?
-        options[:keypair] = args.first
-      else
-        options[:keypair] ||= generate_keypair
-      end
-    end
-        
-    # Let's just make sure that the keypair exists on the options
-    def has_keypair?
-      options.has_key?(:keypair) &amp;&amp; options[:keypair] &amp;&amp; !options[:keypair].empty?
-    end
-    # Generate a keypair based on the parent's name (if there is a parent)
-    # and the cloud's name
-    def generate_keypair(*args)
-      options[:keypair] = &quot;#{parent &amp;&amp; parent.is_a?(PoolParty::Pool::Pool) ? parent.name : &quot;poolparty&quot;}_#{name}&quot; unless has_keypair?
-    end
-    
-    def full_keypair_path
-      unless keypair_path
-        raise RuntimeException.new(&quot;Keypair cannot be found&quot;)        
+      return true if keypair || master.nil?
+    end
+    
+    def using(t)
+      @cloud = self
+      if t &amp;&amp; self.class.available_bases.include?(t.to_sym)
+        unless using_remoter?
+          self.class.send :attr_reader, :remote_base
+          self.class.send :attr_reader, :parent_cloud
+          klass_string = &quot;#{t}&quot;.classify
+          klass = &quot;::PoolParty::Remote::#{klass_string}&quot;.constantize
+          @remote_base = klass.send :new, self
+          options[:remote_base] = klass.to_s if respond_to?(:options)
+                    
+          remote_instance_klass = &quot;::PoolParty::Remote::#{klass_string}RemoteInstance&quot;
+          options[:remote_instance_base] = remote_instance_klass if respond_to?(:options)
+          
+          @parent_cloud = @cloud
+          instance_eval &quot;def #{t};@remote_base;end;&quot;
+        end
       else
-        ::File.expand_path(keypair_path)
+        puts &quot;Unknown remote base&quot; 
       end
     end
-    def full_keypair_basename_path
-      dir = ::File.dirname(full_keypair_path)
-      basename = ::File.basename(full_keypair_path, ::File.extname(full_keypair_path))
-      ::File.join(dir, basename)
-    end
     
-    def keypair_path
-      keypair_paths.each do |path|
-        possible_keypair_basenames.each do |base|
-          full_path = ::File.join( File.expand_path(path), &quot;#{base}#{keypair}&quot;)
-          return full_path if ::File.exists?(full_path)
-        end
-      end
-      return nil
+    def using_remoter?
+      @remote_base
     end
     
-    # The keypair name can be one name or another including id_rsa or not
-    # So let's get the name that exists as a keypair
-    def full_keypair_name
-      keypair_paths.each do |path|
-        possible_keypair_basenames.each do |base|
-          full_path = ::File.join( File.expand_path(path), &quot;#{base}#{keypair}&quot;)
-          return &quot;#{base}#{keypair}&quot; if ::File.exists?(full_path)
-        end
+    # Keypairs
+    # Use the keypair path
+    def keypair(*args)
+      if args &amp;&amp; !args.empty?
+        args.each {|arg| _keypairs.unshift Key.new(arg) }
+      else
+        _keypairs.select {|key| key.exists? }.first
       end
-      return nil
     end
     
-    def remote_keypair_path
-      ::File.join( keypair_paths.last, &quot;#{possible_keypair_basenames.first}#{keypair}&quot; )
-    end
-    def new_keypair_path
-      ::File.join( keypair_paths.first, &quot;#{possible_keypair_basenames.first}#{keypair}&quot; )
-    end
+    alias :set_keypairs :keypair
     
-    def possible_keypair_basenames
-      [
-        &quot;id_rsa-&quot;,
-        &quot;&quot;
-      ]
+    def _keypairs
+      dsl_options[:keypairs] ||= [Key.new]
     end
     
-    def keypair_paths
-      [
-        Base.base_keypair_path,
-        Base.base_config_directory,
-        Base.remote_storage_path,
-        Dir.pwd
-      ]
-    end
-    
-    def context_stack
-      @@context_stack ||= []
+    def full_keypair_path      
+      @full_keypair_path ||= keypair.full_filepath
     end
     
-    def run_setup(parent, should_set_parent=true, &amp;block)
-      context_stack.push parent
-      
-      set_parent if should_set_parent
-      run_in_context self, &amp;block if block
-      
-      context_stack.pop
-    end
-    
-    # Set the parent on the resource
-    def set_parent(sink_options=true)
-      unless context_stack.last.nil?
-        @parent = context_stack.last
-        # Add self as a service on the parent
-        parent.add_service(self) if parent.respond_to?(:add_service)
-        # Take the options of the parents
-        configure(parent.options) if parent &amp;&amp; parent.respond_to?(:options) &amp;&amp; sink_options
-      end
-    end
-            
+    # TODO: deprecate
     def number_of_resources
       arr = resources.map do |n, r|
         r.size
@@ -166,20 +109,13 @@ module PoolParty
       resources.map {|n,r| r.size}.inject(0){|sum,i| sum+=i}
     end
     
-    def parent
-      @parent ||= nil
-    end
-    
     def plugin_store
       @plugin_store ||= []
     end
     
+    # TODO: deprecate
     def realize_plugins!(force=false)
-      plugin_store.each {|plugin| plugin.realize!(force) if plugin }
-    end
-    
-    def plugin_store
-      @plugins ||= []
+      plugin_store.each {|plugin| puts &quot;plugin: #{plugin}&quot;;plugin.realize!(force) if plugin }
     end
     
   end</diff>
      <filename>lib/poolparty/modules/cloud_resourcer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,7 @@ module PoolParty
     end
     
     def pid_file
-      @pid_file ||= PoolParty::Base.agent_pid_file
+      @pid_file ||= PoolParty::Default.agent_pid_file
     end
     
     # Returns +true+ the process identied by +pid+ is running.</diff>
      <filename>lib/poolparty/modules/daemonizable.rb</filename>
    </modified>
    <modified>
      <diff>@@ -36,7 +36,7 @@ module PoolParty
     # Note that you can define any resources within the virtual resource
     # within the definition or the call.
     # Call example:
-    # has_virtualhost do        
+    # has_virtualhost do
     #  name &quot;xnot.org&quot;
     # end
     # 
@@ -44,17 +44,14 @@ module PoolParty
     # 
     # An example is included in the poolparty-apache-plugin
     def virtual_resource(name=:virtual_resource, opts={}, &amp;block)
-      symc = &quot;#{name}&quot;.camelcase
-      eval &lt;&lt;-EOE
-        class PoolParty::Resources::#{symc} &lt; PoolParty::Resources::Resource
-        end
-      EOE
-      klass = &quot;PoolParty::Resources::#{symc}&quot;.constantize
+      symc = &quot;#{name}&quot;.top_level_class.camelcase
+      klass = symc.class_constant(PoolParty::Plugin::Plugin, {:preserve =&gt; true}, &amp;block)
+      
+      PoolParty::Service.add_has_and_does_not_have_methods_for(symc)
+      
       klass.module_eval &amp;block if block
-      klass.send :define_method, :virtual_resource?, Proc.new{true}
-      klass.send :define_method, :printable?, Proc.new{false}
       klass
     end
     
-  end  
+  end
 end
\ No newline at end of file</diff>
      <filename>lib/poolparty/modules/definable_resource.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,15 +2,15 @@ module PoolParty
   module FileWriter
     def copy_file_to_storage_directory(file, preceded=&quot;&quot;)
       make_base_directory
-      path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
+      path = ::File.join( Default.storage_directory, preceded, ::File.basename(file) )
       ::FileUtils.cp file, path unless file == path || ::File.file?(path)
     end
     def cleanup_storage_directory
-      ::FileUtils.rm_rf &quot;#{Base.storage_directory}&quot;
+      ::FileUtils.rm_rf &quot;#{Default.storage_directory}&quot;
     end
     def copy_template_to_storage_directory(file, force=false)
       make_template_directory
-      path = ::File.join( Base.tmp_path, Base.template_directory, ::File.basename(file) )
+      path = ::File.join( Default.tmp_path, Default.template_directory, ::File.basename(file) )
       if force
         FileUtils.cp file, path
       else
@@ -25,22 +25,22 @@ module PoolParty
       ::File.basename(path)
     end
     def copy_directory_into_storage_directory(from, pat)
-      to = ::File.join(Base.storage_directory, pat)
+      to = ::File.join(Default.storage_directory, pat)
       
       # make_directory_in_storage_directory(to) unless ::File.directory?(to)
       FileUtils.cp_r(from, to)
     end
     def make_directory_in_storage_directory(dirname=&quot;newdir&quot;)      
-      path = ::File.join( Base.storage_directory, dirname )
+      path = ::File.join( Default.storage_directory, dirname )
       make_base_path path
     end
     def write_to_file_in_storage_directory(file, str=&quot;&quot;, preceded=&quot;&quot;, &amp;block)
-      path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
+      path = ::File.join( Default.storage_directory, preceded, ::File.basename(file) )
       write_to_file(path, str, &amp;block)
     end
     def write_to_file(file, str=&quot;&quot;, preceded=&quot;&quot;, &amp;block)
-      path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
-      make_base_path( Base.storage_directory )
+      path = ::File.join( Default.storage_directory, preceded, ::File.basename(file) )
+      make_base_path( Default.storage_directory )
       ::File.open(path, &quot;w+&quot;) do |f|
         f.print str
         f.flush
@@ -50,7 +50,7 @@ module PoolParty
     # Write a temp file with the content str and return the Tempfile
     # It creates a random file name
     def write_to_temp_file(str=&quot;&quot;, &amp;block)
-      returning Tempfile.new(&quot;#{Base.storage_directory}/PoolParty-#{str[0..10].chomp}-#{rand(1000)}&quot;) do |fp|
+      returning Tempfile.new(&quot;#{Default.storage_directory}/PoolParty-#{str[0..10].chomp}-#{rand(1000)}&quot;) do |fp|
         fp.print str
         fp.flush
         block.call(fp)
@@ -69,14 +69,14 @@ module PoolParty
     end
     def make_base_directory
       begin
-        FileUtils.mkdir_p Base.storage_directory unless ::File.directory?(Base.storage_directory)
+        FileUtils.mkdir_p Default.storage_directory unless ::File.directory?(Default.storage_directory)
       rescue Errno::EEXIST
-        FileUtils.rm Base.storage_directory
+        FileUtils.rm Default.storage_directory
         make_base_directory
       end            
     end
     def make_template_directory(dir=nil)
-      path = dir ? ::File.join(Base.tmp_path, Base.template_directory, ::File.basename(dir)) : ::File.join(Base.tmp_path, Base.template_directory)
+      path = dir ? ::File.join(Default.tmp_path, Default.template_directory, ::File.basename(dir)) : ::File.join(Default.tmp_path, Default.template_directory)
       begin
         make_base_directory
         FileUtils.mkdir path unless ::File.directory?(path)
@@ -87,7 +87,7 @@ module PoolParty
       path
     end
     def clear_base_directory
-      Dir[&quot;#{Base.storage_directory}/**/*&quot;].each do |f|
+      Dir[&quot;#{Default.storage_directory}/**/*&quot;].each do |f|
         ::FileUtils.rm f if ::File.file?(f)
       end
     end</diff>
      <filename>lib/poolparty/modules/file_writer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -26,7 +26,7 @@ module PoolParty
     def pretty_options(pre, o)
       return &quot;&quot; unless o.respond_to?(:options)
       print_options = (o.respond_to?(:parent) &amp;&amp; o.parent &amp;&amp; o.parent.respond_to?(:options)) ? 
-        (o.options.delete_if {|k,v| o.parent.options.has_key?(k) &amp;&amp; o.parent.options[k] == o.options[k] &amp;&amp; !o.options[k].nil? } ) : 
+        (o.dsl_options.delete_if {|k,v| o.parent.dsl_options.has_key?(k) &amp;&amp; o.parent.options[k] == o.options[k] &amp;&amp; !o.options[k].nil? } ) : 
         o.options
       print_options = print_options.map {|k,v| [k, o.send(k.to_sym).to_s] }.inject({}) { |r,e| r[e[0]] = e[1] unless o.class.default_options[e[0]] == e[1] || e[1].nil? || e[1].empty?; r }
       print_options.flush_out(&quot;#{pre}\t&quot;)</diff>
      <filename>lib/poolparty/modules/pretty_printer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,70 +2,51 @@ module PoolParty
   module ResourcingDsl
     # Overrides for syntax
     # Allows us to send require to require a resource
-    def require(str=&quot;&quot;)
-      str ? options.merge!(:require =&gt; str) : options[:require]
-    end
     def requires(str=nil)
-      # str ? options.append!(:require =&gt; str) : options[:require]
-      str ? options.append!(:require =&gt; send_if_method(str)) : options[:require]
+      str ? dsl_options.merge!(:require =&gt; send_if_method(str)) : dsl_options[:require]
+    end
+    def on_change(str=nil)
+      str ? dsl_options.merge!(:notify =&gt; send_if_method(str)) : dsl_options[:notify]
     end
     def ensures(str=&quot;running&quot;)
-      # if %w(absent running).map {|a| self.send a.to_sym}.include?(str)
-        str == &quot;absent&quot; ? is_absent : is_present
-      # else
-        # options.append!(:ensure =&gt; str)
-      # end
-      # str
+        str == :absent ? is_absent : is_present
+    end
+    def present
+      &quot;present&quot;
+    end
+    def absent
+      &quot;absent&quot;
     end
     # Allows us to send an ensure to ensure the presence of a resource
     def is_present(*args)
-      options.merge!(:ensure =&gt; present)
+      dsl_options.merge!(:ensures =&gt; present)
+      present
     end
     # Ensures that what we are sending is absent
     def is_absent(*args)
-      options.merge!(:ensure =&gt; absent)
+      dsl_options.merge!(:ensures =&gt; absent)
+      absent
     end
     # Alias for unless
     def ifnot(str=&quot;&quot;)
-      options.merge!(:unless =&gt; str)
-    end
-    def present
-      &quot;present&quot;
-    end
-    def absent
-      &quot;absent&quot;
+      dsl_options.merge!(:unless =&gt; str)
     end
     def cancel(*args)
-      options[:cancelled] = args.empty? ? true : args[0]
+      dsl_options[:cancelled] = args.empty? ? true : args[0]
     end
     def cancelled?
-      options[:cancelled] || false
+      dsl_options[:cancelled] || false
     end
     def printed(*args)
-      options[:printed] = true
+      dsl_options[:printed] = true
     end
     def printed?
-      options[:printed] || false
-    end
-    # Give us a template to work with on the resource
-    # Make sure this template is moved to the tmp directory as well
-    #
-    # TODO: Change this method to store the template files for later
-    # copying to prevent unnecessary copying and tons of directories
-    # everywhere
-    def template(file, opts={})
-      # require 'rubygems'; require 'ruby-debug'; debugger
-      vputs &quot;Template called on #{file}&quot;
-      filename = ::File.basename(file)
-      raise TemplateNotFound.new(&quot;no template given&quot;) unless filename
-      #TODO: check more MF
-      unless opts[:just_copy]
-        options.merge!({:content =&gt; &quot;template(\&quot;#{::File.basename(file)}\&quot;)&quot;})
-        options.delete(:source) if options.has_key?(:source)
-        copy_template_to_storage_directory get_client_or_gem_template(file)
-      else
-        copy_file_to_storage_directory get_client_or_gem_template(file)
-      end
+      dsl_options[:printed] || false
+    end
+
+    #TODO: Diet
+    def render_template
+      # @templates.
     end
     
     def get_client_or_gem_template(file)</diff>
      <filename>lib/poolparty/modules/resourcing_dsl.rb</filename>
    </modified>
    <modified>
      <diff>@@ -29,7 +29,7 @@
   Notice that at the end, you must call register_monitor :monitorname. This will tell your cloud
   that it can monitor it with this monitor.
 =end
-require &quot;#{::File.dirname(__FILE__)}/../poolparty/base&quot;
+require &quot;#{::File.dirname(__FILE__)}/../poolparty/default&quot;
 
 module PoolParty
   module Monitors    
@@ -78,12 +78,4 @@ end
 # Require included monitors
 Dir[&quot;#{File.dirname(__FILE__)}/monitors/*.rb&quot;].each {|f| require f}
 # Require custom monitors
-Dir[&quot;#{PoolParty::Base.custom_monitor_directories}/*.rb&quot;].each {|f| require f}
-
-module PoolParty
-  module Cloud
-    class Cloud
-      include PoolParty::Monitors
-    end
-  end
-end
\ No newline at end of file
+Dir[&quot;#{PoolParty::Default.custom_monitor_directories}/*.rb&quot;].each {|f| require f}
\ No newline at end of file</diff>
      <filename>lib/poolparty/monitors/base_monitor.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,7 +9,7 @@ module PoolParty
     def with_socket(testing=false, &amp;block)
       host = testing ? &quot;localhost&quot; : (master.ip)
       vputs &quot;Pinging #{host} with the messenger&quot;
-      socket = TCPSocket.open(host, Base.messenger_client_port)
+      socket = TCPSocket.open(host, Default.messenger_client_port)
       out = yield(socket)
       socket.close
       out
@@ -52,21 +52,4 @@ module PoolParty
     end
     
   end
-end
-
-module PoolParty
-  module Cloud
-    class Cloud
-      include PoolParty::Messenger
-      
-      def get_current_nodes
-        nodes = messenger_send!(&quot;get_current_nodes&quot;)
-        nodes.split(&quot; &quot;).map {|a| a.split(/@/)[-1] }
-      end
-      
-      def reconfigure_cloud!(msg=&quot;force_reconfig&quot;)
-        messenger_cast!(msg)
-      end
-    end
-  end
 end
\ No newline at end of file</diff>
      <filename>lib/poolparty/net/messenger.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,19 +1,14 @@
-require File.dirname(__FILE__) + &quot;/remoter&quot;
-
 module PoolParty  
   module Remote
     
     class RemoteInstance
-      include Remote
-      include Configurable
-      include CloudResourcer
+      include Dslify
       
-      def initialize(opts, parent=self)        
-        run_setup(parent)
+      def initialize(opts={}, containing_cloud=nil)
+        @parent = containing_cloud
 
-        set_vars_from_options(parent.options) if parent &amp;&amp; parent.respond_to?(:options)
-        set_vars_from_options(opts) unless opts.nil? || opts.empty?
-        
+        set_vars_from_options(containing_cloud.options) if containing_cloud &amp;&amp; containing_cloud.respond_to?(:options)
+        set_vars_from_options(opts) if opts.is_a?(Hash)
         on_init
       end
       
@@ -26,50 +21,68 @@ module PoolParty
       end
       
       # Is this remote instance the master?
+      # DEPRECATE
       def master?
         name == &quot;master&quot;
       end
       
       # The remote instances is only valid if there is an ip and a name
       def valid?
-        !(ip.nil? || name.nil?)
+        (ip.nil? || name.nil?) ? false : true
       end
       
       # Determine if the RemoteInstance is responding
       def responding?
-        !responding.nil?
+        running?
+        # !responding.nil? #TODO MF this needs to actually ping the node or something similar.  stubbed to running? for now
       end
       
       # This is how we get the current load of the instance
       # The approach of this may change entirely, but the usage of
       # it will always be the same
       def load
-        current_load ||= 0.0
+        current_load ||= 0.0  #NOTE MF: returning 0.0 seems like a bad idea here.  should return nil if we dont have a real value
       end
-            
+      
+      # Note, the next 4 methods will be overridden by the cloud specific remoter_base
       # Is this instance running?
       def running?
-        !(status =~ /running/).nil?
+        true
       end
       # Is this instance pending?
       def pending?
-        !(status =~ /pending/).nil?
+        false
       end
       # Is this instance terminating?
       def terminating?
-        !(status =~ /shutting/).nil?
+        false
       end
       # Has this instance been terminated?
       def terminated?
-        !(status =~ /terminated/).nil?
+        false
       end
       
       # Printing. This is how we extract the instances into the listing on the 
       # local side into the local listing file
       def to_s
-        &quot;#{name}\t#{ip}\t#{instance_id}&quot;
+        &quot;#{name}\t#{ip}\t#{instance_id rescue &quot;&quot;}&quot;
+      end
+      
+      # Class method to disect a neighborhood line
+      def self.hash_from_s(s)
+        arr = s.split(&quot;\t&quot;)
+        {:name =&gt; arr[0], :ip =&gt; arr[1]}
+      end
+      
+      def self.to_s(hsh)
+        new(hsh).to_s
+      end
+      
+      def dependency_resolver_command
+        cloud.dependency_resolver_command
       end
       
+      #FIXME: deprecate puppet specific commands in this class
       def puppet_runner_command
         self.class.send :puppet_runner_command
       end
@@ -83,13 +96,8 @@ module PoolParty
       def self.puppet_rerun_commad
         puppet_runner_command
       end
-      def my_cloud
-        @pa = parent
-        while !(@pa.is_a?(PoolParty::Cloud::Cloud) || @pa.nil? || @pa == self)
-          @pa = @pa.parent
-        end
-        @pa
-      end
+      #
+      
       def hosts_file_listing_for(cl)
         string = (cl.name == cloud.name) ? &quot;#{name}.#{my_cloud.name}\t#{name}&quot; : &quot;#{name}.#{my_cloud.name}&quot;
         &quot;#{internal_ip}\t#{string}&quot;
@@ -97,4 +105,4 @@ module PoolParty
     end
     
   end  
-end
\ No newline at end of file
+end</diff>
      <filename>lib/poolparty/net/remote_instance.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,155 +16,70 @@
     register_remote_base :remote_base_name
   
 =end
-module PoolParty
 
-  def register_remote_base(*args)
-    args.each do |arg|
-      base_name = &quot;#{arg}&quot;.downcase.to_sym
-      (remote_bases &lt;&lt; base_name) unless remote_bases.include?(base_name)
-    end
-  end
-  
-  def remote_bases
-    $remote_bases ||= []
-  end
+module PoolParty
 
   module Remote    
-    # This class is the base class for all remote types
+    # This class is the base class for all remote types, such as ec2
     # Everything remoting-wise is derived from this class
-    module RemoterBaseMethods
+    class RemoterBase
+      include  Remote
+      
+      def initialize(prnt = nil)
+        @parent = prnt
+      end
+      
+      def method_missing(meth, *args, &amp;block)
+        if @parent
+          @parent.send meth, *args, &amp;block rescue super
+        else
+          super
+        end
+      end
+      
       # Required methods
       # The next methods are required on all RemoteInstance types
       # If your RemoteInstance type does not overwrite the following methods
       # An exception will be raised and poolparty will explode into tiny little 
       # pieces. Don't forget to overwrite these methods
       # Launch a new instance
-      def launch_new_instance!
+      def self.launch_new_instance!(o={})
         raise RemoteException.new(:method_not_defined, &quot;launch_new_instance!&quot;)
       end
+      def launch_new_instance!(o={})
+        self.class.launch_new_instance!( options.merge(o) )
+      end
       # Terminate an instance by id
-      def terminate_instance!(id=nil)
+      def self.terminate_instance!(o={})
         raise RemoteException.new(:method_not_defined, &quot;terminate_instance!&quot;)
       end
+      def terminate_instance!(o={})
+        self.class.terminate_instance!(o ? options.merge(o) : options)
+      end
       # Describe an instance's status
-      def describe_instance(id=nil)
+      def self.describe_instance(o={})
         raise RemoteException.new(:method_not_defined, &quot;describe_instance&quot;)
       end
+      def describe_instance(o={})
+        self.class.describe_instance(o ? options.merge(o) : options)
+      end
       # Get instances
       # The instances must have a status associated with them on the hash
-      def describe_instances
+      def self.describe_instances(o={})
         raise RemoteException.new(:method_not_defined, &quot;describe_instances&quot;)
       end
-      
-    end
-    module RemoterBase
-      # The following methods are inherent on the RemoterBase
-      # If you need to overwrite these methods, do so with caution
-      # Listing methods
-      def list_of_running_instances(list = list_of_nonterminated_instances)
-        list.select {|a| a.running? }
-      end
-      # Get a list of the pending instances
-      def list_of_pending_instances(list = list_of_nonterminated_instances)
-        list.select {|a| a.pending? }
-      end
-      # list of shutting down instances
-      def list_of_terminating_instances(list = remote_instances_list)
-        list.reject {|i| true if !i.terminating? }
-      end
-      # Get the instances that are non-master instances
-      def nonmaster_nonterminated_instances(list = list_of_nonterminated_instances)
-        list_of_nonterminated_instances.reject {|i| i.master? }
-      end
-      # list all the nonterminated instances
-      def list_of_nonterminated_instances(list = remote_instances_list)
-        list.reject {|i| i.terminating? || i.terminated? }
-      end
-      # We'll stub the ip to be the master ip for ease and accessibility
-      def ip
-        master.ip
-      end
-      # get the master instance
-      def master
-        get_instance_by_number(0)
-      end
-      # Get instance by number
-      def get_instance_by_number(i=0, list = remote_instances_list)
-        name = ((i.nil? || i.zero?) ? &quot;master&quot; : &quot;node#{i}&quot;)
-        list.select {|i| i.name == name }.first
-      end
-      # A callback before the configuration task takes place
-      def before_configuration_tasks        
-      end
-      def remote_instances_list        
-        @containing_cloud = self
-        # puts &quot;&gt; #{@containing_cloud} #{@describe_instances.nil?}&quot;
-        list_of_instances(keypair).collect {|h| PoolParty::Remote::RemoteInstance.new(h, @containing_cloud) }
-      end
-      # List the instances for the current key pair, regardless of their states
-      # If no keypair is passed, select them all
-      def list_of_instances(keyp=nil)
-        tmp_key = (keyp ? keyp : nil)
-        
-        unless @describe_instances
-          tmpInstanceList = describe_instances.select {|a| a if (tmp_key.nil? || tmp_key.empty? ? true : a[:keypair] == tmp_key) }
-          has_master = !tmpInstanceList.select {|a| a[:name] == &quot;master&quot; }.empty?          
-          if has_master
-            @describe_instances = tmpInstanceList
-          else
-            @id = 0
-            running = select_from_instances_on_status(/running/, tmpInstanceList)
-            pending = select_from_instances_on_status(/pending/, tmpInstanceList)
-            terminated = select_from_instances_on_status(/shutting/, tmpInstanceList)
-            
-            running = running.map do |inst|
-              inst[:name] = (@id == 0 ? &quot;master&quot; : &quot;node#{@id}&quot;)
-              @id += 1
-              inst
-            end.sort_by {|a| a[:index] }
-            
-            @describe_instances = [running, pending, terminated].flatten
-          end
-        end
-        @describe_instances
-      end
-      # Select the instances based on their status
-      def select_from_instances_on_status(status=/running/, list=[])
-        list.select {|a| a[:status] =~ status}
-      end
-      # Helpers
-      def create_keypair
-      end
-      # Reset the cache of descriptions
-      def reset_remoter_base!
-        @describe_instances = nil
-      end
-      def self.included(other)
-        # PoolParty.register_remote_base(self.class.to_s.downcase.to_sym)
+      def describe_instances(o={})
+        self.class.describe_instances(o ? options.merge(o) : options)
       end
       
-      # Callback after loaded
-      def loaded_remoter_base        
+      # After launch callback
+      # This is called after a new instance is launched
+      def after_launched(force=false)        
       end
       
-      # Custom minimum runnable options
-      # Extend the minimum runnable options that are necessary
-      # for poolparty to run on the remote base
-      def custom_minimum_runnable_options
-        []
-      end
-            
-      # Custom installation tasks
-      # Allow the remoter bases to attach their own tasks on the 
-      # installation process
-      def custom_install_tasks_for(a=nil)
-        []
-      end
-      # Custom configure tasks
-      # Allows the remoter bases to attach their own
-      # custom configuration tasks to the configuration process
-      def custom_configure_tasks_for(a=nil)
-        []
+      # Before shutdown callback
+      # This is called before the cloud is contracted
+      def before_shutdown
       end
       
     end
@@ -172,4 +87,6 @@ module PoolParty
   end
 end
 
-Dir[&quot;#{File.dirname(__FILE__)}/remote_bases/*.rb&quot;].each {|base| require base }
\ No newline at end of file
+Dir[&quot;#{File.dirname(__FILE__)}/remoter/*.rb&quot;].each do |remoter_module| 
+  require remoter_module
+end
\ No newline at end of file</diff>
      <filename>lib/poolparty/net/remoter_base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,33 +5,35 @@
   the master instance of the cloud. This enables you to send a directory
   up to the cloud and let the master host it for the remote slaves
 =end
-module PoolParty    
+module PoolParty
   class Deploydirectory
-        
+    
     virtual_resource(:deploydirectory) do
       
-      def loaded(opts={}, parent=self)
-        package_directory        
+      def loaded(opts={})
+        package_directory
         unpack_directory
         sync_directories
       end
-            
+      
       def package_directory
-        path = ::File.join( Base.tmp_path, &quot;#{::File.basename(from_dir)}.tar.gz&quot; )
+        path = ::File.join( Default.tmp_path, &quot;#{::File.basename(from_dir)}.tar.gz&quot; )
         archive_name = &quot;#{::File.basename(name).dir_safe}.tar.gz&quot;
-        cmd = &quot;cd #{::File.expand_path(from_dir)} &amp;&amp; tar -czf #{archive_name} . &amp;&amp; mv #{archive_name} #{Base.tmp_path}&quot;
+        cmd = &quot;cd #{::File.expand_path(from_dir)} &amp;&amp; tar -czf #{archive_name} . &amp;&amp; mv #{archive_name} #{Default.tmp_path}&quot;
         Kernel.system(cmd) unless testing
       end
       
       def unpack_directory
-        execute_on_master do
+        case_of &quot;hostname&quot;
+        when_is &quot;master&quot; do
           has_exec({:name =&gt; &quot;deploy-directory-#{name}&quot;, :requires =&gt; get_directory(&quot;#{cwd}&quot;), :cwd =&gt; cwd}) do
             #  &amp;&amp; rm #{Base.tmp_path}/#{parent.name.dir_safe}.tar.gz
             archive_name = &quot;#{::File.basename(name).dir_safe}.tar.gz&quot;
-            command &quot;cd #{cwd}; tar -zxf #{Base.remote_storage_path}/#{archive_name}; rm #{Base.remote_storage_path}/#{archive_name}; chown #{owner} #{::File.basename(name).dir_safe}&quot;
-            onlyif &quot;test -f #{Base.remote_storage_path}/#{archive_name}&quot;
+            command &quot;cd #{cwd}; tar -zxf #{Default.remote_storage_path}/#{archive_name}; rm #{Default.remote_storage_path}/#{archive_name}; chown #{owner} #{::File.basename(name).dir_safe}&quot;
+            onlyif &quot;test -f #{Default.remote_storage_path}/#{archive_name}&quot;
           end
         end
+        end_of
       end
       
       def sync_directories
@@ -48,7 +50,6 @@ module PoolParty
         cwd dir
         name dir
         has_directory(:name =&gt; &quot;#{dir}&quot;, 
-                      :requires =&gt; get_directory(&quot;#{::File.dirname(dir)}&quot;), 
                       :owner =&gt; owner,
                       :mode =&gt; mode)
       end</diff>
      <filename>lib/poolparty/plugins/deploydirectory.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,25 +9,32 @@ module PoolParty
     
     virtual_resource(:git_repos) do
       
-      def loaded(opts={}, parent=self, &amp;block)
-        has_git
-        has_git_repos
-      end
-            
-      def has_git_repos        
-        has_exec({:name =&gt; key, :requires =&gt; [get_directory(&quot;#{working_dir}&quot;), get_package(&quot;git-core&quot;)] }) do
-          command requires_user ? &quot;git clone #{requires_user}@#{source} #{working_dir}&quot; : &quot;cd #{working_dir} &amp;&amp; git clone #{source}&quot;
+      def loaded(opts={}, &amp;block)        
+        # opts.has_key?(:at) ? at(opts.delete(:at)) : raise(Exception.new(&quot;You must include a directory for the git repos set by :at&quot;))
+        # opts.has_key?(:source) ? git_repos(opts.delete(:source) || opts[:name]) : raise(Exception.new(&quot;You must include the git source set by :source&quot;))        
+        has_package(&quot;git-core&quot;)
+        has_git_repository
+      end
+
+      def has_git_repository
+        has_exec(:name =&gt; &quot;git-#{name}&quot;, :requires =&gt; [get_directory(&quot;#{working_dir}&quot;), get_package(&quot;git-core&quot;)] ) do
+          # Cloud, GitRepos, Exec
+          command parent.requires_user? ? &quot;git clone #{requires_user}@#{source} #{working_dir}&quot; : &quot;cd #{working_dir} &amp;&amp; git clone #{source}&quot;
           cwd &quot;#{working_dir if working_dir}&quot;
           creates creates_dir
         end
-        has_exec(:name =&gt; &quot;update-#{name}&quot;) do
-          cwd ::File.dirname( creates_dir )
+        has_exec(:name =&gt; &quot;update-#{name}&quot;, :cwd =&gt; ::File.dirname( creates_dir )) do          
           command &quot;git pull&quot;
         end                
       end
       
+      def git_repos(src)
+        source src
+      end
+      
       def at(dir)
         working_dir dir
+        has_directory(::File.dirname(dir))
         has_directory(:name =&gt; &quot;#{dir}&quot;, :requires =&gt; get_directory(&quot;#{::File.dirname(dir)}&quot;))
       end
       
@@ -45,12 +52,6 @@ module PoolParty
         &quot;exec&quot;
       end
       
-      # Because we are requiring an exec, instead of a built-in package of the git, we have to overload
-      # the to_s method and prepend it with the same name as above
-      def key
-        &quot;git-#{name}&quot;
-      end
-      
     end
     
   end</diff>
      <filename>lib/poolparty/plugins/git.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,11 +3,10 @@ module PoolParty
         
     virtual_resource(:rsyncmirror) do
       
-      def loaded(opts={}, parent=self)
-        @parent = parent        
+      def loaded(opts={})
         execute_on_node do
           @dir = dir || name
-          has_exec(opts.merge({:command =&gt; &quot;#{cloud.remote_rsync_command} --no-implied-dirs --delete-excluded #{Base.user}@master:#{@dir}/ #{@dir}/&quot;.safe_quote, :name =&gt; &quot;rsync-#{name}&quot;}))
+          has_exec(opts.merge({:command =&gt; &quot;#{cloud.remote_rsync_command} --no-implied-dirs --delete-excluded #{Default.user}@master:#{@dir}/ #{@dir}/&quot;.safe_quote, :name =&gt; &quot;rsync-#{name}&quot;}))
         end
       end
             </diff>
      <filename>lib/poolparty/plugins/rsyncmirror.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,8 +3,8 @@ require File.dirname(__FILE__) + &quot;/resource&quot;
 
 module PoolParty    
   module Cloud
-    def cloud(name=:app, parent=self, &amp;block)
-      clouds.has_key?(name) ? clouds[name] : (clouds[name] = Cloud.new(name, parent, &amp;block))
+    def cloud(name=:app, &amp;block)
+      clouds[name] ||= Cloud.new(name, &amp;block)
     end
 
     def clouds
@@ -17,61 +17,91 @@ module PoolParty
       cl.run_in_context &amp;block if block
     end
     
-    class Cloud
-      attr_reader :templates
+    class Cloud &lt; PoolParty::PoolPartyBaseClass
+      attr_reader :templates, :cloud_name
+
+      include CloudResourcer
       include PoolParty::PluginModel
       include PoolParty::Resources      
+      include PoolParty::DependencyResolverCloudExtensions
       include PrettyPrinter
-      include Configurable
-      include CloudResourcer
       include Provisioner
-      # extend CloudResourcer
-      # Net methods      
-      include Remote
+
+      # Net methods
+      include ::PoolParty::Remote
       include PoolParty::CloudDsl
+      include PoolParty::Monitors
+
+      def verbose
+        true
+      end
+      
+      def self.immutable_methods
+        [:name]
+      end
+      
+      def self.method_added sym        
+        raise &quot;Exception: #{sym.to_s.capitalize} method has been redefined&quot; if immutable_methods.include?(sym) &amp;&amp; !respond_to?(sym)
+      end      
+      
+      alias :name :cloud_name
+      
+      def method_missing(m, *args, &amp;block)
+        remote_base.respond_to?(m) ? remote_base.send(m, *args, &amp;block) : super
+      end
       
-      default_options({
+      default_options(
         :minimum_instances =&gt; 2,
         :maximum_instances =&gt; 5,
         :contract_when =&gt; &quot;cpu &lt; 0.65&quot;,
         :expand_when =&gt; &quot;cpu &gt; 1.9&quot;,
-        :access_key =&gt; Base.access_key,
-        :secret_access_key =&gt; Base.secret_access_key,
+        :access_key =&gt; Default.access_key,
+        :secret_access_key =&gt; Default.secret_access_key,
         :ec2_dir =&gt; ENV[&quot;EC2_HOME&quot;],
-        :keypair =&gt; (ENV[&quot;KEYPAIR_NAME&quot;].nil? || ENV[&quot;KEYPAIR_NAME&quot;].empty?) ? nil : ENV[&quot;KEYPAIR_NAME&quot;],
-        :minimum_runtime =&gt; Base.minimum_runtime,
-        :user =&gt; Base.user,
+        :minimum_runtime =&gt; Default.minimum_runtime,
+        :user =&gt; Default.user,
         :ami =&gt; 'ami-44bd592d'
-      })
+      )
       
-      def initialize(name, pare=self, &amp;block)
+      def initialize(name, &amp;block)
         @cloud_name = name
         @cloud_name.freeze
-                
-        plugin_directory
-                
-        p = pare.is_a?(PoolParty::Pool::Pool) ? pare : nil
-        store_block(&amp;block)
-        run_setup(p, &amp;block)        
-        
-        # set_parent(parent) if parent &amp;&amp; !@parent
-        # self.run_in_context parent, &amp;block if block
+        plugin_directory &quot;#{pool_specfile ? ::File.dirname(pool_specfile) : Dir.pwd}/plugins&quot;
+        super
         setup_defaults
-        # realize_plugins!
-        # reset! # reset the clouds
-        # reset_remoter_base!
+        
+        after_create
+      end
+      
+      def name(*args)
+        @cloud_name ||= @cloud_name ? @cloud_name : (args.empty? ? :default_cloud : args.first)
+      end
+      
+      # Callback
+      def after_create
       end
       
       def setup_defaults
         # this can be overridden in the spec, but ec2 is the default
-        self.using :ec2
-        generate_keypair unless has_keypair?
+        using :ec2
+        options[:keypair] = keypair.basename
+        dependency_resolver 'puppet'
+      end
+      
+      # provide list of public ips to get into the cloud
+      def ips
+        list_of_running_instances.map {|ri| ri.ip }
       end
       
-      def name
-        @cloud_name
+      def ip
+        ips.first  #TODO: make this be a random ip, since we should not rely on it being the same each time
       end
-            
+      
+      # FIXME: this is a quick hack.  refactor this to the resources class #MF
+      def dependency_resolver_command
+         &quot;/usr/bin/puppet -v --logdest syslog /etc/puppet/manifests/site.pp&quot;
+      end
+      
       # Prepare to send the new configuration to the instances
       # First, let's make sure that our base directory is made
       # Then copy the templates that have no other reference in
@@ -88,11 +118,12 @@ module PoolParty
         copy_custom_modules
         copy_custom_templates
         store_keys_in_file
-        Script.save!(self)
+        # Script.save!(self)
         # not my favorite...
         copy_ssh_key
         write_unique_cookie
         before_configuration_tasks
+        write_properties_hash if debugging || testing
       end
       
       def copy_custom_templates
@@ -109,7 +140,7 @@ module PoolParty
       # Store our keys for cloud access in a file 
       # that is specific to this cloud
       def store_keys_in_file
-        Base.store_keys_in_file_for(self)
+        Default.store_keys_in_file_for(self)
       end
       
       # Let's write the cookie into the tmp path
@@ -123,7 +154,7 @@ module PoolParty
       # talk to each other safely. This is based off the keypair
       # and the name of the cloud
       def generate_unique_cookie_string
-        Digest::SHA256.hexdigest(&quot;#{full_keypair_name}#{name}&quot;)[0..12]
+        Digest::SHA256.hexdigest(&quot;#{keypair.basename}#{name}&quot;)[0..12]
       end
       
       # Build the new poolparty manifest
@@ -133,17 +164,18 @@ module PoolParty
       # TODO: Consider the benefits of moving all the manifest
       # classes to separate files and keeping the containing
       # references in the include
-      def build_and_store_new_config_file(force=false)
+      def build_and_store_new_config_file(filepath=nil, force=false)
+        filepath ||= ::File.join(Default.storage_directory, &quot;poolparty.pp&quot;)
+        # write_properties_hash if debugging
         vputs &quot;Building new manifest configuration file (forced: #{force})&quot;
         manifest = force ? rebuild_manifest : build_manifest
-        config_file = ::File.join(Base.storage_directory, &quot;poolparty.pp&quot;)
-        ::File.open(config_file, &quot;w&quot;) do |file|
+        ::File.open(filepath, &quot;w&quot;) do |file|
           file &lt;&lt; manifest
         end
-      end      
+      end
       
       def copy_misc_templates
-        [&quot;namespaceauth.conf&quot;, &quot;puppet.conf&quot;, &quot;gem&quot;].each do |f|
+        [&quot;namespaceauth.conf&quot;, &quot;puppet/puppet.conf&quot;, &quot;gem&quot;].each do |f|
           copy_file_to_storage_directory(::File.join(::File.dirname(__FILE__), &quot;..&quot;, &quot;templates&quot;, f))
         end
       end
@@ -155,18 +187,18 @@ module PoolParty
       # the monitors directory for any custom monitors
       # that are in known locations, these are included
       def copy_custom_monitors
-        unless Base.custom_monitor_directories.empty?
+        unless Default.custom_monitor_directories.empty?
           make_directory_in_storage_directory(&quot;monitors&quot;)
-          Base.custom_monitor_directories.each do |dir|
+          Default.custom_monitor_directories.each do |dir|
             Dir[&quot;#{dir}/*.rb&quot;].each {|f| copy_file_to_storage_directory(f, &quot;monitors&quot;)}
           end
-        end        
+        end
       end
       
       def copy_custom_modules
-        unless Base.custom_modules_directories.empty?
+        unless Default.custom_modules_directories.empty?
           make_directory_in_storage_directory(&quot;modules&quot;)
-          Base.custom_modules_directories.each do |dir|
+          Default.custom_modules_directories.each do |dir|
             Dir[&quot;#{dir}/*&quot;].each do |d|
               to = ::File.join(&quot;modules&quot;, ::File.basename(d))
               copy_directory_into_storage_directory(d, to) if ::File.directory?(d)
@@ -174,16 +206,18 @@ module PoolParty
           end
         end
       end
-            
+
+      #FIXME MOVE TO DEPENDECY RESOL
       # Configuration files
       def build_manifest
         vputs &quot;Building manifest&quot;
         @build_manifest ||= build_from_existing_file
         unless @build_manifest
+          run_in_context(&amp;lambda {add_poolparty_base_requirements})
           
-          add_poolparty_base_requirements
-          
-          @build_manifest = &quot;class poolparty {\n #{build_short_manifest}\n}&quot;
+          props = to_properties_hash
+         
+          @build_manifest =  options[:dependency_resolver].send(:compile, props)
         end
         @build_manifest
       end
@@ -193,34 +227,43 @@ module PoolParty
         build_manifest
       end
       
-      def build_short_manifest
-        returning Array.new do |str|            
-
-          # Refactor this into the resources method
-          # TODO
-          services.each do |service|
-            service.options.merge!(:name =&gt; service.name)
-            classpackage_with_self(service)
-          end
-          
-          options.merge!(:name =&gt; &quot;user&quot;)
-          classpackage_with_self
-          # resources.each do |type, res|
-          #   str &lt;&lt; &quot;# #{type.to_s.pluralize}&quot;
-          #   str &lt;&lt; res.to_string
-          # end
-          
-          global_classpackages.each do |cls|
-            str &lt;&lt; cls.to_string
-          end
-
-          str &lt;&lt; &quot;# Custom functions&quot;
-          str &lt;&lt; Resources::CustomResource.custom_functions_to_string
-        end.join(&quot;\n&quot;)
-      end
+      #FIXME DEPRECATE
+      # def build_short_manifest
+      #               returning Array.new do |str|            
+      #         
+      #                 # Refactor this into the resources method
+      #                 # TODO
+      #                 services.each do |service|
+      #                   service.options.merge!(:name =&gt; service.name)
+      #                   classpackage_with_self(service)
+      #                 end
+      #                 
+      #                 options.merge!(:name =&gt; &quot;user&quot;)
+      #                 classpackage_with_self
+      #                 # resources.each do |type, res|
+      #                 #   str &lt;&lt; &quot;# #{type.to_s.pluralize}&quot;
+      #                 #   str &lt;&lt; res.to_string
+      #                 # end
+      #                 
+      #                 global_classpackages.each do |cls|
+      #                   str &lt;&lt; cls.to_string
+      #                 end
+      #         
+      #                 str &lt;&lt; &quot;# Custom functions&quot;
+      #                 str &lt;&lt; Resources::CustomResource.custom_functions_to_string
+      #               end.join(&quot;\n&quot;)
+      #             end
       
       def build_from_existing_file
-        ::FileTest.file?(&quot;#{Base.manifest_path}/classes/poolparty.pp&quot;) ? open(&quot;#{Base.manifest_path}/classes/poolparty.pp&quot;).read : nil
+        ::FileTest.file?(&quot;#{Default.manifest_path}/classes/poolparty.pp&quot;) ? open(&quot;#{Default.manifest_path}/classes/poolparty.pp&quot;).read : nil
+      end
+      
+      def write_properties_hash(filename=::File.join(Default.tmp_path, Default.properties_hash_filename) )
+        file_path = ::File.dirname(filename)
+        file_name = &quot;#{::File.basename(filename, ::File.extname(filename))}_#{name}#{::File.extname(filename)}&quot;
+        output = to_properties_hash.to_json
+        ::File.open(&quot;#{file_path}/#{file_name}&quot;, &quot;w&quot;) {|f| f.write output }
+        true
       end
       
       # To allow the remote instances to do their job,
@@ -229,22 +272,33 @@ module PoolParty
       def minimum_runnable_options
         ([
           :keypair, :minimum_instances, :maximum_instances,
-          :expand_when, :contract_when, :set_master_ip_to
+          :expand_when, :contract_when, :set_master_ip_to  #DEPRECATE set_master_ip_to
         ]&lt;&lt; custom_minimum_runnable_options).flatten
       end
       
+      def custom_minimum_runnable_options
+        using_remoter? ? remote_base.custom_minimum_runnable_options : []
+      end
+      
+      def remote_base
+        @remote_base ||= nil
+      end
+      
+      def call_before_bootstrap_callbacks
+        plugin_store.each {|a| a.before_bootstrap }
+      end
+      
       # Add all the poolparty requirements here
       # NOTE: These are written as plugins in the lib/poolparty/base_packages directory
       # for examples. 
       # Also note that there is no block associated. This is because we have written
       # all that is necessary in a method called enable
       # which is called when there is no block
-      def add_poolparty_base_requirements
-        heartbeat
-        haproxy
-        ruby
+      def add_poolparty_base_requirements        
+        poolparty_base_haproxy
+        poolparty_base_heartbeat
+        poolparty_base_ruby
         poolparty_base_packages
-        realize_plugins!(true) # Force realizing of the plugins
       end
       
       def other_clouds
@@ -257,18 +311,8 @@ module PoolParty
       
       def reset!
         reset_remoter_base!
-        @build_manifest = @describe_instances = nil
-      end
-            
-      # Add to the services pool for the manifest listing
-      def add_service(serv)
-        services &lt;&lt; serv
-      end
-      # Container for the services
-      def services
-        @services ||= []
-      end
-            
+        @build_manifest = @describe_instances = @remote_instances_list = nil
+      end            
     end
-  end  
-end
\ No newline at end of file
+  end 
+end</diff>
      <filename>lib/poolparty/poolparty/cloud.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,8 +7,8 @@ module PoolParty
 
   module Resources
     
-    def call_custom_function(str, opts={}, parent=self, &amp;block)
-      add_resource(:call_function, opts.merge({:str =&gt; str, :name =&gt; str.keyerize}), parent, &amp;block)
+    def call_custom_function(str, opts={}, &amp;block)
+      add_resource(:call_function, opts.merge({:str =&gt; str, :name =&gt; str.keyerize}), &amp;block)
     end
                 
     # Resources for function call</diff>
      <filename>lib/poolparty/poolparty/custom_resource.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,27 +1,28 @@
-=begin rdoc
-  A logging class to allow us to log to locations
-=end
-class Loggable
-  def initialize    
-    self.class.loggers &lt;&lt; file_logger
-    file_logger.level = :info
-  end
-  def file_logger
-    @file_logger ||= Logging.logger( Base.pool_logger_location, logging_opts )
-  end
-  def stdout_logger
-    @stdout_logger ||= Logging.logger(STDOUT, logging_opts.merge({:pattern =&gt; &quot;%m\n&quot;}))
-  end
-  def logging_opts
-    {:pattern =&gt; &quot;[%d] %-l : %m\n&quot;,
-    :date_pattern =&gt; &quot;%Y-%m-%d %H:%M:%S.%s&quot;}
-  end
-  %w(info warn debug notice).each do |meth|
-    define_method(meth.to_sym) do |*args|
-      self.class.loggers.each {|l| l.send meth.to_sym, args}
-    end
-  end
-  def self.loggers
-    @loggers ||= []
-  end
-end
\ No newline at end of file
+#todo: Deprecate
+# =begin rdoc
+#   A logging class to allow us to log to locations
+# =end
+# class Loggable
+#   def initialize    
+#     self.class.loggers &lt;&lt; file_logger
+#     file_logger.level = :info
+#   end
+#   def file_logger
+#     @file_logger ||= Logging.logger( Default.pool_logger_location, logging_opts )
+#   end
+#   def stdout_logger
+#     @stdout_logger ||= Logging.logger(STDOUT, logging_opts.merge({:pattern =&gt; &quot;%m\n&quot;}))
+#   end
+#   def logging_opts
+#     {:pattern =&gt; &quot;[%d] %-l : %m\n&quot;,
+#     :date_pattern =&gt; &quot;%Y-%m-%d %H:%M:%S.%s&quot;}
+#   end
+#   %w(info warn debug notice).each do |meth|
+#     define_method(meth.to_sym) do |*args|
+#       self.class.loggers.each {|l| l.send meth.to_sym, args}
+#     end
+#   end
+#   def self.loggers
+#     @loggers ||= []
+#   end
+# end
\ No newline at end of file</diff>
      <filename>lib/poolparty/poolparty/loggable.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,33 +1,53 @@
+require &quot;#{::File.dirname(__FILE__)}/service.rb&quot;
+require &quot;#{::File.dirname(__FILE__)}/../provision/boot_strapper.rb&quot;
+
 module PoolParty
-      
   module Plugin
         
-    class Plugin
-      include Configurable
+    class Plugin &lt; PoolParty::Service
       include CloudResourcer
-      include Resources
-      
-      class_inheritable_accessor :name
-      
+      include PoolParty::DependencyResolverCloudExtensions
+            
       default_options({})
       
-      def initialize(p=self, opts={}, &amp;block)
-        store_block &amp;block
-        run_setup(p)
-        realize! unless block
+      def initialize(opts={}, prnt=nil, &amp;block)
+        before_load(opts, &amp;block)
+        
+        block = Proc.new {enable} unless block
+
+        @opts = opts        
+        super(opts, &amp;block)
+        
+        run_in_context do
+          loaded @opts, &amp;block
+        end
       end
-            
-      def realize!(force=false)
-        force ? force_realize! : (@realized ? nil : force_realize!)
+      
+      # Overwrite this method
+      def before_load(o={}, &amp;block)        
+      end
+      def loaded(o={}, &amp;block)
+      end
+      def before_bootstrap
+      end
+      def enable
+      end
+      def is_plugin?
+        true
+      end
+      def bootstrap_gems *gems
+        gems.each do |g|
+          Provision::BootStrapper.gem_list &lt;&lt; g unless Provision::BootStrapper.gem_list.include?(g)
+        end
       end
       
-      def force_realize!
-        run_setup(parent, false, &amp;stored_block)
-        enable unless stored_block
+      def bootstrap_commands cmds
+        Provision::BootStrapper.class_commands &lt;&lt; cmds
       end
       
-      # Overwrite this method
-      def enable
+      def self.inherited(subclass)
+        method_name = subclass.to_s.top_level_class.gsub(/pool_party_/, '').gsub(/_class/, '').downcase.to_sym        
+        add_has_and_does_not_have_methods_for(method_name)
       end
       
     end</diff>
      <filename>lib/poolparty/poolparty/plugin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -12,34 +12,31 @@ module PoolParty
       $plugins ||= {}
     end
     
-    class PluginModel      
-      attr_accessor :name, :klass
-      include MethodMissingSugar
-      include Configurable
-      include PrettyPrinter      
+    class PluginModel
+      attr_accessor :klass
       
       def initialize(name,&amp;block)
-        @name = name
-        # @parent = cld
-        class_string_name = &quot;#{name}&quot;
-        
-        # Create the class to evaluate the plugin on the implemented call
-        @klass = klass = class_string_name.class_constant(PoolParty::Plugin::Plugin)
-        mod = class_string_name.module_constant(&amp;block)
-        
-        klass.send :include, mod
+        symc = &quot;#{name}&quot;.top_level_class.camelcase        
+        klass = symc.class_constant(PoolParty::Plugin::Plugin, {:preserve =&gt; true}, &amp;block)
         
+        lowercase_class_name = symc.downcase
         # Store the name of the class for pretty printing later
-        klass.name = name
+        # klass.name = name
         # Add the plugin definition to the cloud as an instance method
-        PoolParty::Cloud::Cloud.class_eval &lt;&lt;-EOE
-          def #{name}(parent=self, &amp;block)
-            @pa = parent
-            @#{class_string_name.downcase} ||= returning #{class_string_name.class_constant}.new(parent, &amp;block) do |pl|
-              @pa.plugin_store &lt;&lt; pl
+        meth = &lt;&lt;-EOM
+          def #{lowercase_class_name}(opts={}, &amp;block)
+            i = plugin_store.select {|i| i if i.class == #{lowercase_class_name.camelcase}Class }.first if plugin_store
+            if i
+              i
+            else
+              inst = #{lowercase_class_name.camelcase}Class.new(opts, parent, &amp;block)            
+              this_context.plugin_store &lt;&lt; inst if this_context
+              inst
             end
           end
-        EOE
+        EOM
+
+        PoolParty::Cloud::Cloud.class_eval meth
       end
       
     end</diff>
      <filename>lib/poolparty/poolparty/plugin_model.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,8 +2,8 @@ module PoolParty
   module Pool
     
     def pool(name=:app, &amp;block)
-      pools.has_key?(name) ? pools[name] : (pools[name] = Pool.new(name, &amp;block))
-    end    
+      pools[name] ||= Pool.new(name, &amp;block)
+    end
     
     def pools
       $pools ||= {}
@@ -23,41 +23,40 @@ module PoolParty
       $pools = $clouds = $plugins = @describe_instances = nil
     end
 
-    class Pool
-      # include PoolParty::Cloud
-      include MethodMissingSugar
-      # include PluginModel
-      include Configurable
+    class Pool &lt; PoolParty::PoolPartyBaseClass
       include PrettyPrinter
       include CloudResourcer
       include Remote
       
-      default_options({
-        :access_key =&gt; Base.access_key,
-        :secret_access_key =&gt; Base.secret_access_key
-      })
+      default_options Default.default_options
       
       def initialize(name,&amp;block)
-        set_pool_specfile get_latest_caller        
-        setup_defaults
         @pool_name = name
         @pool_name.freeze
-        # run_in_context &amp;block if block
-        run_setup(self, &amp;block)        
+        
+        ::PoolParty.context_stack.clear
+        
+        set_pool_specfile get_latest_caller
+        setup_defaults
+
+        super(&amp;block)
       end
-      
-      def name
-        @pool_name
+      def self.load_from_file(filename=nil)
+        # a = new ::File.basename(filename, ::File.extname(filename))
+        File.open(filename, 'r') do |f|
+          instance_eval f.read
+        end
+        # a
+      end
+      def name(*args)
+        @pool_name ||= @pool_name ? @pool_name : (args.empty? ? :default_pool : args.first)
       end
+
+      def parent;nil;end
       
-      def setup_defaults
-        plugin_directory &quot;#{pool_specfile ? ::File.dirname(pool_specfile) : Dir.pwd}/plugins&quot;
+      def setup_defaults        
         PoolParty::Extra::Deployments.include_deployments &quot;#{Dir.pwd}/deployments&quot;
       end
-            
-      # This is where the entire process starts
-      def inflate
-      end
       
       def pool_clouds
         returning Array.new do |arr|</diff>
      <filename>lib/poolparty/poolparty/pool.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,101 +6,26 @@
   
   Most of the Resources will not need to create their own
 =end
-module PoolParty    
+module PoolParty
   module Resources
     
-    def resources
-      @resources ||= {}
-    end
-    
-    def resource(type=:file)
-      resources[type] ||= []
-    end
-    
-    # Add resource
-    # When we are looking to add a resource, we want to make sure the
-    # resources isn't already added. This way we prevent duplicates 
-    # as puppet can be finicky about duplicate resource definitions. 
-    # We'll look for the resource in either a local or global store
-    # If the resource appears in either, return that resource, we'll just append
-    # to the resource config, otherwise instantiate a new resource of the type
-    # and store it into the global and local resource stores
-    # 
-    # A word about stores, the global store stores the entire list of stored
-    # resources. The local resource store is available on all clouds and plugins
-    # which stores the instance variable's local resources. 
-    def add_resource(type, opts={}, parent=self, &amp;block)
-      temp_name = (opts[:name] || &quot;#{type}_#{type.to_s.keyerize}&quot;)
-      if in_a_resource_store?(type, temp_name)
-        @res = get_from_local_resource_store(type, temp_name, parent)
-        @res ||= get_from_global_resource_store(type, temp_name)
-      else
-        @res = returning &quot;PoolParty::Resources::#{type.to_s.camelize}&quot;.camelize.constantize.new(opts, parent, &amp;block) do |o|                    
-          store_into_global_resource_store(o)
-          resource(type) &lt;&lt; o          
-        end        
-      end
-      @res
-    end
-    def should_duplicate_resource?(type, res, pare, opts)
-      pare != @res.parent &amp;&amp; 
-        pare.cloud != @res.cloud &amp;&amp; 
-        in_global_resource_store?(type, opts[:name]) &amp;&amp; 
-        !in_resources?(type, res, pare)
-    end
-    def get_resource(ty, key, parent=self)
-      get_from_local_resource_store(ty, key, parent) || get_from_global_resource_store(ty, key)
-    end
-    def get_from_local_resource_store(type, key, parent)
-      resource(type).select {|r| r.key == key }.first
-    end
-    def in_a_resource_store?(type, key, parent=self)
-      !(get_resource(type, key) &amp;&amp; in_global_resource_store?(type, key)).nil?
-    end
-    def in_resources?(type, key, parent=self)
-      !get_resource(type, key).nil?
-    end
-    def global_resources_store
-      $global_resources ||= []
-    end
-    def store_into_global_resource_store(r)
-      global_resources_store &lt;&lt; r unless in_global_resource_store?(r.class_name_sym, r.key)
-    end
-    def get_from_global_resource_store(ty, key)
-      global_resources_store.select {|r| r if r.same_resources_of(ty, key) }.first
-    end
-    def in_global_resource_store?(ty, key)
-      !get_from_global_resource_store(ty, key).nil?
-    end
-    #:nodoc:
-    def reset_resources!
-      $global_resources = $global_classpackage_store = @resources = nil
-    end
-        
-    # def resources_string(pre=&quot;&quot;)
-    #   returning Array.new do |output|        
-    #     output &lt;&lt; resources_string_from_resources(resources)
-    #   end.join(&quot;\n&quot;)
-    # end
-    
     def custom_file(path, str)
       write_to_file_in_storage_directory(path, str)
     end
-        
-    class Resource
+    
+    class Resource &lt; PoolParty::PoolPartyBaseClass
       attr_accessor :prestring, :poststring
       
-      include CloudResourcer
-      include Configurable
+      # include CloudResourcer
+      
       # For the time being, we'll make puppet the only available dependency resolution
       # base, but in the future, we can rip this out and make it an option
-      include PoolParty::DependencyResolutions::Puppet
+      # include PoolParty::DependencyResolutions::Puppet
+      include PoolParty::DependencyResolverResourceExtensions
+      
       # DSL Overriders
       include PoolParty::ResourcingDsl
       
-      extend PoolParty::Resources
-      include PoolParty::Resources
-            
       # When we subclass Resource, we want to add a few methods to the Resources class
       # This will anable us to call out to these resources in our DSLified manner
       # When we call a method from the subclass, say it's the File class
@@ -114,20 +39,24 @@ module PoolParty
       def self.inherited(subclass)
         subclass = subclass.to_s.split(&quot;::&quot;)[-1] if subclass.to_s.index(&quot;::&quot;)
         lowercase_class_name = subclass.to_s.underscore.downcase || subclass.downcase
+        method_name = &quot;__#{lowercase_class_name}&quot;.to_sym
         
         # Add add resource method to the Resources module
-        unless PoolParty::Resources.respond_to?(lowercase_class_name.to_sym)          
+        unless PoolParty::PoolPartyBaseClass.respond_to?(method_name)
           method =&lt;&lt;-EOE
-            def #{lowercase_class_name}(opts={}, parent=self, &amp;blk)
-              add_resource(:#{lowercase_class_name}, opts, parent, &amp;blk)
+            private 
+            def #{method_name}(opts={}, &amp;blk)
+              add_resource(:#{lowercase_class_name}, opts, &amp;blk)
             end
-            def get_#{lowercase_class_name}(n, opts={}, parent=self, &amp;block)
-              in_a_resource_store?(:#{lowercase_class_name}, n) ?
-                get_resource(:#{lowercase_class_name}, n) : nil
+            def get_#{lowercase_class_name}(n, opts={}, &amp;block)
+              res = get_resource(:#{lowercase_class_name}, n, opts, &amp;block)
+              raise PackageException.new(&quot;A required #{lowercase_class_name} \#\{n\} was not found.&quot;) unless res
+              res
             end
+            public
           EOE
-          PoolParty::Resources.module_eval method
-          PoolParty::Resources.add_has_and_does_not_have_methods_for(lowercase_class_name.to_sym)
+          PoolParty::PoolPartyBaseClass.module_eval method
+          PoolParty::PoolPartyBaseClass.add_has_and_does_not_have_methods_for(lowercase_class_name.to_sym)
           
           available_resources &lt;&lt; subclass
         end
@@ -145,62 +74,49 @@ module PoolParty
       # Then it takes the value of the block and sets whatever is sent there as 
       # the options
       # Finally, it uses the parent's options as the lowest priority
-      def initialize(opts={}, parent=self, &amp;block)                        
-        run_setup(parent, &amp;block)
-        # Take the options of the parents
-        set_vars_from_options(opts) unless opts.empty?
+      def initialize(opts={}, extra_opts={}, &amp;block)
+        super(opts, &amp;block)
         
-        set_resource_parent
-        
-        loaded(opts, @parent, &amp;block)
-      end
-      
-      # Helper to set the containing parent on the resource
-      def set_resource_parent
-        if @parent &amp;&amp; @parent != self
-          if can_set_requires_for_parent
-            # requires @parent.to_s
-          end
-        end
-      end
-      
-      def can_set_requires_for_parent
-        @parent.is_a?(PoolParty::Resources::Resource) &amp;&amp; 
-          @parent.printable? &amp;&amp; 
-          @parent.name != name &amp;&amp;
-          !@parent.is_a?(PoolParty::Resources::Classpackage)
+        @resource_name = @base_name
+        dsl_options[:name] = resource_name unless dsl_options.has_key?(:name)        
       end
             
       # Stub, so you can create virtual resources
       # This is called after the resource is initialized
       # with the options given to it in the init-block
-      def loaded(opts={}, parent=self)
+      def loaded(opts={})
       end
       
-      def cloud
-        @pa = parent
-        while !(@pa.is_a?(PoolParty::Cloud::Cloud) || @pa.nil? || @pa == self)
-          @pa = @pa.respond_to?(:parent) ? @pa.parent : nil
-        end
-        @pa
+      def resource_name
+        @resource_name ||= nil
       end
       
-      def parent_tree
-        @pa = self
-        returning Array.new do |arr|
-          while !(@pa.is_a?(PoolParty::Cloud::Cloud) || @pa.nil? || @pa == self)
-            @pa = @pa.respond_to?(:parent) ? @pa.parent : nil
-            arr &lt;&lt; @pa
-          end
-        end
+      def name(*args)
+        resource_name
       end
       
-      def same_resources_of(t, k)
-        key == k &amp;&amp; class_name_sym == t
+      # After create callback
+      def after_create
       end
+      
+      # We don't want to inherit the services on a resource, as resources
+      # are a base and should never have services.
+      def services
+      end
+      
+      def cloud
+        2.upto(context_stack.size) do |i|
+          return ::PoolParty.context_stack[-i] if ::PoolParty.context_stack[-i].is_a?(PoolParty::Cloud::Cloud)
+        end
+        nil
+      end
+      
       def duplicatable?
         false
       end
+      def resource?
+        true
+      end
       # This way we can subclass resources without worry
       def class_type_name
         self.class.to_s.top_level_class.underscore.downcase
@@ -228,23 +144,32 @@ module PoolParty
       def disallowed_options
         []
       end
-      def allowed_options
-        [
-          :subscribe, :owner, :group, :path, :mode, :source, :notify, :subscribe, :check, :creates, :cwd, :command, :ensure,
-          :require, :schedule, :range, :alias, :hour, :minute, :user, :month, :monthday, :name, :onlyif, :unless, :refreshonly,
-          :refresh, :content, :template, :ip, :repeat, :provider, :key, :device, :fstype, :remounts, :options, :atboot, :before,
-          :binary, :status, :start, :stop, :restart, :pattern, :recurse, :home
-        ]
-      end
+
       def key
         name
       end
-      def virtual_resource?
-        false
+      # def virtual_resource?
+      #   false
+      # end
+      # def printable?
+      #   true
+      # end
+      def is_in_plugin?
+        parent.is_plugin?
       end
-      def printable?
+      
+      def is_a_resource?
         true
       end
+      
+      def method_missing(m,*a,&amp;block)
+        if parent &amp;&amp; parent.dsl_options.has_key?(m) &amp;&amp; is_in_plugin?
+          parent.send m, *a, &amp;block
+        else
+          super
+        end
+      end
+      
       # Private method just for resource retrievling purposes
       def class_name_sym
         self.class.to_s.top_level_class.downcase.to_sym
@@ -256,8 +181,8 @@ module PoolParty
       # it returns an empty hash
       def get_modified_options
         unless @modified_options
-          if options
-            opts = options.inject({}) do |sum,h|
+          if dsl_options
+            opts = dsl_options.inject({}) do |sum,h|
               sum.merge!({h[0].to_sym =&gt; ((h[1].nil?) ? self.send(h[0].to_sym) : h[1]) })
             end
           else
@@ -266,42 +191,15 @@ module PoolParty
           @full_allowed_options ||= allowed_options.reject {|ele| disallowed_options.include?(ele) }
           @modified_options = opts.reject do |k,v|
             !@full_allowed_options.include?(k) || 
-              @parent &amp;&amp; @parent.respond_to?(:options) &amp;&amp; @parent != self &amp;&amp; @parent.options.has_key?(k) &amp;&amp; @parent.options[k] == options[k]
+              @parent &amp;&amp; @parent.respond_to?(:dsl_options) &amp;&amp; @parent != self &amp;&amp; @parent.dsl_options.has_key?(k) &amp;&amp; @parent.dsl_options[k] == dsl_options[k]
           end
         end
         @modified_options
       end
-    end
-    
-    # Adds two methods to the module
-    # Adds the method type:
-    #   has_
-    # and 
-    #   does_not_have_
-    # for the type passed
-    # for instance
-    # add_has_and_does_not_have_methods_for(:file)
-    # gives you the methods has_file and does_not_have_file
-    # TODO: Refactor nicely to include other types that don't accept ensure
-    def self.add_has_and_does_not_have_methods_for(type=:file)
-      module_eval &lt;&lt;-EOE
-        def has_#{type}(opts={}, parent=self, &amp;block)
-          #{type}(handle_option_values(opts).merge(:ensures =&gt; &quot;present&quot;), parent, &amp;block)
-        end
-        def does_not_have_#{type}(opts={}, parent=self, &amp;block)
-          #{type}(handle_option_values(opts).merge(:ensures =&gt; &quot;absent&quot;), parent, &amp;block)
-        end
-      EOE
-    end
-    
-    def handle_option_values(o)
-      case o.class.to_s
-      when &quot;String&quot;
-        {:name =&gt; o}
-      else
-        o
-      end
+      
     end
     
   end
-end
\ No newline at end of file
+end
+
+Dir[&quot;#{::File.dirname(__FILE__)}/../resources/*.rb&quot;].each {|lib| require &quot;#{lib}&quot;}
\ No newline at end of file</diff>
      <filename>lib/poolparty/poolparty/resource.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,21 +1,29 @@
+require &quot;parenting&quot;
 module PoolParty
   
   class Script
+    include Parenting
     
     def self.inflate_file(file)
       inflate open(file).read if file
     end
         
     def self.inflate(script, file=&quot;__SCRIPT__&quot;)
-      apool = new
-      apool.instance_eval script, file
-      apool.inflate
+      module_eval script, file
+      # a = new
+      # a.instance_eval &lt;&lt;-EOM
+      #   def run_child(pa)
+      #     context_stack.push pa
+      #     #{str}
+      #     context_stack.pop
+      #     remove_method(:run_child)
+      #     self
+      #   end
+      # EOM
+      # a.run_child(self)
+      # a
     end
-    
-    def inflate
-      pools.map {|name,pool| pool.inflate } unless pools.empty?
-    end
-    
+        
     def self.to_ruby(opts={},&amp;blk)
       blk.to_ruby(opts)
     end
@@ -41,7 +49,7 @@ end
     end
     
     def self.save!(to_file=true)
-      write_to_file_in_storage_directory(Base.default_specfile_name, for_save_string) if to_file
+      write_to_file_in_storage_directory(Default.default_specfile_name, for_save_string) if to_file
       for_save_string
     end
     </diff>
      <filename>lib/poolparty/poolparty/script.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,15 +13,13 @@ module PoolParty
       def process_install!(testing=false)
         unless testing
           @cloud.rsync_storage_files_to(@instance)
-          roles = provision_master? ? [:master] : [:single]
-          run_capistrano(roles,:install)
+          run_capistrano(roles_to_provision, :install)
         end
       end
       def process_configure!(testing=false)
         unless testing
           @cloud.rsync_storage_files_to(@instance)
-          roles = provision_master? ? [:master] : [:single]
-          run_capistrano(roles, :configure)
+          run_capistrano(roles_to_provision, :configure)
         end
       end
       
@@ -68,16 +66,20 @@ module PoolParty
       def set_poolparty_roles
         return &quot;&quot; if testing
         returning Array.new do |arr|
-          arr &lt;&lt; &quot;role 'master.#{@cloud.name}'.to_sym, '#{@cloud.master.ip}'&quot;
-          arr &lt;&lt; &quot;role :master, '#{@cloud.master.ip}'&quot;
-          arr &lt;&lt; &quot;role :slaves, '#{@cloud.nonmaster_nonterminated_instances.map{|a| a.ip}.join('&quot;, &quot;')}'&quot; if @cloud.nonmaster_nonterminated_instances.size &gt; 0
+          arr &lt;&lt; &quot;role 'master.#{cloud.name}'.to_sym, '#{cloud.ip}'&quot;
+          arr &lt;&lt; &quot;role :master, '#{cloud.ip}'&quot;
+          arr &lt;&lt; &quot;role :slaves, '#{cloud.nonmaster_nonterminated_instances.map{|a| a.ip}.join('&quot;, &quot;')}'&quot; if cloud.nonmaster_nonterminated_instances.size &gt; 0
           arr &lt;&lt; &quot;role :single, '#{@instance.ip}'&quot; if @instance &amp;&amp; @instance.ip
         end.join(&quot;\n&quot;)
       end
       
+      def parent
+        @cloud
+      end
+      
       # Create the config for capistrano
       # This is a dynamic capistrano configuration file
-      def create_config        
+      def create_config
         @config = ::Capistrano::Configuration.new
         if @cloud.debug || @cloud.verbose 
           @config.logger.level = @cloud.debug ? ::Capistrano::Logger::MAX_LEVEL : ::Capistrano::Logger::INFO
@@ -86,8 +88,8 @@ module PoolParty
         end
         
         capfile = returning Array.new do |arr|
-          Dir[&quot;#{::File.dirname(__FILE__)}/recipies/*.rb&quot;].each {|a| arr &lt;&lt; &quot;require '#{a}'&quot; }
-          arr &lt;&lt; &quot;ssh_options[:keys] = '#{@cloud.full_keypair_basename_path}'&quot;
+          Dir[&quot;#{::File.dirname(__FILE__)}/recipes/*.rb&quot;].each {|a| arr &lt;&lt; &quot;require '#{a}'&quot; }
+          arr &lt;&lt; &quot;ssh_options[:keys] = '#{parent.keypair}'&quot;
           
           arr &lt;&lt; set_poolparty_roles
         end.join(&quot;\n&quot;)
@@ -97,7 +99,7 @@ module PoolParty
         
         @config.load(:string =&gt; capfile)
         
-        @cloud.deploy_file ? @config.load(@cloud.deploy_file) : @config.set(:user, @cloud.user)
+        @cloud.deploy_file? ? @config.load(@cloud.deploy_file) : @config.set(:user, @cloud.user)
       end
       
       # Prerun
@@ -106,16 +108,15 @@ module PoolParty
       
       # In run_capistrano, we are going to run the entire capistrano process
       # First, 
-      def run_capistrano(roles=[:master], meth=:install)  
+      def run_capistrano(roles = [:master], meth = :install)
         prerun_setup
-        
-        commands = meth == :install ? install_tasks : configure_tasks
+        commands = (meth == :install ? install_tasks : configure_tasks)
         name = &quot;#{roles.first}_provisioner_#{meth}&quot;
 
         __define_task(name, roles) do
-          commands.map {|command|
-            task = find_task(command.to_sym)            
-            
+          commands.map do |command|
+            puts &quot;executing task #{command}&quot;
+            task = find_task(command.to_sym)
             if task
               task.options.merge!(:roles =&gt; roles)
               execute_task task
@@ -128,7 +129,7 @@ module PoolParty
                 self.send(command.to_sym)
               end
             end
-          }
+          end
         end
                 
         begin
@@ -152,6 +153,6 @@ module PoolParty
         &quot;#{name.to_s.downcase.underscore}&quot;.to_sym
       end
       
-    end    
+    end
   end
 end
\ No newline at end of file</diff>
      <filename>lib/poolparty/provisioners/capistrano/capistrano.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,7 @@
 module Capistrano
   class Configuration
     attr_accessor :cloud, :provisioner
-    
+
     def method_missing_without_variables(sym, *args, &amp;block)
       if parent.respond_to?(sym)
         parent.send(sym, *args, &amp;block)
@@ -16,10 +16,10 @@ module Capistrano
         provisioner.send(sym, *args, &amp;block)
       elsif cloud.respond_to?(sym)
         cloud.send(sym, *args, &amp;block)
-      elsif PoolParty::Base.options.has_key?(sym)
-        PoolParty::Base.options[sym]
-      elsif PoolParty::Base.respond_to?(sym)
-        PoolParty::Base.send(sym, *args, &amp;block)
+      elsif PoolParty::Default.options.has_key?(sym)
+        PoolParty::Default.options[sym]
+      elsif PoolParty::Default.respond_to?(sym)
+        PoolParty::Default.send(sym, *args, &amp;block)
       else
         super
       end
@@ -35,27 +35,34 @@ module Capistrano
         
         def cloud(name=nil)
           puts &quot;name: #{name}&quot;
-          name ? get_cloud(name) : parent.cloud
+          name ? PoolParty::Cloud.clouds[name] : parent.cloud
         end
         
-        def get_cloud(name)
-          PoolParty::Cloud.cloud(name)
-        end  
+        def parent
+          cloud 
+        end
         
         def method_missing(sym, *args, &amp;block)
+          # if parent
+          #   parent.send(sym, *args, &amp;block) rescue super
+          # else
+          #   super
+          # end
+
           if parent.respond_to?(sym)
             parent.send(sym, *args, &amp;block)
           elsif provisioner.respond_to?(sym)
             provisioner.send(sym, *args, &amp;block)
           elsif cloud.respond_to?(sym)
             cloud.send(sym, *args, &amp;block)
-          elsif PoolParty::Base.options.has_key?(sym)
-            PoolParty::Base.options[sym]
-          elsif PoolParty::Base.respond_to?(sym)
-            PoolParty::Base.send(sym, *args, &amp;block)
+          elsif PoolParty::Default.options.has_key?(sym)
+            PoolParty::Default.options[sym]
+          elsif PoolParty::Default.respond_to?(sym)
+            PoolParty::Default.send(sym, *args, &amp;block)
           else
             super
           end
+
         end
       end
     end    </diff>
      <filename>lib/poolparty/provisioners/capistrano/capistrano_configurer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,34 +9,40 @@ require 'capistrano/cli'
 module PoolParty
   module Provisioner
     
-    def provisioner_for(inst)
-      PoolParty::Provisioner::Capistrano.new(inst, self, :ubuntu)      
+    def provisioner_for(inst, caller=self)
+      PoolParty::Provisioner::Capistrano.new(inst, caller, :ubuntu)
     end
     
     class ProvisionerBase
       attr_accessor :config, :loaded_tasks, :instance, :cloud, :os
       
-      include Configurable
+      include Dslify
       include CloudResourcer
       include FileWriter
       
-      def initialize(instance=nil, cld=self, os=:ubuntu, &amp;block)
+      def initialize(instance=nil, cld=nil, os=:ubuntu, &amp;block)
         @instance = instance
         @cloud = cld
-        
         options(cloud.options) if cloud &amp;&amp; cloud.respond_to?(:options)
-        # set_vars_from_options(instance.options) unless instance.nil? || !instance.options || !instance.options.empty?
-        # options(instance.options) if instance.respond_to?(:options)
         
-        @os = os.to_s.downcase.to_sym        
+        dputs &quot;Using key at: #{cld.keypair}&quot;
+        
+        @os = os.to_s.downcase.to_sym
         self.instance_eval &amp;block if block
         
         loaded
+        
+        # PoolPartyBootStrapper.new(options).execute!
       end
       
-      def provision_master?
+      # deprecate
+      def provision_master? 
         !@instance.nil? &amp;&amp; @instance.master?
       end
+      
+      def roles_to_provision
+        [:master]  #always provision the master role for now.  When do we ever want anything else? MF
+      end
 
       # Callback after initialized
       def loaded
@@ -48,14 +54,14 @@ module PoolParty
       
       ### Installation tasks
       
-      # This is the actual runner for the installation    
+      # This is the actual runner for the installation
       def install(testing=false)
         error unless valid?
         setup_runner
-        unless testing          
+        unless testing
           before_install(@instance)
 
-          vputs &quot;Provisioning #{@instance.name}&quot;
+          vputs &quot;Provisioning #{@instance}&quot;
           process_install!(testing)
 
           after_install(@instance)
@@ -63,13 +69,14 @@ module PoolParty
       end
       # The provisioner bases overwrite this method
       def process_install!(testing=false)
+        # raise ProvisionerException(&quot; process_install! should be overwritten by provioner, but it was not.&quot;) #MF todo
       end
       
       # Configuration
       def configure(testing=false)
         error unless valid?
         setup_runner
-        unless testing          
+        unless testing
           before_configure(@instance)
 
           vputs &quot;Provisioning #{@instance.name}&quot;
@@ -84,17 +91,18 @@ module PoolParty
       def setup_runner(force=false)
         @cloud.prepare_for_configuration
         @cloud.build_and_store_new_config_file(force)
+        Neighborhoods.clump(@cloud.remote_instances_list, &quot;#{Default.tmp_path}/neighborhood.json&quot;) unless testing
       end
       
       # Callbacks
       # Before installation callback
-      def before_install(instance)        
+      def before_install(instance)
       end
-      def after_install(instance)        
+      def after_install(instance)
       end
-      def before_configure(instance)        
+      def before_configure(instance)
       end
-      def after_configure(instance)        
+      def after_configure(instance)
       end
       
       def valid?
@@ -129,7 +137,7 @@ module PoolParty
         else
           &quot;puppet puppetmaster&quot;
         end
-      end    
+      end
       # Package installers for general *nix operating systems
       def self.installers
         @installers ||= {
@@ -146,40 +154,38 @@ module PoolParty
         packages = names.is_a?(Array) ? names.join(&quot; &quot;) : names
         &quot;#{self.class.installers[@os]} #{packages}&quot;
       end
-            
+      
       #TODO#
       # Abstract the gems out
       def base_gems
         {
-          :logging =&gt; &quot;http://rubyforge.org/frs/download.php/44731/logging-0.9.4.gem&quot;,
-          :ZenTest =&gt; &quot;http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem&quot;,
-          :ParseTree =&gt; &quot;http://rubyforge.org/frs/download.php/45600/ParseTree-3.0.1.gem&quot;,
-          :ruby2ruby =&gt; &quot;http://rubyforge.org/frs/download.php/45587/ruby2ruby-1.2.0.gem&quot;,
-          :activesupport =&gt; &quot;http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem&quot;,
-          :&quot;xml-simple&quot; =&gt; &quot;http://rubyforge.org/frs/download.php/18366/xml-simple-1.0.11.gem&quot;,
-          :RubyInline =&gt; &quot;http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem&quot;,
-          :flexmock =&gt; &quot;http://rubyforge.org/frs/download.php/42580/flexmock-0.8.3.gem&quot;,
-          :hoe =&gt; &quot;http://rubyforge.org/frs/download.php/45685/hoe-1.8.2.gem&quot;,
-          :lockfile =&gt; &quot;http://rubyforge.org/frs/download.php/18698/lockfile-1.4.3.gem&quot;,
-          :rubyforge =&gt; &quot;http://rubyforge.org/frs/download.php/45546/rubyforge-1.0.1.gem&quot;,
-          :rake =&gt; &quot;http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem&quot;,
-          :sexp_processor =&gt; &quot;http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem&quot;,
-          &quot;net-ssh&quot; =&gt; &quot;http://rubyforge.org/frs/download.php/51288/net-ssh-2.0.10.gem&quot;,
-          &quot;net-sftp&quot; =&gt; &quot;http://rubyforge.org/frs/download.php/37669/net-sftp-2.0.1.gem&quot;,
-          &quot;net-scp&quot; =&gt; &quot;http://rubyforge.org/frs/download.php/37664/net-scp-1.0.1.gem&quot;,
+          :logging          =&gt; &quot;http://rubyforge.org/frs/download.php/44731/logging-0.9.4.gem&quot;,
+          :ZenTest          =&gt; &quot;http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem&quot;,
+          :ParseTree        =&gt; &quot;http://rubyforge.org/frs/download.php/45600/ParseTree-3.0.1.gem&quot;,
+          :ruby2ruby        =&gt; &quot;http://rubyforge.org/frs/download.php/45587/ruby2ruby-1.2.0.gem&quot;,
+          :activesupport    =&gt; &quot;http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem&quot;,
+          :&quot;xml-simple&quot;     =&gt; &quot;http://rubyforge.org/frs/download.php/18366/xml-simple-1.0.11.gem&quot;,
+          :RubyInline       =&gt; &quot;http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem&quot;,
+          :flexmock         =&gt; &quot;http://rubyforge.org/frs/download.php/42580/flexmock-0.8.3.gem&quot;,
+          :lockfile         =&gt; &quot;http://rubyforge.org/frs/download.php/18698/lockfile-1.4.3.gem&quot;,
+          :rake             =&gt; &quot;http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem&quot;,
+          :sexp_processor   =&gt; &quot;http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem&quot;,
+          &quot;net-ssh&quot;         =&gt; &quot;http://rubyforge.org/frs/download.php/51288/net-ssh-2.0.10.gem&quot;,
+          &quot;net-sftp&quot;        =&gt; &quot;http://rubyforge.org/frs/download.php/37669/net-sftp-2.0.1.gem&quot;,
+          &quot;net-scp&quot;         =&gt; &quot;http://rubyforge.org/frs/download.php/37664/net-scp-1.0.1.gem&quot;,
           &quot;net-ssh-gateway&quot; =&gt; &quot;http://rubyforge.org/frs/download.php/36389/net-ssh-gateway-1.0.0.gem&quot;,
-          :echoe =&gt; &quot;http://rubyforge.org/frs/download.php/51240/echoe-3.1.gem&quot;,
-          :highline =&gt; &quot;http://rubyforge.org/frs/download.php/46328/highline-1.5.0.gem&quot;,
-          :capistrano =&gt; &quot;http://rubyforge.org/frs/download.php/51294/capistrano-2.5.4.gem&quot;,
-          :poolparty =&gt; &quot;http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true&quot;,
-          &quot;ec2&quot; =&gt; &quot;http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem&quot;
+          :echoe            =&gt; &quot;http://rubyforge.org/frs/download.php/51240/echoe-3.1.gem&quot;,
+          :highline         =&gt; &quot;http://rubyforge.org/frs/download.php/46328/highline-1.5.0.gem&quot;,
+          :capistrano       =&gt; &quot;http://rubyforge.org/frs/download.php/51294/capistrano-2.5.4.gem&quot;,
+          :poolparty        =&gt; &quot;http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true&quot;,
+          &quot;ec2&quot;             =&gt; &quot;http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem&quot;
         }
       end
       
       def download_base_gems_string
         returning(Array.new) do |arr|
           base_gems.each do |name, url|
-            arr &lt;&lt; &quot;wget #{url} -O #{Base.remote_storage_path}/#{name}.gem 2&gt;&amp;1&quot;
+            arr &lt;&lt; &quot;wget #{url} -O #{Default.remote_storage_path}/#{name}.gem 2&gt;&amp;1&quot;
           end
         end.join(&quot; &amp;&amp; &quot;)
       end
@@ -187,7 +193,7 @@ module PoolParty
       def install_base_gems_string
         returning(Array.new) do |arr|
           base_gems.each do |name, url|
-            arr &lt;&lt; &quot;/usr/bin/gem install --ignore-dependencies --no-ri --no-rdoc #{Base.remote_storage_path}/#{name}.gem&quot;
+            arr &lt;&lt; &quot;/usr/bin/gem install --ignore-dependencies --no-ri --no-rdoc #{Default.remote_storage_path}/#{name}.gem&quot;
           end
         end.join(&quot; &amp;&amp; &quot;)
       end
@@ -196,7 +202,7 @@ module PoolParty
       def template_directory
         File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;templates&quot;)
       end
-                  
+      
       # Install from the class-level
       def self.install(instance, cl=self, testing=false)
         new(instance, cl).install(testing)
@@ -207,7 +213,7 @@ module PoolParty
       end
       
     end
-  end  
+  end
 end
 
 ## Load the provisioners</diff>
      <filename>lib/poolparty/provisioners/provisioner_base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,11 +2,8 @@
   Dir[File.join(File.dirname(__FILE__), &quot;spec&quot;, dir, &quot;*.rb&quot;)].each {|f| require f}
 end
 
-class TestCloudClass &lt; PoolParty::Cloud::Cloud  
-  def build_test_manifest
-    reset_resources!
-    realize_plugins!
-    
+class TestCloudClass &lt; PoolParty::Cloud::Cloud
+  def build_test_manifest    
     returning Array.new do |arr|
       
       services.each do |service|</diff>
      <filename>lib/poolparty/spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@ initdead 60 # Don't boot instances between 60 seconds of each other
 logfacility daemon         # Log to syslog as facility &quot;daemon&quot;
 auto_failback on
 use_logd yes
-crm yes
+bcast eth0
 
 &lt;% ha_node_ips.chomp.split(/\t/).each_with_index do |ip,index| -%&gt;
   &lt;% if hostname != ha_nodenames.chomp.split(/\t/)[index] -%&gt;</diff>
      <filename>lib/poolparty/templates/ha.cf</filename>
    </modified>
    <modified>
      <diff>@@ -1,575 +1,48 @@
---- !ruby/object:Gem::Specification 
-name: poolparty
-version: !ruby/object:Gem::Version 
-  version: 1.0.0
-platform: ruby
-authors: 
-- Ari Lerner
-autorequire: 
-bindir: bin
-cert_chain: []
+:q
+# -*- encoding: utf-8 -*-
 
-date: 2009-03-02 00:00:00 -08:00
-default_executable: 
-dependencies: 
-- !ruby/object:Gem::Dependency 
-  name: activesupport
-  type: :runtime
-  version_requirement: 
-  version_requirements: !ruby/object:Gem::Requirement 
-    requirements: 
-    - - &quot;&gt;=&quot;
-      - !ruby/object:Gem::Version 
-        version: &quot;0&quot;
-    version: 
-- !ruby/object:Gem::Dependency 
-  name: logging
-  type: :runtime
-  version_requirement: 
-  version_requirements: !ruby/object:Gem::Requirement 
-    requirements: 
-    - - &quot;&gt;=&quot;
-      - !ruby/object:Gem::Version 
-        version: &quot;0&quot;
-    version: 
-- !ruby/object:Gem::Dependency 
-  name: ruby2ruby
-  type: :runtime
-  version_requirement: 
-  version_requirements: !ruby/object:Gem::Requirement 
-    requirements: 
-    - - &quot;&gt;=&quot;
-      - !ruby/object:Gem::Version 
-        version: &quot;0&quot;
-    version: 
-- !ruby/object:Gem::Dependency 
-  name: hoe
-  type: :development
-  version_requirement: 
-  version_requirements: !ruby/object:Gem::Requirement 
-    requirements: 
-    - - &quot;&gt;=&quot;
-      - !ruby/object:Gem::Version 
-        version: 1.8.0
-    version: 
-description: Self-healing, auto-scaling system administration, provisioning and maintaining tool that makes cloud computing fun and easy
-email: 
-- ari.lerner@citrusbyte.com
-executables: 
-- cloud
-- cloud-add-access
-- cloud-add-keypair
-- cloud-configure
-- cloud-contract
-- cloud-expand
-- cloud-handle-load
-- cloud-list
-- cloud-maintain
-- cloud-osxcopy
-- cloud-provision
-- cloud-refresh
-- cloud-rsync
-- cloud-run
-- cloud-setup-dev
-- cloud-spec
-- cloud-ssh
-- cloud-start
-- cloud-stats
-- cloud-terminate
-- messenger-get-current-nodes
-- pool
-- pool-console
-- pool-describe
-- pool-generate
-- pool-init
-- pool-list
-- pool-start
-- server-become-master
-- server-build-messenger
-- server-clean-cert-for
-- server-ensure-provisioning
-- server-fire-cmd
-- server-get-load
-- server-list-active
-- server-list-responding
-- server-provision
-- server-query-agent
-- server-rerun
-- server-send-command
-- server-show-stats
-- server-start-agent
-- server-start-client
-- server-start-master
-- server-start-node
-- server-stop-client
-- server-stop-master
-- server-stop-node
-- server-update-hosts
-- server-write-new-nodes
-extensions: []
+Gem::Specification.new do |s|
+  s.name = %q{poolparty}
+  s.version = &quot;1.0.1&quot;
 
-extra_rdoc_files: 
-- History.txt
-- License.txt
-- Manifest.txt
-- PostInstall.txt
-- README.txt
-- lib/erlang/messenger/lib/eunit/examples/tests.txt
-- lib/poolparty/config/postlaunchmessage.txt
-- website/index.txt
-files: 
-- Capfile
-- History.txt
-- License.txt
-- Manifest.txt
-- PostInstall.txt
-- README.txt
-- Rakefile
-- bin/cloud
-- bin/cloud-add-access
-- bin/cloud-add-keypair
-- bin/cloud-configure
-- bin/cloud-contract
-- bin/cloud-expand
-- bin/cloud-handle-load
-- bin/cloud-list
-- bin/cloud-maintain
-- bin/cloud-osxcopy
-- bin/cloud-provision
-- bin/cloud-refresh
-- bin/cloud-rsync
-- bin/cloud-run
-- bin/cloud-setup-dev
-- bin/cloud-spec
-- bin/cloud-ssh
-- bin/cloud-start
-- bin/cloud-stats
-- bin/cloud-terminate
-- bin/messenger-get-current-nodes
-- bin/pool
-- bin/pool-console
-- bin/pool-describe
-- bin/pool-generate
-- bin/pool-init
-- bin/pool-list
-- bin/pool-start
-- bin/server-become-master
-- bin/server-build-messenger
-- bin/server-clean-cert-for
-- bin/server-ensure-provisioning
-- bin/server-fire-cmd
-- bin/server-get-load
-- bin/server-list-active
-- bin/server-list-responding
-- bin/server-provision
-- bin/server-query-agent
-- bin/server-rerun
-- bin/server-send-command
-- bin/server-show-stats
-- bin/server-start-agent
-- bin/server-start-client
-- bin/server-start-master
-- bin/server-start-node
-- bin/server-stop-client
-- bin/server-stop-master
-- bin/server-stop-node
-- bin/server-update-hosts
-- bin/server-write-new-nodes
-- config/hoe.rb
-- config/requirements.rb
-- examples/basic.rb
-- examples/deploy.rb
-- examples/plugin_without_plugin_directory.rb
-- examples/poolparty.rb
-- generators/poolspec/USAGE
-- generators/poolspec/poolspec_generator.rb
-- generators/poolspec/templates/pool_spec_template.erb
-- lib/erlang/messenger/Emakefile
-- lib/erlang/messenger/Makefile
-- lib/erlang/messenger/README
-- lib/erlang/messenger/Rakefile
-- lib/erlang/messenger/control
-- lib/erlang/messenger/ebin/client.app
-- lib/erlang/messenger/ebin/master.app
-- lib/erlang/messenger/ebin/node.app
-- lib/erlang/messenger/ebin/packager.app
-- lib/erlang/messenger/ebin/pm_client_rel-0.1.rel
-- lib/erlang/messenger/ebin/pm_master_rel-0.1.rel
-- lib/erlang/messenger/ebin/pm_node_rel-0.1.rel
-- lib/erlang/messenger/include/defines.hrl
-- lib/erlang/messenger/lib/eunit/AUTHORS
-- lib/erlang/messenger/lib/eunit/CHANGELOG
-- lib/erlang/messenger/lib/eunit/COPYING
-- lib/erlang/messenger/lib/eunit/Makefile
-- lib/erlang/messenger/lib/eunit/NOTES
-- lib/erlang/messenger/lib/eunit/README
-- lib/erlang/messenger/lib/eunit/doc/edoc-info
-- lib/erlang/messenger/lib/eunit/doc/erlang.png
-- lib/erlang/messenger/lib/eunit/doc/eunit.html
-- lib/erlang/messenger/lib/eunit/doc/index.html
-- lib/erlang/messenger/lib/eunit/doc/modules-frame.html
-- lib/erlang/messenger/lib/eunit/doc/overview-summary.html
-- lib/erlang/messenger/lib/eunit/doc/overview.edoc
-- lib/erlang/messenger/lib/eunit/doc/packages-frame.html
-- lib/erlang/messenger/lib/eunit/doc/stylesheet.css
-- lib/erlang/messenger/lib/eunit/ebin/autoload.beam
-- lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit.app
-- lib/erlang/messenger/lib/eunit/ebin/eunit.appup
-- lib/erlang/messenger/lib/eunit/ebin/eunit.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam
-- lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam
-- lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam
-- lib/erlang/messenger/lib/eunit/examples/eunit_examples.erl
-- lib/erlang/messenger/lib/eunit/examples/fib.erl
-- lib/erlang/messenger/lib/eunit/examples/tests.txt
-- lib/erlang/messenger/lib/eunit/include/eunit.hrl
-- lib/erlang/messenger/lib/eunit/src/Makefile
-- lib/erlang/messenger/lib/eunit/src/autoload.erl
-- lib/erlang/messenger/lib/eunit/src/code_monitor.erl
-- lib/erlang/messenger/lib/eunit/src/eunit.app.src
-- lib/erlang/messenger/lib/eunit/src/eunit.appup.src
-- lib/erlang/messenger/lib/eunit/src/eunit.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_autoexport.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_data.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_internal.hrl
-- lib/erlang/messenger/lib/eunit/src/eunit_lib.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_proc.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_serial.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_server.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_striptests.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_test.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_tests.erl
-- lib/erlang/messenger/lib/eunit/src/eunit_tty.erl
-- lib/erlang/messenger/lib/eunit/src/file_monitor.erl
-- lib/erlang/messenger/lib/eunit/sys.config
-- lib/erlang/messenger/lib/eunit/vsn.mk
-- lib/erlang/messenger/pm_client_rel-0.1.boot
-- lib/erlang/messenger/pm_client_rel-0.1.script
-- lib/erlang/messenger/pm_master_rel-0.1.boot
-- lib/erlang/messenger/pm_master_rel-0.1.script
-- lib/erlang/messenger/pm_node_rel-0.1.boot
-- lib/erlang/messenger/pm_node_rel-0.1.script
-- lib/erlang/messenger/src/client_app.erl
-- lib/erlang/messenger/src/client_server.erl
-- lib/erlang/messenger/src/master_app.erl
-- lib/erlang/messenger/src/node_app.erl
-- lib/erlang/messenger/src/pm_client.erl
-- lib/erlang/messenger/src/pm_client_supervisor.erl
-- lib/erlang/messenger/src/pm_cluster.erl
-- lib/erlang/messenger/src/pm_event_manager.erl
-- lib/erlang/messenger/src/pm_master.erl
-- lib/erlang/messenger/src/pm_master_event_handler.erl
-- lib/erlang/messenger/src/pm_master_supervisor.erl
-- lib/erlang/messenger/src/pm_node.erl
-- lib/erlang/messenger/src/pm_node_supervisor.erl
-- lib/erlang/messenger/src/pm_packager.erl
-- lib/erlang/messenger/src/pm_spawner.erl
-- lib/erlang/messenger/src/pm_strings.erl
-- lib/erlang/messenger/src/utils.erl
-- lib/erlang/messenger/useful_snippets
-- lib/poolparty.rb
-- lib/poolparty/aska/aska.rb
-- lib/poolparty/base_packages/haproxy.rb
-- lib/poolparty/base_packages/heartbeat.rb
-- lib/poolparty/base_packages/poolparty.rb
-- lib/poolparty/base_packages/ruby.rb
-- lib/poolparty/base_packages/runit.rb
-- lib/poolparty/capistrano.rb
-- lib/poolparty/capistrano/cloud_tasks.rb
-- lib/poolparty/config/postlaunchmessage.txt
-- lib/poolparty/core/array.rb
-- lib/poolparty/core/class.rb
-- lib/poolparty/core/exception.rb
-- lib/poolparty/core/float.rb
-- lib/poolparty/core/hash.rb
-- lib/poolparty/core/kernel.rb
-- lib/poolparty/core/metaid.rb
-- lib/poolparty/core/module.rb
-- lib/poolparty/core/my_open_struct.rb
-- lib/poolparty/core/object.rb
-- lib/poolparty/core/proc.rb
-- lib/poolparty/core/string.rb
-- lib/poolparty/core/symbol.rb
-- lib/poolparty/core/time.rb
-- lib/poolparty/dependency_resolutions/base.rb
-- lib/poolparty/dependency_resolutions/puppet.rb
-- lib/poolparty/exceptions/CloudNotFoundException.rb
-- lib/poolparty/exceptions/LoadRulesException.rb
-- lib/poolparty/exceptions/MasterException.rb
-- lib/poolparty/exceptions/ProvisionerException.rb
-- lib/poolparty/exceptions/RemoteException.rb
-- lib/poolparty/exceptions/ResourceException.rb
-- lib/poolparty/exceptions/RuntimeException.rb
-- lib/poolparty/exceptions/SpecException.rb
-- lib/poolparty/exceptions/TemplateNotFound.rb
-- lib/poolparty/exceptions/UnacceptableCommand.rb
-- lib/poolparty/extra/deployments.rb
-- lib/poolparty/helpers/binary.rb
-- lib/poolparty/helpers/console.rb
-- lib/poolparty/helpers/display.rb
-- lib/poolparty/helpers/loading.rb
-- lib/poolparty/helpers/nice_printer.rb
-- lib/poolparty/helpers/optioner.rb
-- lib/poolparty/helpers/ruberl.rb
-- lib/poolparty/modules/cloud_dsl.rb
-- lib/poolparty/modules/cloud_resourcer.rb
-- lib/poolparty/modules/configurable.rb
-- lib/poolparty/modules/daemonizable.rb
-- lib/poolparty/modules/definable_resource.rb
-- lib/poolparty/modules/file_writer.rb
-- lib/poolparty/modules/method_missing_sugar.rb
-- lib/poolparty/modules/output.rb
-- lib/poolparty/modules/pretty_printer.rb
-- lib/poolparty/modules/resourcing_dsl.rb
-- lib/poolparty/modules/s3_string.rb
-- lib/poolparty/modules/safe_instance.rb
-- lib/poolparty/modules/thread_pool.rb
-- lib/poolparty/monitors/base_monitor.rb
-- lib/poolparty/monitors/monitors/cpu_monitor.rb
-- lib/poolparty/monitors/monitors/memory_monitor.rb
-- lib/poolparty/monitors/monitors/web_monitor.rb
-- lib/poolparty/net/messenger.rb
-- lib/poolparty/net/remote.rb
-- lib/poolparty/net/remote_bases/ec2.rb
-- lib/poolparty/net/remote_bases/ec2/ec2_response_object.rb
-- lib/poolparty/net/remote_instance.rb
-- lib/poolparty/net/remoter.rb
-- lib/poolparty/net/remoter_base.rb
-- lib/poolparty/plugins/deploydirectory.rb
-- lib/poolparty/plugins/git.rb
-- lib/poolparty/plugins/line.rb
-- lib/poolparty/plugins/rsyncmirror.rb
-- lib/poolparty/plugins/runit.rb
-- lib/poolparty/plugins/svn.rb
-- lib/poolparty/poolparty/base.rb
-- lib/poolparty/poolparty/cloud.rb
-- lib/poolparty/poolparty/custom_resource.rb
-- lib/poolparty/poolparty/loggable.rb
-- lib/poolparty/poolparty/plugin.rb
-- lib/poolparty/poolparty/plugin_model.rb
-- lib/poolparty/poolparty/pool.rb
-- lib/poolparty/poolparty/resource.rb
-- lib/poolparty/poolparty/resources/class_package.rb
-- lib/poolparty/poolparty/resources/conditional.rb
-- lib/poolparty/poolparty/resources/cron.rb
-- lib/poolparty/poolparty/resources/custom_service.rb
-- lib/poolparty/poolparty/resources/directory.rb
-- lib/poolparty/poolparty/resources/exec.rb
-- lib/poolparty/poolparty/resources/file.rb
-- lib/poolparty/poolparty/resources/gem_package.rb
-- lib/poolparty/poolparty/resources/host.rb
-- lib/poolparty/poolparty/resources/mount.rb
-- lib/poolparty/poolparty/resources/package.rb
-- lib/poolparty/poolparty/resources/remote_file.rb
-- lib/poolparty/poolparty/resources/remote_user.rb
-- lib/poolparty/poolparty/resources/service.rb
-- lib/poolparty/poolparty/resources/sshkey.rb
-- lib/poolparty/poolparty/resources/symlink.rb
-- lib/poolparty/poolparty/resources/variable.rb
-- lib/poolparty/poolparty/script.rb
-- lib/poolparty/provisioners/capistrano/capistrano.rb
-- lib/poolparty/provisioners/capistrano/capistrano_configurer.rb
-- lib/poolparty/provisioners/capistrano/recipies/base.rb
-- lib/poolparty/provisioners/capistrano/recipies/master.rb
-- lib/poolparty/provisioners/capistrano/recipies/slave.rb
-- lib/poolparty/provisioners/provisioner_base.rb
-- lib/poolparty/server/agent.rb
-- lib/poolparty/spec.rb
-- lib/poolparty/spec/core/string.rb
-- lib/poolparty/spec/matchers/a_spec_extensions_base.rb
-- lib/poolparty/spec/matchers/have_cron.rb
-- lib/poolparty/spec/matchers/have_deploydirectory.rb
-- lib/poolparty/spec/matchers/have_directory.rb
-- lib/poolparty/spec/matchers/have_exec.rb
-- lib/poolparty/spec/matchers/have_file.rb
-- lib/poolparty/spec/matchers/have_gempackage.rb
-- lib/poolparty/spec/matchers/have_git.rb
-- lib/poolparty/spec/matchers/have_host.rb
-- lib/poolparty/spec/matchers/have_mount.rb
-- lib/poolparty/spec/matchers/have_package.rb
-- lib/poolparty/spec/matchers/have_remotefile.rb
-- lib/poolparty/spec/matchers/have_rsyncmirror.rb
-- lib/poolparty/spec/matchers/have_service.rb
-- lib/poolparty/spec/matchers/have_sshkey.rb
-- lib/poolparty/spec/matchers/have_symlink.rb
-- lib/poolparty/spec/matchers/have_variable.rb
-- lib/poolparty/spec/spec/dynamic_matchers.rb
-- lib/poolparty/spec/spec/ensure_matchers_exist.rb
-- lib/poolparty/spec/templates/have_base.rb
-- lib/poolparty/templates/authkeys
-- lib/poolparty/templates/cib.xml
-- lib/poolparty/templates/gem
-- lib/poolparty/templates/ha.cf
-- lib/poolparty/templates/haproxy.conf
-- lib/poolparty/templates/haresources
-- lib/poolparty/templates/logd.cf
-- lib/poolparty/templates/messenger/client/log-run.erb
-- lib/poolparty/templates/messenger/client/run.erb
-- lib/poolparty/templates/messenger/master/log-run.erb
-- lib/poolparty/templates/messenger/master/run.erb
-- lib/poolparty/templates/messenger/node/log-run.erb
-- lib/poolparty/templates/messenger/node/run.erb
-- lib/poolparty/templates/namespaceauth.conf
-- lib/poolparty/templates/poolparty.monitor
-- lib/poolparty/templates/puppet.conf
-- lib/poolparty/templates/puppetcleaner
-- lib/poolparty/templates/puppetrerun
-- lib/poolparty/templates/puppetrunner
-- lib/poolparty/templates/yaws.conf
-- lib/poolparty/version.rb
-- lib/poolpartycl.rb
-- log/pool.log
-- poolparty.gemspec
-- script/destroy
-- script/generate
-- script/txt2html
-- setup.rb
-- spec/poolparty/aska/aska_spec.rb
-- spec/poolparty/base_packages/haproxy_spec.rb
-- spec/poolparty/base_packages/heartbeat_spec.rb
-- spec/poolparty/bin/console_spec.rb
-- spec/poolparty/core/array_spec.rb
-- spec/poolparty/core/float.rb
-- spec/poolparty/core/hash_spec.rb
-- spec/poolparty/core/kernel_spec.rb
-- spec/poolparty/core/module_spec.rb
-- spec/poolparty/core/object_spec.rb
-- spec/poolparty/core/string_spec.rb
-- spec/poolparty/core/time_spec.rb
-- spec/poolparty/dependency_resolutions/base_spec.rb
-- spec/poolparty/extra/deployments_spec.rb
-- spec/poolparty/helpers/binary_spec.rb
-- spec/poolparty/helpers/display_spec.rb
-- spec/poolparty/helpers/optioner_spec.rb
-- spec/poolparty/modules/cloud_resourcer_spec.rb
-- spec/poolparty/modules/configurable_spec.rb
-- spec/poolparty/modules/definable_resource.rb
-- spec/poolparty/modules/file_writer_spec.rb
-- spec/poolparty/modules/s3_string_spec.rb
-- spec/poolparty/monitors/base_monitor_spec.rb
-- spec/poolparty/monitors/monitors/cpu_monitor_spec.rb
-- spec/poolparty/monitors/monitors/memory_monitor_spec.rb
-- spec/poolparty/net/messenger_spec.rb
-- spec/poolparty/net/remote_bases/ec2_spec.rb
-- spec/poolparty/net/remote_instance_spec.rb
-- spec/poolparty/net/remote_spec.rb
-- spec/poolparty/net/remoter_base_spec.rb
-- spec/poolparty/net/remoter_spec.rb
-- spec/poolparty/plugins/deploydirectory_spec.rb
-- spec/poolparty/plugins/git_spec.rb
-- spec/poolparty/plugins/line_spec.rb
-- spec/poolparty/plugins/svn_spec.rb
-- spec/poolparty/poolparty/base_spec.rb
-- spec/poolparty/poolparty/cloud_spec.rb
-- spec/poolparty/poolparty/configurers/files/ruby_basic.rb
-- spec/poolparty/poolparty/configurers/files/ruby_plugins.rb
-- spec/poolparty/poolparty/configurers/ruby_spec.rb
-- spec/poolparty/poolparty/custom_resource_spec.rb
-- spec/poolparty/poolparty/example_spec.rb
-- spec/poolparty/poolparty/plugin_model_spec.rb
-- spec/poolparty/poolparty/plugin_spec.rb
-- spec/poolparty/poolparty/pool_spec.rb
-- spec/poolparty/poolparty/resource_spec.rb
-- spec/poolparty/poolparty/resources/class_package_spec.rb
-- spec/poolparty/poolparty/resources/conditional_spec.rb
-- spec/poolparty/poolparty/resources/cron_spec.rb
-- spec/poolparty/poolparty/resources/directory_spec.rb
-- spec/poolparty/poolparty/resources/exec_spec.rb
-- spec/poolparty/poolparty/resources/file_spec.rb
-- spec/poolparty/poolparty/resources/gem_spec.rb
-- spec/poolparty/poolparty/resources/host_spec.rb
-- spec/poolparty/poolparty/resources/package_spec.rb
-- spec/poolparty/poolparty/resources/remote_file_spec.rb
-- spec/poolparty/poolparty/resources/service_spec.rb
-- spec/poolparty/poolparty/resources/sshkey_spec.rb
-- spec/poolparty/poolparty/resources/symlink_spec.rb
-- spec/poolparty/poolparty/resources/user_spec.rb
-- spec/poolparty/poolparty/resources/variable_spec.rb
-- spec/poolparty/poolparty/script_spec.rb
-- spec/poolparty/poolparty/test_plugins/sshkey_test
-- spec/poolparty/poolparty/test_plugins/virtual_host_template.erb
-- spec/poolparty/poolparty/test_plugins/webserver.rb
-- spec/poolparty/poolparty_spec.rb
-- spec/poolparty/provisioners/capistrano/capistrano_spec.rb
-- spec/poolparty/provisioners/provisioner_base_spec.rb
-- spec/poolparty/spec/core/string_spec.rb
-- spec/poolparty/spec_helper.rb
-- tasks/cloud.rake
-- tasks/deployment.rake
-- tasks/development.rake
-- tasks/ec2.rake
-- tasks/environment.rake
-- tasks/instance.rake
-- tasks/server.rake
-- tasks/spec.rake
-- tasks/website.rake
-- test/test_generator_helper.rb
-- test/test_helper.rb
-- test/test_pool_spec_generator.rb
-- test/test_poolparty.rb
-- website/index.html
-- website/index.txt
-- website/javascripts/rounded_corners_lite.inc.js
-- website/stylesheets/code.css
-- website/stylesheets/screen.css
-- website/template.html.erb
-has_rdoc: true
-homepage: http://poolparty.rubyforge.org
-post_install_message: |-
-  Get ready to jump in the pool, you just installed PoolParty! (Updated at 19:34 03/02/09)
-  
-  To get started, run the generator:
-  
-    pool spec &lt;name&gt;
-  
-  Please check out the documentation for any questions or check out the google groups at
-    http://groups.google.com/group/poolpartyrb
-  
-  More tutorials can be found at 
-    http://poolpartyrb.com
-  
-  Don't forget to check out the plugin tutorial @ http://poolpartyrb.com to extend PoolParty for your needs!
-  
-  For more information, check http://PoolPartyrb.com or visit us on IRC at:
-    irc.freenode.net
-    #poolpartyrb
-  
-  *** Ari Lerner @ &lt;arilerner@mac.com&gt; ***
-rdoc_options: 
-- --main
-- README.txt
-require_paths: 
-- lib
-required_ruby_version: !ruby/object:Gem::Requirement 
-  requirements: 
-  - - &quot;&gt;=&quot;
-    - !ruby/object:Gem::Version 
-      version: &quot;0&quot;
-  version: 
-required_rubygems_version: !ruby/object:Gem::Requirement 
-  requirements: 
-  - - &quot;&gt;=&quot;
-    - !ruby/object:Gem::Version 
-      version: &quot;0&quot;
-  version: 
-requirements: []
+  s.required_rubygems_version = Gem::Requirement.new(&quot;&gt;= 0&quot;) if s.respond_to? :required_rubygems_version=
+  s.authors = [&quot;Ari Lerner&quot;]
+  s.date = %q{2009-04-01}
+  s.description = %q{Self-healing, auto-scaling system administration, provisioning and maintaining tool that makes cloud computing fun and easy}
+  s.email = %q{ari.lerner@citrusbyte.com}
+  s.executables = [&quot;cloud&quot;, &quot;cloud-add-access&quot;, &quot;cloud-add-keypair&quot;, &quot;cloud-bootstrap&quot;, &quot;cloud-configure&quot;, &quot;cloud-console&quot;, &quot;cloud-contract&quot;, &quot;cloud-expand&quot;, &quot;cloud-handle-load&quot;, &quot;cloud-list&quot;, &quot;cloud-maintain&quot;, &quot;cloud-osxcopy&quot;, &quot;cloud-provision&quot;, &quot;cloud-refresh&quot;, &quot;cloud-rsync&quot;, &quot;cloud-run&quot;, &quot;cloud-setup-dev&quot;, &quot;cloud-spec&quot;, &quot;cloud-ssh&quot;, &quot;cloud-start&quot;, &quot;cloud-stats&quot;, &quot;cloud-terminate&quot;, &quot;ec2-list-active&quot;, &quot;messenger-get-current-nodes&quot;, &quot;pool&quot;, &quot;pool-describe&quot;, &quot;pool-generate&quot;, &quot;pool-init&quot;, &quot;pool-list&quot;, &quot;pool-start&quot;, &quot;server-become-master&quot;, &quot;server-build-messenger&quot;, &quot;server-clean-cert-for&quot;, &quot;server-ensure-provisioning&quot;, &quot;server-fire-cmd&quot;, &quot;server-get-load&quot;, &quot;server-list-active&quot;, &quot;server-provision&quot;, &quot;server-query-agent&quot;, &quot;server-rerun&quot;, &quot;server-send-command&quot;, &quot;server-show-stats&quot;, &quot;server-start-agent&quot;, &quot;server-start-client&quot;, &quot;server-start-master&quot;, &quot;server-start-node&quot;, &quot;server-stop-client&quot;, &quot;server-stop-master&quot;, &quot;server-stop-node&quot;, &quot;server-update-hosts&quot;, &quot;server-write-new-nodes&quot;]
+  s.extra_rdoc_files = [&quot;README.txt&quot;, &quot;License.txt&quot;, &quot;History.txt&quot;]
+  s.files = [&quot;Rakefile&quot;, &quot;History.txt&quot;, &quot;README.txt&quot;, &quot;PostInstall.txt&quot;, &quot;License.txt&quot;, &quot;VERSION.yml&quot;, &quot;config/jeweler.rb&quot;, &quot;config/requirements.rb&quot;, &quot;examples/basic.rb&quot;, &quot;examples/default.rb&quot;, &quot;examples/deploy.rb&quot;, &quot;examples/fairchild.rb&quot;, &quot;examples/plugin_without_plugin_directory.rb&quot;, &quot;examples/poolparty.rb&quot;, &quot;examples/suspenders.conf.erb&quot;, &quot;lib/erlang&quot;, &quot;lib/erlang/messenger&quot;, &quot;lib/erlang/messenger/control&quot;, &quot;lib/erlang/messenger/ebin&quot;, &quot;lib/erlang/messenger/ebin/client.app&quot;, &quot;lib/erlang/messenger/ebin/master.app&quot;, &quot;lib/erlang/messenger/ebin/node.app&quot;, &quot;lib/erlang/messenger/ebin/packager.app&quot;, &quot;lib/erlang/messenger/ebin/pm_client_rel-0.1.rel&quot;, &quot;lib/erlang/messenger/ebin/pm_master_rel-0.1.rel&quot;, &quot;lib/erlang/messenger/ebin/pm_node_rel-0.1.rel&quot;, &quot;lib/erlang/messenger/Emakefile&quot;, &quot;lib/erlang/messenger/include&quot;, &quot;lib/erlang/messenger/include/defines.hrl&quot;, &quot;lib/erlang/messenger/lib&quot;, &quot;lib/erlang/messenger/lib/eunit&quot;, &quot;lib/erlang/messenger/lib/eunit/AUTHORS&quot;, &quot;lib/erlang/messenger/lib/eunit/CHANGELOG&quot;, &quot;lib/erlang/messenger/lib/eunit/COPYING&quot;, &quot;lib/erlang/messenger/lib/eunit/doc&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/edoc-info&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/erlang.png&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/eunit.html&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/index.html&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/modules-frame.html&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/overview-summary.html&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/overview.edoc&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/packages-frame.html&quot;, &quot;lib/erlang/messenger/lib/eunit/doc/stylesheet.css&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/autoload.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit.app&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit.appup&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam&quot;, &quot;lib/erlang/messenger/lib/eunit/examples&quot;, &quot;lib/erlang/messenger/lib/eunit/examples/eunit_examples.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/examples/fib.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/examples/tests.txt&quot;, &quot;lib/erlang/messenger/lib/eunit/include&quot;, &quot;lib/erlang/messenger/lib/eunit/include/eunit.hrl&quot;, &quot;lib/erlang/messenger/lib/eunit/Makefile&quot;, &quot;lib/erlang/messenger/lib/eunit/NOTES&quot;, &quot;lib/erlang/messenger/lib/eunit/README&quot;, &quot;lib/erlang/messenger/lib/eunit/src&quot;, &quot;lib/erlang/messenger/lib/eunit/src/autoload.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/code_monitor.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit.app.src&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit.appup.src&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_autoexport.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_data.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_internal.hrl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_lib.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_proc.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_serial.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_server.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_striptests.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_test.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_tests.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/eunit_tty.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/file_monitor.erl&quot;, &quot;lib/erlang/messenger/lib/eunit/src/Makefile&quot;, &quot;lib/erlang/messenger/lib/eunit/sys.config&quot;, &quot;lib/erlang/messenger/lib/eunit/vsn.mk&quot;, &quot;lib/erlang/messenger/Makefile&quot;, &quot;lib/erlang/messenger/pm_client_rel-0.1.boot&quot;, &quot;lib/erlang/messenger/pm_client_rel-0.1.script&quot;, &quot;lib/erlang/messenger/pm_master_rel-0.1.boot&quot;, &quot;lib/erlang/messenger/pm_master_rel-0.1.script&quot;, &quot;lib/erlang/messenger/pm_node_rel-0.1.boot&quot;, &quot;lib/erlang/messenger/pm_node_rel-0.1.script&quot;, &quot;lib/erlang/messenger/Rakefile&quot;, &quot;lib/erlang/messenger/README&quot;, &quot;lib/erlang/messenger/src&quot;, &quot;lib/erlang/messenger/src/client_app.erl&quot;, &quot;lib/erlang/messenger/src/client_server.erl&quot;, &quot;lib/erlang/messenger/src/master_app.erl&quot;, &quot;lib/erlang/messenger/src/node_app.erl&quot;, &quot;lib/erlang/messenger/src/pm_client.erl&quot;, &quot;lib/erlang/messenger/src/pm_client_supervisor.erl&quot;, &quot;lib/erlang/messenger/src/pm_cluster.erl&quot;, &quot;lib/erlang/messenger/src/pm_event_manager.erl&quot;, &quot;lib/erlang/messenger/src/pm_master.erl&quot;, &quot;lib/erlang/messenger/src/pm_master_event_handler.erl&quot;, &quot;lib/erlang/messenger/src/pm_master_supervisor.erl&quot;, &quot;lib/erlang/messenger/src/pm_node.erl&quot;, &quot;lib/erlang/messenger/src/pm_node_supervisor.erl&quot;, &quot;lib/erlang/messenger/src/pm_packager.erl&quot;, &quot;lib/erlang/messenger/src/pm_spawner.erl&quot;, &quot;lib/erlang/messenger/src/pm_strings.erl&quot;, &quot;lib/erlang/messenger/src/utils.erl&quot;, &quot;lib/erlang/messenger/useful_snippets&quot;, &quot;lib/poolparty&quot;, &quot;lib/poolparty/aska&quot;, &quot;lib/poolparty/aska/aska.rb&quot;, &quot;lib/poolparty/base_packages&quot;, &quot;lib/poolparty/base_packages/haproxy.rb&quot;, &quot;lib/poolparty/base_packages/heartbeat.rb&quot;, &quot;lib/poolparty/base_packages/poolparty.rb&quot;, &quot;lib/poolparty/base_packages/ruby.rb&quot;, &quot;lib/poolparty/base_packages/runit.rb&quot;, &quot;lib/poolparty/capistrano&quot;, &quot;lib/poolparty/capistrano/cloud_tasks.rb&quot;, &quot;lib/poolparty/capistrano.rb&quot;, &quot;lib/poolparty/config&quot;, &quot;lib/poolparty/config/postlaunchmessage.txt&quot;, &quot;lib/poolparty/core&quot;, &quot;lib/poolparty/core/array.rb&quot;, &quot;lib/poolparty/core/class.rb&quot;, &quot;lib/poolparty/core/exception.rb&quot;, &quot;lib/poolparty/core/float.rb&quot;, &quot;lib/poolparty/core/hash.rb&quot;, &quot;lib/poolparty/core/kernel.rb&quot;, &quot;lib/poolparty/core/metaid.rb&quot;, &quot;lib/poolparty/core/module.rb&quot;, &quot;lib/poolparty/core/my_open_struct.rb&quot;, &quot;lib/poolparty/core/object.rb&quot;, &quot;lib/poolparty/core/proc.rb&quot;, &quot;lib/poolparty/core/string.rb&quot;, &quot;lib/poolparty/core/symbol.rb&quot;, &quot;lib/poolparty/core/time.rb&quot;, &quot;lib/poolparty/dependencies.rb&quot;, &quot;lib/poolparty/dependency_resolver&quot;, &quot;lib/poolparty/dependency_resolver/dependency_resolver.rb&quot;, &quot;lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb&quot;, &quot;lib/poolparty/dependency_resolver/puppet.rb&quot;, &quot;lib/poolparty/dependency_resolver/puppet_resolver.rb&quot;, &quot;lib/poolparty/exceptions&quot;, &quot;lib/poolparty/exceptions/CloudNotFoundException.rb&quot;, &quot;lib/poolparty/exceptions/dependency_resolver_exception.rb&quot;, &quot;lib/poolparty/exceptions/LoadRulesException.rb&quot;, &quot;lib/poolparty/exceptions/MasterException.rb&quot;, &quot;lib/poolparty/exceptions/package_exception.rb&quot;, &quot;lib/poolparty/exceptions/ProvisionerException.rb&quot;, &quot;lib/poolparty/exceptions/RemoteException.rb&quot;, &quot;lib/poolparty/exceptions/ResourceException.rb&quot;, &quot;lib/poolparty/exceptions/RuntimeException.rb&quot;, &quot;lib/poolparty/exceptions/SpecException.rb&quot;, &quot;lib/poolparty/exceptions/TemplateNotFound.rb&quot;, &quot;lib/poolparty/exceptions/UnacceptableCommand.rb&quot;, &quot;lib/poolparty/extra&quot;, &quot;lib/poolparty/extra/deployments.rb&quot;, &quot;lib/poolparty/helpers&quot;, &quot;lib/poolparty/helpers/binary.rb&quot;, &quot;lib/poolparty/helpers/console.rb&quot;, &quot;lib/poolparty/helpers/display.rb&quot;, &quot;lib/poolparty/helpers/hash_printer.rb&quot;, &quot;lib/poolparty/helpers/loading.rb&quot;, &quot;lib/poolparty/helpers/nice_printer.rb&quot;, &quot;lib/poolparty/helpers/optioner.rb&quot;, &quot;lib/poolparty/helpers/ruberl.rb&quot;, &quot;lib/poolparty/lite.rb&quot;, &quot;lib/poolparty/modules&quot;, &quot;lib/poolparty/modules/cloud_dsl.rb&quot;, &quot;lib/poolparty/modules/cloud_resourcer.rb&quot;, &quot;lib/poolparty/modules/daemonizable.rb&quot;, &quot;lib/poolparty/modules/definable_resource.rb&quot;, &quot;lib/poolparty/modules/file_writer.rb&quot;, &quot;lib/poolparty/modules/output.rb&quot;, &quot;lib/poolparty/modules/pretty_printer.rb&quot;, &quot;lib/poolparty/modules/resourcing_dsl.rb&quot;, &quot;lib/poolparty/modules/s3_string.rb&quot;, &quot;lib/poolparty/modules/safe_instance.rb&quot;, &quot;lib/poolparty/modules/thread_pool.rb&quot;, &quot;lib/poolparty/monitors&quot;, &quot;lib/poolparty/monitors/base_monitor.rb&quot;, &quot;lib/poolparty/monitors/monitors&quot;, &quot;lib/poolparty/monitors/monitors/cpu_monitor.rb&quot;, &quot;lib/poolparty/monitors/monitors/memory_monitor.rb&quot;, &quot;lib/poolparty/monitors/monitors/web_monitor.rb&quot;, &quot;lib/poolparty/net&quot;, &quot;lib/poolparty/net/init.rb&quot;, &quot;lib/poolparty/net/messenger.rb&quot;, &quot;lib/poolparty/net/remote_bases&quot;, &quot;lib/poolparty/net/remote_bases.rb&quot;, &quot;lib/poolparty/net/remote_instance.rb&quot;, &quot;lib/poolparty/net/remoter&quot;, &quot;lib/poolparty/net/remoter/cloud_control.rb&quot;, &quot;lib/poolparty/net/remoter/connections.rb&quot;, &quot;lib/poolparty/net/remoter/interactive.rb&quot;, &quot;lib/poolparty/net/remoter/lists.rb&quot;, &quot;lib/poolparty/net/remoter_base.rb&quot;, &quot;lib/poolparty/net/remoter_bases&quot;, &quot;lib/poolparty/net/remoter_bases/ec2&quot;, &quot;lib/poolparty/net/remoter_bases/ec2/ec2.rb&quot;, &quot;lib/poolparty/net/remoter_bases/ec2/ec2_remote_instance.rb&quot;, &quot;lib/poolparty/net/remoter_bases/ec2/ec2_response_object.rb&quot;, &quot;lib/poolparty/plugins&quot;, &quot;lib/poolparty/plugins/chef.rb&quot;, &quot;lib/poolparty/plugins/deploydirectory.rb&quot;, &quot;lib/poolparty/plugins/git.rb&quot;, &quot;lib/poolparty/plugins/rsyncmirror.rb&quot;, &quot;lib/poolparty/plugins/runit.rb&quot;, &quot;lib/poolparty/plugins/svn.rb&quot;, &quot;lib/poolparty/poolparty&quot;, &quot;lib/poolparty/poolparty/cloud.rb&quot;, &quot;lib/poolparty/poolparty/custom_resource.rb&quot;, &quot;lib/poolparty/poolparty/default.rb&quot;, &quot;lib/poolparty/poolparty/key.rb&quot;, &quot;lib/poolparty/poolparty/loggable.rb&quot;, &quot;lib/poolparty/poolparty/neighborhoods.rb&quot;, &quot;lib/poolparty/poolparty/plugin.rb&quot;, &quot;lib/poolparty/poolparty/plugin_model.rb&quot;, &quot;lib/poolparty/poolparty/pool.rb&quot;, &quot;lib/poolparty/poolparty/poolparty_base_class.rb&quot;, &quot;lib/poolparty/poolparty/resource.rb&quot;, &quot;lib/poolparty/poolparty/script.rb&quot;, &quot;lib/poolparty/poolparty/service.rb&quot;, &quot;lib/poolparty/poolparty/template.rb&quot;, &quot;lib/poolparty/provision&quot;, &quot;lib/poolparty/provision/boot_strapper.rb&quot;, &quot;lib/poolparty/provision/configurations&quot;, &quot;lib/poolparty/provision/configurations/chef.rb&quot;, &quot;lib/poolparty/provision/configurations/puppet.rb&quot;, &quot;lib/poolparty/provision/dr_configure.rb&quot;, &quot;lib/poolparty/provisioners&quot;, &quot;lib/poolparty/provisioners/capistrano&quot;, &quot;lib/poolparty/provisioners/capistrano/capistrano.rb&quot;, &quot;lib/poolparty/provisioners/capistrano/capistrano_configurer.rb&quot;, &quot;lib/poolparty/provisioners/capistrano/recipes&quot;, &quot;lib/poolparty/provisioners/capistrano/recipes/aws.rb&quot;, &quot;lib/poolparty/provisioners/capistrano/recipes/base.rb&quot;, &quot;lib/poolparty/provisioners/capistrano/recipes/master.rb&quot;, &quot;lib/poolparty/provisioners/capistrano/recipes/puppet.rb&quot;, &quot;lib/poolparty/provisioners/capistrano/recipes/slave.rb&quot;, &quot;lib/poolparty/provisioners/provisioner_base.rb&quot;, &quot;lib/poolparty/resources&quot;, &quot;lib/poolparty/resources/cron.rb&quot;, &quot;lib/poolparty/resources/custom_service.rb&quot;, &quot;lib/poolparty/resources/directory.rb&quot;, &quot;lib/poolparty/resources/exec.rb&quot;, &quot;lib/poolparty/resources/file.rb&quot;, &quot;lib/poolparty/resources/host.rb&quot;, &quot;lib/poolparty/resources/line.rb&quot;, &quot;lib/poolparty/resources/mount.rb&quot;, &quot;lib/poolparty/resources/package.rb&quot;, &quot;lib/poolparty/resources/remote_file.rb&quot;, &quot;lib/poolparty/resources/service.rb&quot;, &quot;lib/poolparty/resources/sshkey.rb&quot;, &quot;lib/poolparty/resources/symlink.rb&quot;, &quot;lib/poolparty/resources/user.rb&quot;, &quot;lib/poolparty/resources/variable.rb&quot;, &quot;lib/poolparty/schema.rb&quot;, &quot;lib/poolparty/services&quot;, &quot;lib/poolparty/services/conditional.rb&quot;, &quot;lib/poolparty/services/gem_package.rb&quot;, &quot;lib/poolparty/spec&quot;, &quot;lib/poolparty/spec/core&quot;, &quot;lib/poolparty/spec/core/string.rb&quot;, &quot;lib/poolparty/spec/matchers&quot;, &quot;lib/poolparty/spec/matchers/a_spec_extensions_base.rb&quot;, &quot;lib/poolparty/spec/matchers/have_cron.rb&quot;, &quot;lib/poolparty/spec/matchers/have_deploydirectory.rb&quot;, &quot;lib/poolparty/spec/matchers/have_directory.rb&quot;, &quot;lib/poolparty/spec/matchers/have_exec.rb&quot;, &quot;lib/poolparty/spec/matchers/have_file.rb&quot;, &quot;lib/poolparty/spec/matchers/have_gempackage.rb&quot;, &quot;lib/poolparty/spec/matchers/have_git.rb&quot;, &quot;lib/poolparty/spec/matchers/have_host.rb&quot;, &quot;lib/poolparty/spec/matchers/have_mount.rb&quot;, &quot;lib/poolparty/spec/matchers/have_package.rb&quot;, &quot;lib/poolparty/spec/matchers/have_remotefile.rb&quot;, &quot;lib/poolparty/spec/matchers/have_rsyncmirror.rb&quot;, &quot;lib/poolparty/spec/matchers/have_service.rb&quot;, &quot;lib/poolparty/spec/matchers/have_sshkey.rb&quot;, &quot;lib/poolparty/spec/matchers/have_symlink.rb&quot;, &quot;lib/poolparty/spec/matchers/have_variable.rb&quot;, &quot;lib/poolparty/spec/spec&quot;, &quot;lib/poolparty/spec/spec/dynamic_matchers.rb&quot;, &quot;lib/poolparty/spec/spec/ensure_matchers_exist.rb&quot;, &quot;lib/poolparty/spec/templates&quot;, &quot;lib/poolparty/spec/templates/have_base.rb&quot;, &quot;lib/poolparty/spec.rb&quot;, &quot;lib/poolparty/templates&quot;, &quot;lib/poolparty/templates/authkeys&quot;, &quot;lib/poolparty/templates/cib.xml&quot;, &quot;lib/poolparty/templates/erlang_cookie_maker&quot;, &quot;lib/poolparty/templates/gem&quot;, &quot;lib/poolparty/templates/gemrc&quot;, &quot;lib/poolparty/templates/ha.cf&quot;, &quot;lib/poolparty/templates/haproxy.conf&quot;, &quot;lib/poolparty/templates/haresources&quot;, &quot;lib/poolparty/templates/logd.cf&quot;, &quot;lib/poolparty/templates/messenger&quot;, &quot;lib/poolparty/templates/messenger/client&quot;, &quot;lib/poolparty/templates/messenger/client/log-run.erb&quot;, &quot;lib/poolparty/templates/messenger/client/run.erb&quot;, &quot;lib/poolparty/templates/messenger/master&quot;, &quot;lib/poolparty/templates/messenger/master/log-run.erb&quot;, &quot;lib/poolparty/templates/messenger/master/run.erb&quot;, &quot;lib/poolparty/templates/messenger/node&quot;, &quot;lib/poolparty/templates/messenger/node/log-run.erb&quot;, &quot;lib/poolparty/templates/messenger/node/run.erb&quot;, &quot;lib/poolparty/templates/namespaceauth.conf&quot;, &quot;lib/poolparty/templates/poolparty.monitor&quot;, &quot;lib/poolparty/templates/puppet&quot;, &quot;lib/poolparty/templates/puppet/add_puppet_to_hosts&quot;, &quot;lib/poolparty/templates/puppet/puppet.conf&quot;, &quot;lib/poolparty/templates/puppet/puppetrunner&quot;, &quot;lib/poolparty/templates/puppet/site.pp&quot;, &quot;lib/poolparty/templates/yaws.conf&quot;, &quot;lib/poolparty/version.rb&quot;, &quot;lib/poolparty.rb&quot;, &quot;lib/poolpartycl.rb&quot;, &quot;spec/bin&quot;, &quot;spec/bin/bin_spec_helper.rb&quot;, &quot;spec/bin/fixtures&quot;, &quot;spec/bin/fixtures/bin_cloud_for_test.rb&quot;, &quot;spec/bin/server-list-active_spec.rb&quot;, &quot;spec/poolparty&quot;, &quot;spec/poolparty/aska&quot;, &quot;spec/poolparty/aska/aska_spec.rb&quot;, &quot;spec/poolparty/base_packages&quot;, &quot;spec/poolparty/base_packages/haproxy_spec.rb&quot;, &quot;spec/poolparty/base_packages/heartbeat_spec.rb&quot;, &quot;spec/poolparty/bin&quot;, &quot;spec/poolparty/bin/console_spec.rb&quot;, &quot;spec/poolparty/core&quot;, &quot;spec/poolparty/core/array_spec.rb&quot;, &quot;spec/poolparty/core/float.rb&quot;, &quot;spec/poolparty/core/hash_spec.rb&quot;, &quot;spec/poolparty/core/kernel_spec.rb&quot;, &quot;spec/poolparty/core/module_spec.rb&quot;, &quot;spec/poolparty/core/object_spec.rb&quot;, &quot;spec/poolparty/core/string_spec.rb&quot;, &quot;spec/poolparty/core/time_spec.rb&quot;, &quot;spec/poolparty/dependencies_spec.rb&quot;, &quot;spec/poolparty/dependency_resolver&quot;, &quot;spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb&quot;, &quot;spec/poolparty/dependency_resolver/dependency_resolver_spec.rb&quot;, &quot;spec/poolparty/dependency_resolver/puppet_resolver_spec.rb&quot;, &quot;spec/poolparty/extra&quot;, &quot;spec/poolparty/extra/deployments_spec.rb&quot;, &quot;spec/poolparty/fixtures&quot;, &quot;spec/poolparty/fixtures/clouds.json&quot;, &quot;spec/poolparty/fixtures/test_template.erb&quot;, &quot;spec/poolparty/helpers&quot;, &quot;spec/poolparty/helpers/binary_spec.rb&quot;, &quot;spec/poolparty/helpers/display_spec.rb&quot;, &quot;spec/poolparty/helpers/hash_printer_spec.rb&quot;, &quot;spec/poolparty/helpers/optioner_spec.rb&quot;, &quot;spec/poolparty/id_rsa&quot;, &quot;spec/poolparty/modules&quot;, &quot;spec/poolparty/modules/cloud_resourcer_spec.rb&quot;, &quot;spec/poolparty/modules/definable_resource.rb&quot;, &quot;spec/poolparty/modules/file_writer_spec.rb&quot;, &quot;spec/poolparty/modules/s3_string_spec.rb&quot;, &quot;spec/poolparty/monitors&quot;, &quot;spec/poolparty/monitors/base_monitor_spec.rb&quot;, &quot;spec/poolparty/monitors/monitors&quot;, &quot;spec/poolparty/monitors/monitors/cpu_monitor_spec.rb&quot;, &quot;spec/poolparty/monitors/monitors/memory_monitor_spec.rb&quot;, &quot;spec/poolparty/net&quot;, &quot;spec/poolparty/net/messenger_spec.rb&quot;, &quot;spec/poolparty/net/remote_instance_spec.rb&quot;, &quot;spec/poolparty/net/remote_spec.rb&quot;, &quot;spec/poolparty/net/remoter_base_spec.rb&quot;, &quot;spec/poolparty/net/remoter_bases&quot;, &quot;spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb&quot;, &quot;spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb&quot;, &quot;spec/poolparty/net/remoter_bases/ec2_spec.rb&quot;, &quot;spec/poolparty/net/remoter_spec.rb&quot;, &quot;spec/poolparty/plugins&quot;, &quot;spec/poolparty/plugins/chef_spec.rb&quot;, &quot;spec/poolparty/plugins/deploydirectory_spec.rb&quot;, &quot;spec/poolparty/plugins/git_spec.rb&quot;, &quot;spec/poolparty/plugins/line_spec.rb&quot;, &quot;spec/poolparty/plugins/svn_spec.rb&quot;, &quot;spec/poolparty/poolparty&quot;, &quot;spec/poolparty/poolparty/cloud_spec.rb&quot;, &quot;spec/poolparty/poolparty/configurers&quot;, &quot;spec/poolparty/poolparty/configurers/files&quot;, &quot;spec/poolparty/poolparty/configurers/files/ruby_basic.rb&quot;, &quot;spec/poolparty/poolparty/configurers/files/ruby_plugins.rb&quot;, &quot;spec/poolparty/poolparty/configurers/ruby_spec.rb&quot;, &quot;spec/poolparty/poolparty/custom_resource_spec.rb&quot;, &quot;spec/poolparty/poolparty/default_spec.rb&quot;, &quot;spec/poolparty/poolparty/example_spec.rb&quot;, &quot;spec/poolparty/poolparty/key_spec.rb&quot;, &quot;spec/poolparty/poolparty/neighborhoods_spec.rb&quot;, &quot;spec/poolparty/poolparty/plugin_model_spec.rb&quot;, &quot;spec/poolparty/poolparty/plugin_spec.rb&quot;, &quot;spec/poolparty/poolparty/pool_spec.rb&quot;, &quot;spec/poolparty/poolparty/resource_spec.rb&quot;, &quot;spec/poolparty/poolparty/script_spec.rb&quot;, &quot;spec/poolparty/poolparty/service_spec.rb&quot;, &quot;spec/poolparty/poolparty/template_spec.rb&quot;, &quot;spec/poolparty/poolparty/test_plugins&quot;, &quot;spec/poolparty/poolparty/test_plugins/sshkey_test&quot;, &quot;spec/poolparty/poolparty/test_plugins/virtual_host_template.erb&quot;, &quot;spec/poolparty/poolparty/test_plugins/webserver.rb&quot;, &quot;spec/poolparty/poolparty_base_class_spec.rb&quot;, &quot;spec/poolparty/poolparty_spec.rb&quot;, &quot;spec/poolparty/provisioners&quot;, &quot;spec/poolparty/provisioners/capistrano&quot;, &quot;spec/poolparty/provisioners/capistrano/capistrano_spec.rb&quot;, &quot;spec/poolparty/provisioners/provisioner_base_spec.rb&quot;, &quot;spec/poolparty/resources&quot;, &quot;spec/poolparty/resources/cron_spec.rb&quot;, &quot;spec/poolparty/resources/directory_spec.rb&quot;, &quot;spec/poolparty/resources/exec_spec.rb&quot;, &quot;spec/poolparty/resources/file_spec.rb&quot;, &quot;spec/poolparty/resources/gem_spec.rb&quot;, &quot;spec/poolparty/resources/host_spec.rb&quot;, &quot;spec/poolparty/resources/package_spec.rb&quot;, &quot;spec/poolparty/resources/service_spec.rb&quot;, &quot;spec/poolparty/resources/sshkey_spec.rb&quot;, &quot;spec/poolparty/resources/symlink_spec.rb&quot;, &quot;spec/poolparty/resources/user_spec.rb&quot;, &quot;spec/poolparty/resources/variable_spec.rb&quot;, &quot;spec/poolparty/schema_spec.rb&quot;, &quot;spec/poolparty/services&quot;, &quot;spec/poolparty/services/conditional_spec.rb&quot;, &quot;spec/poolparty/spec&quot;, &quot;spec/poolparty/spec/core&quot;, &quot;spec/poolparty/spec/core/string_spec.rb&quot;, &quot;spec/poolparty/spec_helper.rb&quot;, &quot;spec/poolparty/test_spec_helper.rb&quot;, &quot;test/test_generator_helper.rb&quot;, &quot;test/test_helper.rb&quot;, &quot;test/test_pool_spec_generator.rb&quot;, &quot;test/test_poolparty.rb&quot;, &quot;tasks/cloud.rake&quot;, &quot;tasks/development.rake&quot;, &quot;tasks/ec2.rake&quot;, &quot;tasks/environment.rake&quot;, &quot;tasks/instance.rake&quot;, &quot;tasks/poolparty.rake&quot;, &quot;tasks/server.rake&quot;, &quot;tasks/spec.rake&quot;, &quot;script/destroy&quot;, &quot;script/generate&quot;, &quot;generators/poolspec&quot;, &quot;generators/poolspec/poolspec_generator.rb&quot;, &quot;generators/poolspec/templates&quot;, &quot;generators/poolspec/templates/pool_spec_template.erb&quot;, &quot;generators/poolspec/USAGE&quot;, &quot;bin/cloud&quot;, &quot;bin/cloud-add-access&quot;, &quot;bin/cloud-add-keypair&quot;, &quot;bin/cloud-bootstrap&quot;, &quot;bin/cloud-configure&quot;, &quot;bin/cloud-console&quot;, &quot;bin/cloud-contract&quot;, &quot;bin/cloud-expand&quot;, &quot;bin/cloud-handle-load&quot;, &quot;bin/cloud-list&quot;, &quot;bin/cloud-maintain&quot;, &quot;bin/cloud-osxcopy&quot;, &quot;bin/cloud-provision&quot;, &quot;bin/cloud-refresh&quot;, &quot;bin/cloud-rsync&quot;, &quot;bin/cloud-run&quot;, &quot;bin/cloud-setup-dev&quot;, &quot;bin/cloud-spec&quot;, &quot;bin/cloud-ssh&quot;, &quot;bin/cloud-start&quot;, &quot;bin/cloud-stats&quot;, &quot;bin/cloud-terminate&quot;, &quot;bin/ec2-list-active&quot;, &quot;bin/messenger-get-current-nodes&quot;, &quot;bin/pool&quot;, &quot;bin/pool-describe&quot;, &quot;bin/pool-generate&quot;, &quot;bin/pool-init&quot;, &quot;bin/pool-list&quot;, &quot;bin/pool-start&quot;, &quot;bin/server-become-master&quot;, &quot;bin/server-build-messenger&quot;, &quot;bin/server-clean-cert-for&quot;, &quot;bin/server-ensure-provisioning&quot;, &quot;bin/server-fire-cmd&quot;, &quot;bin/server-get-load&quot;, &quot;bin/server-list-active&quot;, &quot;bin/server-provision&quot;, &quot;bin/server-query-agent&quot;, &quot;bin/server-rerun&quot;, &quot;bin/server-send-command&quot;, &quot;bin/server-show-stats&quot;, &quot;bin/server-start-agent&quot;, &quot;bin/server-start-client&quot;, &quot;bin/server-start-master&quot;, &quot;bin/server-start-node&quot;, &quot;bin/server-stop-client&quot;, &quot;bin/server-stop-master&quot;, &quot;bin/server-stop-node&quot;, &quot;bin/server-update-hosts&quot;, &quot;bin/server-write-new-nodes&quot;, &quot;vendor/dependencies&quot;, &quot;vendor/dependencies/cache&quot;, &quot;vendor/dependencies/cache/activesupport-2.3.2.gem&quot;, &quot;vendor/dependencies/cache/archive-tar-minitar-0.5.2.gem&quot;, &quot;vendor/dependencies/cache/capistrano-2.5.5.gem&quot;, &quot;vendor/dependencies/cache/echoe-3.1.1.gem&quot;, &quot;vendor/dependencies/cache/flexmock-0.8.5.gem&quot;, &quot;vendor/dependencies/cache/grempe-amazon-ec2-0.3.7.gem&quot;, &quot;vendor/dependencies/cache/highline-1.5.0.gem&quot;, &quot;vendor/dependencies/cache/json-1.1.3.gem&quot;, &quot;vendor/dependencies/cache/lockfile-1.4.3.gem&quot;, &quot;vendor/dependencies/cache/logging-0.9.7.gem&quot;, &quot;vendor/dependencies/cache/net-scp-1.0.2.gem&quot;, &quot;vendor/dependencies/cache/net-sftp-2.0.2.gem&quot;, &quot;vendor/dependencies/cache/net-ssh-2.0.11.gem&quot;, &quot;vendor/dependencies/cache/net-ssh-gateway-1.0.1.gem&quot;, &quot;vendor/dependencies/cache/ParseTree-3.0.3.gem&quot;, &quot;vendor/dependencies/cache/puppet-0.24.8.gem&quot;, &quot;vendor/dependencies/cache/rake-0.8.4.gem&quot;, &quot;vendor/dependencies/cache/rdoc-2.4.2.gem&quot;, &quot;vendor/dependencies/cache/ruby2ruby-1.2.2.gem&quot;, &quot;vendor/dependencies/cache/RubyInline-3.8.1.gem&quot;, &quot;vendor/dependencies/cache/sexp_processor-3.0.1.gem&quot;, &quot;vendor/dependencies/cache/xml-simple-1.0.12.gem&quot;, &quot;vendor/dependencies/cache/ZenTest-4.0.0.gem&quot;, &quot;vendor/dependencies/packages&quot;, &quot;vendor/dependencies/packages/rubygems-1.3.1.tgz&quot;, &quot;vendor/gems&quot;, &quot;vendor/gems/dslify&quot;, &quot;vendor/gems/dslify/config&quot;, &quot;vendor/gems/dslify/config/hoe.rb&quot;, &quot;vendor/gems/dslify/config/requirements.rb&quot;, &quot;vendor/gems/dslify/dslify.gemspec&quot;, &quot;vendor/gems/dslify/History.txt&quot;, &quot;vendor/gems/dslify/lib&quot;, &quot;vendor/gems/dslify/lib/dslify&quot;, &quot;vendor/gems/dslify/lib/dslify/dslify.rb&quot;, &quot;vendor/gems/dslify/lib/dslify/version.rb&quot;, &quot;vendor/gems/dslify/lib/dslify.rb&quot;, &quot;vendor/gems/dslify/Manifest.txt&quot;, &quot;vendor/gems/dslify/PostInstall.txt&quot;, &quot;vendor/gems/dslify/Rakefile&quot;, &quot;vendor/gems/dslify/README.txt&quot;, &quot;vendor/gems/dslify/script&quot;, &quot;vendor/gems/dslify/script/console&quot;, &quot;vendor/gems/dslify/script/destroy&quot;, &quot;vendor/gems/dslify/script/generate&quot;, &quot;vendor/gems/dslify/script/txt2html&quot;, &quot;vendor/gems/dslify/setup.rb&quot;, &quot;vendor/gems/dslify/tasks&quot;, &quot;vendor/gems/dslify/tasks/deployment.rake&quot;, &quot;vendor/gems/dslify/tasks/environment.rake&quot;, &quot;vendor/gems/dslify/tasks/website.rake&quot;, &quot;vendor/gems/dslify/test&quot;, &quot;vendor/gems/dslify/test/test_dslify.rb&quot;, &quot;vendor/gems/dslify/website&quot;, &quot;vendor/gems/dslify/website/index.html&quot;, &quot;vendor/gems/dslify/website/index.txt&quot;, &quot;vendor/gems/dslify/website/javascripts&quot;, &quot;vendor/gems/dslify/website/javascripts/rounded_corners_lite.inc.js&quot;, &quot;vendor/gems/dslify/website/stylesheets&quot;, &quot;vendor/gems/dslify/website/stylesheets/screen.css&quot;, &quot;vendor/gems/dslify/website/template.html.erb&quot;, &quot;vendor/gems/parenting&quot;, &quot;vendor/gems/parenting/History.txt&quot;, &quot;vendor/gems/parenting/lib&quot;, &quot;vendor/gems/parenting/lib/parenting&quot;, &quot;vendor/gems/parenting/lib/parenting/base.rb&quot;, &quot;vendor/gems/parenting/lib/parenting.rb&quot;, &quot;vendor/gems/parenting/Manifest.txt&quot;, &quot;vendor/gems/parenting/parenting.gemspec&quot;, &quot;vendor/gems/parenting/PostInstall.txt&quot;, &quot;vendor/gems/parenting/Rakefile&quot;, &quot;vendor/gems/parenting/README.rdoc&quot;, &quot;vendor/gems/parenting/script&quot;, &quot;vendor/gems/parenting/script/console&quot;, &quot;vendor/gems/parenting/script/destroy&quot;, &quot;vendor/gems/parenting/script/generate&quot;, &quot;vendor/gems/parenting/test&quot;, &quot;vendor/gems/parenting/test/file_to_eval.rb&quot;, &quot;vendor/gems/parenting/test/test_helper.rb&quot;, &quot;vendor/gems/parenting/test/test_parenting.rb&quot;, &quot;vendor/gems/suitcase&quot;, &quot;vendor/gems/suitcase/lib&quot;, &quot;vendor/gems/suitcase/lib/suitcase&quot;, &quot;vendor/gems/suitcase/lib/suitcase/unzipper.rb&quot;, &quot;vendor/gems/suitcase/lib/suitcase/zipper.rb&quot;, &quot;vendor/gems/suitcase/lib/suitcase.rb&quot;, &quot;vendor/gems/suitcase/LICENSE&quot;, &quot;vendor/gems/suitcase/Rakefile&quot;, &quot;vendor/gems/suitcase/README.rdoc&quot;, &quot;vendor/gems/suitcase/test&quot;, &quot;vendor/gems/suitcase/test/suitcase_test.rb&quot;, &quot;vendor/gems/suitcase/test/test_dir&quot;, &quot;vendor/gems/suitcase/test/test_dir/box.rb&quot;, &quot;vendor/gems/suitcase/test/test_dir/test.txt&quot;, &quot;vendor/gems/suitcase/test/test_helper.rb&quot;]
+  s.has_rdoc = true
+  s.homepage = %q{http://poolpartyrb.com}
+  s.rdoc_options = [&quot;--quiet&quot;, &quot;--title&quot;, &quot;PoolParty documentation&quot;, &quot;--opname&quot;, &quot;index.html&quot;, &quot;--line-numbers&quot;, &quot;--main&quot;, &quot;README&quot;, &quot;--inline-source&quot;, &quot;--inline-source&quot;, &quot;--charset=UTF-8&quot;]
+  s.require_paths = [&quot;lib&quot;]
+  s.rubygems_version = %q{1.3.1}
+  s.summary = %q{Self-healing, auto-scaling system administration, provisioning and maintaining tool that makes cloud computing fun and easy}
+  s.test_files = [&quot;test/test_generator_helper.rb&quot;, &quot;test/test_helper.rb&quot;, &quot;test/test_pool_spec_generator.rb&quot;, &quot;test/test_poolparty.rb&quot;]
 
-rubyforge_project: poolparty
-rubygems_version: 1.3.1
-signing_key: 
-specification_version: 2
-summary: Self-healing, auto-scaling system administration, provisioning and maintaining tool that makes cloud computing fun and easy
-test_files: 
-- test/test_generator_helper.rb
-- test/test_helper.rb
-- test/test_pool_spec_generator.rb
-- test/test_poolparty.rb
+  if s.respond_to? :specification_version then
+    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
+    s.specification_version = 2
+
+    if Gem::Version.new(Gem::RubyGemsVersion) &gt;= Gem::Version.new('1.2.0') then
+      s.add_runtime_dependency(%q&lt;activesupport&gt;, [&quot;&gt;= 0&quot;])
+      s.add_runtime_dependency(%q&lt;logging&gt;, [&quot;&gt;= 0&quot;])
+      s.add_runtime_dependency(%q&lt;ruby2ruby&gt;, [&quot;&gt;= 0&quot;])
+      s.add_runtime_dependency(%q&lt;grempe-amazon-ec2&gt;, [&quot;&gt;= 0&quot;])
+      s.add_runtime_dependency(%q&lt;rubigen&gt;, [&quot;&gt;= 1.5.2&quot;])
+    else
+      s.add_dependency(%q&lt;activesupport&gt;, [&quot;&gt;= 0&quot;])
+      s.add_dependency(%q&lt;logging&gt;, [&quot;&gt;= 0&quot;])
+      s.add_dependency(%q&lt;ruby2ruby&gt;, [&quot;&gt;= 0&quot;])
+      s.add_dependency(%q&lt;grempe-amazon-ec2&gt;, [&quot;&gt;= 0&quot;])
+      s.add_dependency(%q&lt;rubigen&gt;, [&quot;&gt;= 1.5.2&quot;])
+    end
+  else
+    s.add_dependency(%q&lt;activesupport&gt;, [&quot;&gt;= 0&quot;])
+    s.add_dependency(%q&lt;logging&gt;, [&quot;&gt;= 0&quot;])
+    s.add_dependency(%q&lt;ruby2ruby&gt;, [&quot;&gt;= 0&quot;])
+    s.add_dependency(%q&lt;grempe-amazon-ec2&gt;, [&quot;&gt;= 0&quot;])
+    s.add_dependency(%q&lt;rubigen&gt;, [&quot;&gt;= 1.5.2&quot;])
+  end
+end</diff>
      <filename>poolparty.gemspec</filename>
    </modified>
    <modified>
      <diff>@@ -10,5 +10,5 @@ end
 require 'rubigen/scripts/destroy'
 
 ARGV.shift if ['--help', '-h'].include?(ARGV[0])
-RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
+RubiGen::Base.use_component_sources! [:rubygems]
 RubiGen::Scripts::Destroy.new.run(ARGV)</diff>
      <filename>script/destroy</filename>
    </modified>
    <modified>
      <diff>@@ -10,5 +10,5 @@ end
 require 'rubigen/scripts/generate'
 
 ARGV.shift if ['--help', '-h'].include?(ARGV[0])
-RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
+RubiGen::Base.use_component_sources! [:rubygems]
 RubiGen::Scripts::Generate.new.run(ARGV)</diff>
      <filename>script/generate</filename>
    </modified>
    <modified>
      <diff>@@ -47,16 +47,16 @@ describe &quot;Rules&quot; do
     @car.names.to_s.should == &quot;'x &gt; 0', 'y &gt; 0', 'x &gt; y'&quot;
   end
   it &quot;should be able to say that rules are defined when they are defined&quot; do
-    @car.names.should_not be_nil
+    @car.names.should_not == nil
   end
-  it &quot;should be able tos ay that rules are not defined when they are not defined&quot; do
-    @car.look_up_rules(:cars_and_wheels).should be_empty
+  it &quot;should be able to say that rules are not defined when they are not defined&quot; do
+    @car.look_up_rules(:cars_and_wheels).empty?.should == true
   end
   it &quot;should be able to say if the rules are not rules&quot; do
-    @car.are_rules?(:cars_and_wheels).should be_false
+    @car.are_rules?(:cars_and_wheels).should == false
   end
   it &quot;should be able to say that rules are rules&quot; do
-    @car.are_rules?(:names).should be_true
+    @car.are_rules?(:names).should == true
   end
   describe &quot;parsing&quot; do
     it &quot;should be able to parse the x &gt; 0 into an array&quot; do</diff>
      <filename>spec/poolparty/aska/aska_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,7 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
 describe &quot;haproxy base package&quot; do
-  before(:each) do
-    @ha = PoolPartyHaproxyClass.new do      
-    end
-    stub_list_from_remote_for(@ha)
-    @ha.stub!(:list_of_running_instances).and_return []
-  end
-  it &quot;should have the heartbeat package defined&quot; do
-    lambda {PoolPartyHaproxyClass}.should_not raise_error    
+  it &quot;should have the haproxy package defined&quot; do
+    lambda {PoolpartyBaseHaproxyClass}.should_not raise_error
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/base_packages/haproxy_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,30 +1,7 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
 describe &quot;heartbeat base package&quot; do
-  # before(:each) do
-  #   @cloud = Cloud.new(:app, self)
-  #   @hb = PoolPartyHeartbeatClass.new(@cloud)
-  #   stub_list_from_remote_for(@cloud)
-  #   stub_list_of_instances_for(@cloud)
-  # end
-  # it &quot;should have the heartbeat package defined&quot; do
-  #   lambda {PoolPartyHeartbeatClass}.should_not raise_error    
-  # end
-  # it &quot;should have a parent set to the cloud&quot; do
-  #   @hb.parent.should == @cloud
-  # end
-  # it &quot;should call enable (and setup resources) since there is no block given when it's instantiated&quot; do
-  #   @hb.resources.should_not be_empty
-  # end
-  # it &quot;should have no resources when starting with a block (that defines no methods)&quot; do
-  #   @pphc = PoolPartyHeartbeatClass.new do
-  #   end
-  #   @pphc.resources.should be_empty
-  # end
-  # it &quot;should have a file resource&quot; do
-  #   @hb.resource(:remotefile).should_not be_empty
-  # end
-  # it &quot;should have at least 3 remotefiles&quot; do
-  #   @hb.resource(:remotefile).size.should &gt;= 3
-  # end
+  it &quot;should have the heartbeat package defined&quot; do
+    lambda {PoolpartyBaseHeartbeatClass}.should_not raise_error
+  end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/base_packages/heartbeat_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -18,38 +18,21 @@ describe &quot;Console&quot; do
       pool :app do
         maximum_instances 2
         cloud :rawr do
-          maximum_instances 2
+          maximum_instances 200
         end
       end
       EOS
       self.stub!(:open).and_return @string
       @string.stub!(:read).and_return @string
+      ::File.stub!(:readable?).with(@string).and_return true
     end
     it &quot;should give you the load_pool method&quot; do
       self.respond_to?(:load_pool).should == true
     end
     it &quot;should call script inflate on the filename&quot; do      
-      PoolParty::Script.should_receive(:inflate).once
+      PoolParty::Pool::Pool.should_receive(:load_from_file).and_return &quot;wee&quot;
       load_pool(&quot;pop&quot;)
     end
-    describe &quot;calling&quot; do
-      before(:each) do
-        reset!
-        load_pool(&quot;pop&quot;)
-      end
-      it &quot;should instance_eval the string&quot; do
-        pool(:app).should_not be_nil
-      end
-      it &quot;should store the cloud inside the pool after inflating&quot; do
-        pool(:app).cloud(:rawr).should_not be_nil
-      end
-      it &quot;should say that the cloud inside the pool's parent is the containing parent&quot; do      
-        pool(:app).cloud(:rawr).parent.should == pool(:app)
-      end
-      it &quot;should say that the maximum_instances on the cloud is the containing pool's option&quot; do
-        pool(:app).cloud(:rawr).maximum_instances.should == 2
-      end
-    end
   end  
   describe &quot;reload!&quot; do
     before(:each) do
@@ -78,7 +61,7 @@ describe &quot;Console&quot; do
       }
     end
     it &quot;should call inflate from Script with the poolspec&quot; do
-      PoolParty::Script.should_receive(:inflate).with(&quot;spec contents&quot;, &quot;myspec.spec&quot;).and_return true
+      PoolParty::Pool::Pool.should_receive(:load_from_file).with(&quot;myspec.spec&quot;).and_return true
       load_pool(@filename)
     end
   end
@@ -94,10 +77,10 @@ describe &quot;Console&quot; do
       EOS
       self.stub!(:open).and_return @string
       @string.stub!(:read).and_return @string
-      load_pool(&quot;pop&quot;)
+      PoolParty::Pool::Pool.new(:dummy).instance_eval @string
     end
     it &quot;should be able to print the clouds&quot; do      
-      pools.should_not be_empty
+      pools.empty?.should == false
       hide_output do
         pool_describe.should == pools.size
       end      </diff>
      <filename>spec/poolparty/bin/console_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,9 +23,24 @@ describe &quot;Array&quot; do
       @array.to_os
     end
   end
-  describe &quot;to_option_string&quot; do
-    it &quot;should map the to_option_strings in an array of strings&quot; do
-      [&quot;hi&quot;, &quot;be&quot;].to_option_string.should == &quot;[ 'hi', 'be' ]&quot;
+  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+
+  describe &quot;select_with_hash&quot; do
+    before(:all) do
+      @remote_instances_list =[
+        {:status=&gt;'running', :ip=&gt;'10'}, 
+        {:status =&gt; 'pending', :ip=&gt;'not.assigned'}, 
+        {:status=&gt;'running', :ip=&gt;'192', :bogus=&gt;nil} 
+      ]
+    end
+    it &quot;should return the selected array&quot; do
+        @remote_instances_list.select_with_hash( {:status =&gt; 'running'}).size.should == 2
+        @remote_instances_list.select_with_hash( {:ip =&gt; 'not.assigned'}).should == [{:status =&gt; 'pending', :ip=&gt;'not.assigned'},]
+        @remote_instances_list.select_with_hash( {:bogus =&gt; nil}).size.should == 1
+        @remote_instances_list.select_with_hash().size.should == 0
+    end
+    it &quot;should not raise an error if element does not have key&quot; do
+      @remote_instances_list.select_with_hash( {:snot =&gt; 'runny'}).size.should == 0
     end
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/core/array_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -24,50 +24,44 @@ describe &quot;Hash&quot; do
   it &quot;should be able to turn itself into an open struct with the method to_hash on the object&quot; do
     @a.to_os.to_hash.should == @a
   end
-  it &quot;should not put quotes around integers&quot; do
-    {:a =&gt; 10, :b =&gt; &quot;q&quot;}.flush_out.sort.should == [&quot;a =&gt; 10&quot;, &quot;b =&gt; 'q'&quot;]
-  end
-  it &quot;should be able to flush out into a string into an array&quot; do
-    @a.flush_out.sort.should == [&quot;a =&gt; '10'&quot;,&quot;b =&gt; '20'&quot;,&quot;c =&gt; '30'&quot;]
-  end
-  it &quot;should be able to flush out with pre and posts&quot; do
-    @a.flush_out(&quot;hi&quot;, &quot;ho&quot;).sort.should == [&quot;hia =&gt; '10'ho&quot;,&quot;hib =&gt; '20'ho&quot;,&quot;hic =&gt; '30'ho&quot;]
-  end
   describe &quot;method_missing&quot; do
     it &quot;should be able to call a key on the hash as a method&quot; do
       {:first_name =&gt; &quot;bob&quot;, :last_name =&gt; &quot;frank&quot;}.first_name.should == &quot;bob&quot;
     end
     it &quot;should return nil if there is no key set in the hash&quot; do
-        {:first_name =&gt; &quot;bob&quot;, :last_name =&gt; &quot;frank&quot;}.neighbor.should == nil
+      {:first_name =&gt; &quot;bob&quot;, :last_name =&gt; &quot;frank&quot;}.neighbor.should == nil
     end
   end
-  describe &quot;select&quot; do
+  describe &quot;choose&quot; do
     before(:each) do
-      @selected_hash = @a.select {|k,v| k if k == :a}
+      @selected_hash = @a.choose {|k,v| k if k == :a}
     end
-    it &quot;should return a hash when selecting&quot; do
+    it &quot;should return a hash when choosing&quot; do
       @selected_hash.class.should == Hash
     end
-    it &quot;should only have the key a (selected)&quot; do
+    it &quot;should only have the key a (choos)&quot; do
       @selected_hash.keys.should == [:a]
     end
   end
-  describe &quot;extract!&quot; do
-    before(:each) do
-      @rejected_hash = @a.extract! {|k,v| k == :a }
-    end
-    it &quot;should have a reject with the keys&quot; do
-      @rejected_hash.keys.should == [:a]
-    end
-    it &quot;should return the old array with the other keys&quot; do
-      @a.keys.sort.should == [:b, :c]
-    end
-    it &quot;should not throw a fit with an empty hash&quot; do
-      lambda {
-        {}.extract!
-      }.should_not raise_error
-    end
-  end
+  #TODO: deprecate
+  # describe &quot;extract!&quot; do
+  #   before(:each) do
+  #     @rejected_hash = @a.extract! {|k,v| k == :a }
+  #   end
+  #   it &quot;should have a reject with the keys&quot; do
+  #     @rejected_hash.keys.should == [:a]
+  #   end
+  #   it &quot;should return the old array with the other keys&quot; do
+  #     @a.keys.sort.should == [:b, :c]
+  #   end
+  #   it &quot;should not throw a fit with an empty hash&quot; do
+  # {}.extract!
+  #       lambda {
+  #       {}.extract!
+  #     }.should_not raise_error
+  #   end
+  # end
+ 
   describe &quot;append&quot; do
     before(:each) do
       @hash = {:game =&gt; &quot;token&quot;, :required =&gt; &quot;for_play&quot;}</diff>
      <filename>spec/poolparty/core/hash_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -42,8 +42,7 @@ describe &quot;Object&quot; do
     describe &quot;running&quot; do
       before(:each) do
         Class.stub!(:default_options).and_return({})
-        Class.send :include, Configurable
-        Class.send :include, MethodMissingSugar
+        Class.send :include, Dslify
         @a = Class.new        
         @b = Class.new
         
@@ -59,7 +58,7 @@ describe &quot;Object&quot; do
     describe &quot;contextual running&quot; do
       before(:each) do
         @obj.stub!(:default_options).and_return {}
-        @a = @obj.run_in_context { @a = &quot;hello world&quot; }
+        @a = @obj.instance_eval { @a = &quot;hello world&quot; }
       end
       it &quot;should have the method meta_eval&quot; do
         @obj.respond_to?(:meta_eval).should == true</diff>
      <filename>spec/poolparty/core/object_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -119,33 +119,7 @@ listen web_proxy 127.0.0.1:3000
       &quot;file&quot;.camelcase.should == &quot;File&quot;
     end
   end
-  describe &quot;to_option_string&quot; do
-    it &quot;should not touch a string, but return the string with single quotes&quot; do
-      &quot;rocks&quot;.to_option_string.should == &quot;'rocks'&quot;
-    end
-    it &quot;should return a string of the format Service[nagios] with no single quotes&quot; do
-      &quot;Service[nagios]&quot;.to_option_string.should == &quot;Service[nagios]&quot;
-    end
-    it &quot;should also return a string if there is a string within the string&quot; do
-      'Package[&quot;heartbeat-2&quot;]'.to_option_string.should == 'Package[&quot;heartbeat-2&quot;]'
-    end
-    it &quot;should return File['/etc/apache2/conf.d/base.conf'] as a string&quot; do
-      'File[&quot;/etc/apache2/conf.d/base.conf&quot;]'.to_option_string.should == &quot;File[\&quot;/etc/apache2/conf.d/base.conf\&quot;]&quot;
-    end
-    it &quot;should turn a resource into a requires file&quot; do
-      @cloud = cloud :app do
-        file(:name =&gt; &quot;franke&quot;)
-      end
-      @file = @cloud.resource(:file).first
-      @file.to_option_string.should == &quot;File['franke']&quot;
-    end
-    it &quot;should turn a function into a string without quotes&quot; do
-      &quot;active_nodes()&quot;.to_option_string.should == &quot;active_nodes()&quot;
-    end
-    it &quot;should turna function into a string outsid ethe quotes with a parameter&quot; do
-      &quot;active_nodes(10)&quot;.to_option_string.should == &quot;active_nodes(10)&quot;
-    end
-  end
+  
   describe &quot;sanitize&quot; do
     it &quot;should remove the periods from the string&quot; do
       &quot;xnot.org&quot;.sanitize.should == &quot;xnotorg&quot;</diff>
      <filename>spec/poolparty/core/string_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+#TODO: Reimplement
 require File.dirname(__FILE__) + '/../spec_helper'
 
 describe &quot;deployments&quot; do
@@ -19,19 +20,22 @@ describe &quot;deployments&quot; do
         @contents = &quot;'hello goober'&quot;
         @klass.stub!(:open).with(@file).and_return @file
         @file.stub!(:read).and_return @contents
+        @klass.include_deployment(@file).should_not == nil
       end
       it &quot;should not be nil if the file does exist&quot; do        
         @klass.include_deployment(@file).should_not == nil
       end
       it &quot;should create a class called PoolPartyHankyDankyRankyClass&quot; do
-        @klass.include_deployment(@file).should_not == nil
-        Object.const_defined?(:PoolPartyHankyDankyRankyClass).should == true
+        @klass.include_deployment(@file).nil?.should == false
+        Object.const_defined?(:HankyDankyRankyClass).should == true
       end
       it &quot;should create a method on the class called enable&quot; do
-        PoolPartyHankyDankyRankyClass.new.respond_to?(:enable).should == true
+        HankyDankyRankyClass.new.respond_to?(:enable).should == true
       end
       it &quot;should add the contents of the file to be eval'd on the method&quot; do
-        PoolPartyHankyDankyRankyClass.new.enable.should == &quot;hello goober&quot;
+        # puts HankyDankyRankyClass.new.enable
+        # HankyDankyRankyClass.new.enable.should == &quot;hello goober&quot;
+        pending
       end
     end
     describe &quot;include_deployments&quot; do
@@ -52,7 +56,7 @@ describe &quot;deployments&quot; do
           Dir.stub!(:[]).and_return @contents
         end
         it &quot;should not be nil if the directory exists&quot; do
-          @klass.include_deployments(@dir).should_not == nil
+          @klass.include_deployments(@dir).nil?.should == false
         end
         it &quot;should call Dir.[] on the directory&quot; do
           Dir.should_receive(:[]).with(&quot;#{@dir}/*&quot;).and_return []</diff>
      <filename>spec/poolparty/extra/deployments_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -17,7 +17,7 @@ describe &quot;Binary&quot; do
   describe &quot;get_existing_spec_location&quot; do
     before(:each) do
       ::File.stub!(:readable?).and_return false
-      ::File.stub!(:readable?).with(&quot;#{Base.storage_directory}/clouds.rb&quot;).and_return true
+      ::File.stub!(:readable?).with(&quot;/etc/poolparty/clouds.rb&quot;).and_return true
     end
     it &quot;should be a String&quot; do
       Binary.get_existing_spec_location.class.should == String
@@ -33,6 +33,7 @@ describe &quot;Binary&quot; do
     end
     it &quot;should call Dir[Dir.pwd] if there is no filename given&quot; do      
       Dir.should_receive(:[]).with(&quot;#{Dir.pwd}/*/clouds.rb&quot;).and_return [&quot;clouds.rb&quot;]
+      ::File.stub!(:open).with(&quot;/var/poolparty/clouds.rb&quot;, 'r').and_return &quot;wee&quot;
       Binary.load_pool
     end
   end</diff>
      <filename>spec/poolparty/helpers/binary_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,7 +14,7 @@ describe &quot;Option Parser&quot; do
       @op.verbose.should == false
     end
     it &quot;should call a method called on it that is not defined on the options if they exist&quot; do
-      @op.options.should_receive(:[]).with(:verbose).once.and_return true
+      @op.dsl_options.should_receive(:[]).with(:verbose).at_least(1).and_return true
       @op.verbose
     end
     it &quot;should exit after displaying the help message&quot; do</diff>
      <filename>spec/poolparty/helpers/optioner_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,26 +1,11 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
-class ResourcerTestClass
-  include CloudResourcer
-  include Configurable
-  
+class ResourcerTestClass &lt; PoolParty::Cloud::Cloud  
   default_options({
     :minimum_runtime =&gt; 50.minutes
   })
-  
-  def initialize(&amp;block)
-    store_block(&amp;block) if block
-  end
-  
-  # Stub keypair
-  def keypair
-    &quot;rangerbob&quot;
-  end
 end
-class TestParentClass
-  def options
-    {}
-  end
+class TestParentClass &lt; PoolParty::Cloud::Cloud  
   def services
     @services ||= []
   end
@@ -30,7 +15,8 @@ class TestParentClass
 end
 describe &quot;CloudResourcer&quot; do
   before(:each) do
-    @tc = ResourcerTestClass.new
+    @tc = ResourcerTestClass.new :bank do
+    end
   end
   it &quot;should have the method instances&quot; do
     @tc.respond_to?(:instances).should == true
@@ -49,103 +35,32 @@ describe &quot;CloudResourcer&quot; do
     @tc.maximum_instances.should == 10
   end
   it &quot;should have default minimum_runtime of 50 minutes (3000 seconds)&quot; do
-    Base.stub!(:minimum_runtime).and_return 50.minutes
+    Default.stub!(:minimum_runtime).and_return 50.minutes
     @tc.minimum_runtime.should ==  50.minutes
   end
   it &quot;should have minimum_runtime&quot; do
     @tc.minimum_runtime 40.minutes
     @tc.minimum_runtime.should == 40.minutes
   end
-  describe &quot;keypair_path&quot; do
-    before(:each) do
-    end
-    it &quot;should look for the file in the known directories it should reside in&quot; do
-      @tc.should_receive(:keypair_paths).once.and_return []
-      @tc.keypair_path
-    end
-    it &quot;should see if the file exists&quot; do
-      @t = &quot;#{File.expand_path(Base.base_keypair_path)}&quot;
-      ::File.should_receive(:exists?).with(@t+&quot;/id_rsa-rangerbob&quot;).and_return false
-      ::File.stub!(:exists?).with(@t+&quot;/rangerbob&quot;).and_return false
-      @tc.should_receive(:keypair_paths).once.and_return [@t]
-      @tc.keypair_path
-    end
-    it &quot;should fallback to the second one if the first doesn't exist&quot; do
-      @t = &quot;#{File.expand_path(Base.base_keypair_path)}&quot;
-      @q = &quot;#{File.expand_path(Base.base_config_directory)}&quot;
-      ::File.stub!(:exists?).with(@t+&quot;/id_rsa-rangerbob&quot;).and_return false
-      ::File.stub!(:exists?).with(@t+&quot;/rangerbob&quot;).and_return false
-      ::File.stub!(:exists?).with(@q+&quot;/id_rsa-rangerbob&quot;).and_return false
-      ::File.should_receive(:exists?).with(@q+&quot;/rangerbob&quot;).and_return true
-      @tc.should_receive(:keypair_paths).once.and_return [@t, @q]
-      @tc.keypair_path.should == &quot;/etc/poolparty/rangerbob&quot;
-    end
-    describe &quot;exists&quot; do
-      before(:each) do
-        @t = &quot;#{File.expand_path(Base.base_keypair_path)}&quot;
-        ::File.stub!(:exists?).with(@t+&quot;/id_rsa-rangerbob&quot;).and_return false
-        ::File.stub!(:exists?).with(@t+&quot;/rangerbob&quot;).and_return true
-      end
-      it &quot;should have the keypair_path&quot; do
-        @tc.respond_to?(:keypair_path).should == true
-      end
-      it &quot;should set the keypair to the Base.keypair_path&quot; do      
-        @tc.keypair_path.should =~ /\.ec2\/rangerbob/
-      end
-      it &quot;should set the keypair to have the keypair set&quot; do
-        @tc.keypair.should =~ /rangerbob/
-      end
-      it &quot;should set it to the Base keypair_path and the keypair&quot; do
-        @tc.keypair_path.should == &quot;#{File.expand_path(Base.base_keypair_path)}/#{@tc.keypair}&quot;
-      end
-    end
-  end
-  it &quot;should provide set_parent&quot; do
-    @tc.respond_to?(:set_parent).should == true
-  end
   describe &quot;parents&quot; do
     before(:each) do
-      @testparent = TestParentClass.new
-    end
-    describe &quot;setting&quot; do
-      it &quot;should add the child to its services&quot; do
-        @testparent.should_receive(:add_service)
-      end
-      it &quot;should call configure with options&quot; do
-        @tc.should_receive(:configure).with(@testparent.options)      
-      end
-      after do
-        @tc.run_setup(@testparent)
-      end      
-    end
-    describe &quot;parent's services&quot; do
-      before(:each) do        
-        @tc.run_setup(@testparent)        
-      end
-      it &quot;should set the parent&quot; do
-        @tc.parent.should == @testparent
-      end
-      it &quot;should have one service set&quot; do
-        @testparent.services.size.should == 1
-      end
-      it &quot;should have the child in the parent's services&quot; do
-        @testparent.services.first.should == @tc
-      end
-    end
-    describe &quot;storing block&quot; do
-      before(:each) do
-        @new_tc = ResourcerTestClass.new do
-          &quot;hi&quot;
+      @testparent = 
+      TestParentClass.new(:parent_of_bob) do
+        test_option &quot;blankity blank blank&quot;
+        
+        ResourcerTestClass.new :bob do
         end
       end
-      it &quot;should store the block when creating a new one&quot; do
-        @new_tc.store_block.should_not == nil
-      end
-      it &quot;should have a reference to the stored block&quot; do
-        @new_tc.store_block.class.should == Proc
-      end
-      it &quot;should store the containing block&quot; do
-        @new_tc.store_block.call.should == &quot;hi&quot;
+      describe &quot;setting&quot; do
+        it &quot;set 1 service on the parent class&quot; do
+          @testparent.services.size.should == 1
+        end
+        it &quot;set the service as a ResourcerTestClass named bob&quot; do
+          @testparent.services.first.name.should == :bob
+        end
+        it &quot;set the parent's options on the child&quot; do
+          @testparent.services.first.test_option.should == &quot;blankity blank blank&quot;
+        end
       end
     end
   end</diff>
      <filename>spec/poolparty/modules/cloud_resourcer_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
 
 include PoolParty::DefinableResource
 
-describe &quot;define_resource&quot; do
+context &quot;define_resource&quot; do
   it &quot;should have the method define_resource available&quot; do
     self.respond_to?(:define_resource).should == true
   end</diff>
      <filename>spec/poolparty/modules/definable_resource.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@ describe &quot;FileWriter&quot; do
   before(:each) do
     @test = TestClass.new
     @filepath = File.join(&quot;nilly.rb&quot;)
-    @path = File.join(Base.storage_directory, @filepath)
+    @path = File.join(Default.storage_directory, @filepath)
   end
   %w(write_to_file_in_storage_directory copy_file_to_storage_directory write_to_temp_file).each do |method|
     eval &lt;&lt;-EOE
@@ -16,8 +16,8 @@ describe &quot;FileWriter&quot; do
     end
     EOE
   end
-  it &quot;should copy the file to the Base.storage_directory when calling copy_file_to_storage_directory&quot; do
-    FileUtils.should_receive(:cp).with(&quot;ranger&quot;, Base.storage_directory+&quot;/ranger&quot;).and_return true
+  it &quot;should copy the file to the Default.storage_directory when calling copy_file_to_storage_directory&quot; do
+    FileUtils.should_receive(:cp).with(&quot;ranger&quot;, Default.storage_directory+&quot;/ranger&quot;).and_return true
     @test.copy_file_to_storage_directory(&quot;ranger&quot;)
   end
   describe &quot;write to file in storage directory&quot; do
@@ -37,7 +37,7 @@ describe &quot;FileWriter&quot; do
     end
     it &quot;should write the string in the file&quot; do
       @test.write_to_file_in_storage_directory(@filepath, &quot;STRING TO WRITE&quot;)
-      open(::File.join( Base.storage_directory, @filepath)).read.should == &quot;STRING TO WRITE&quot;
+      open(::File.join( Default.storage_directory, @filepath)).read.should == &quot;STRING TO WRITE&quot;
     end
     after do
       @test.write_to_file_in_storage_directory(@filepath, &quot;STRING TO WRITE&quot;)
@@ -54,7 +54,7 @@ describe &quot;FileWriter&quot; do
   end
   describe &quot;cleanup_storage_directory&quot; do
     it &quot;should call rm_rf on the FileUtils class with the storage_directory&quot; do
-      ::FileUtils.should_receive(:rm_rf).with(&quot;#{Base.storage_directory}&quot;).and_return true
+      ::FileUtils.should_receive(:rm_rf).with(&quot;#{Default.storage_directory}&quot;).and_return true
       @test.cleanup_storage_directory
     end
   end</diff>
      <filename>spec/poolparty/modules/file_writer_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
 
 class TestMonitorClass
   include PoolParty::Monitors
-  include Configurable
+  include Dslify
   def default_options
     {}
   end</diff>
      <filename>spec/poolparty/monitors/base_monitor_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,7 @@ include PoolParty::Monitors
 describe &quot;CpuMonitor&quot; do
   before(:each) do
     @mon = CpuMonitor.new
+    @mon.stub!(:run).and_return 0.5
   end
   it &quot;should have the singleton method run defined&quot; do
     CpuMonitor.respond_to?(:run).should == true</diff>
      <filename>spec/poolparty/monitors/monitors/cpu_monitor_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,81 +1,17 @@
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.join(File.dirname(__FILE__), '/../spec_helper')
 
-include Remote
-include Aska
+include PoolParty::Remote
+# include Aska
 
 describe &quot;Remote Instance&quot; do
   before(:each) do
     setup
     @valid_hash = {:ip =&gt; &quot;127.0.0.1&quot;, :name =&gt; &quot;master&quot;, :responding =&gt; &quot;true&quot;}
   end
-  describe &quot;configurable&quot; do
-    it &quot;should set the options sent in the options&quot; do
-      @ri = RemoteInstance.new(@valid_hash, nil)
-      @ri.ip.should == &quot;127.0.0.1&quot;
-    end
-    it &quot;should set the options sent by the parent&quot; do
-      @obj = Object.new
-      @obj.stub!(:options).and_return({:dude =&gt; &quot;tte&quot;})
-      @ri = RemoteInstance.new(@valid_hash, @obj)
-      @ri.dude.should == &quot;tte&quot;
-    end
-    it &quot;should not overwrite the options that are already set&quot; do
-      @obj = Object.new
-      @obj.stub!(:options).and_return({:ip =&gt; &quot;172.176.0.1&quot;})
-      @ri = RemoteInstance.new(@valid_hash, @obj)
-      @ri.ip.should == &quot;127.0.0.1&quot;
-    end
-  end
-  it &quot;should create a remote instance with a Hash&quot; do
-    @ri = RemoteInstance.new(@valid_hash, nil)
-    @ri.valid?.should == true
-  end
-  it &quot;should not be valid if there is no ip associated&quot; do
-    @ri = RemoteInstance.new(@valid_hash.merge({:ip =&gt; nil}), nil)
-    @ri.valid?.should == false
-  end
-  it &quot;should not be valid if there is no name associated&quot; do
-    @ri = RemoteInstance.new(@valid_hash.merge({:name =&gt; nil}), nil)
-    @ri.valid?.should == false
-  end
-  describe &quot;status&quot; do
-    it &quot;should say it is running when the status == running&quot; do
-      RemoteInstance.new(@valid_hash.merge(:status =&gt; &quot;running&quot;)).running?.should == true
-    end
-    it &quot;should say it is pending when the status == pending&quot; do
-      RemoteInstance.new(@valid_hash.merge(:status =&gt; &quot;pending&quot;)).pending?.should == true
-    end
-    it &quot;should say it is terminating when the status == shutting down&quot; do
-      RemoteInstance.new(@valid_hash.merge(:status =&gt; &quot;shutting down&quot;)).terminating?.should == true
-    end
-    it &quot;should say it is terminated when the status == terminated&quot; do
-      RemoteInstance.new(@valid_hash.merge(:status =&gt; &quot;terminated&quot;)).terminated?.should == true
-    end
-    it &quot;should not say it is running when it is pending&quot; do
-      RemoteInstance.new(@valid_hash.merge(:status =&gt; &quot;pending&quot;), nil).running?.should == false
-    end
-  end
-  describe &quot;methods&quot; do
-    before(:each) do
-      @ri = RemoteInstance.new(@valid_hash, nil)
-    end
-    it &quot;should give the elapsed time&quot; do
-      @ri.stub!(:launching_time).and_return(30.minutes.ago)
-      @ri.elapsed_runtime.should be &gt;= 1800
-    end
-    it &quot;should be say that it is the master if the name is master&quot; do
-      @ri.name.should == &quot;master&quot;
-      @ri.master?.should == true
-    end
-    it &quot;should say that it is responding? if responding is not nil&quot; do
-      @ri.responding.should_not be_nil
-      @ri.responding?.should == true
-    end
-    it &quot;should have the puppet_runner_command&quot; do
-      @ri.respond_to?(:puppet_runner_command).should == true
-    end
-    it &quot;should return the puppet_runner_command with puppetd&quot; do
-      @ri.puppet_runner_command.should =~ /puppetrun/
-    end
+
+  it &quot;should have tests for the abstaract RemoteInstance class&quot; do
+    pending
   end
-end
\ No newline at end of file
+  
+ 
+end</diff>
      <filename>spec/poolparty/net/remote_instance_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,29 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 require &quot;ftools&quot;
 
-module Hype
+class PoolParty::Remote::Hype &lt; PoolParty::Remote::RemoterBase
   def hyper
     &quot;beatnick&quot;
   end
-  def instances_list
+  def self.describe_instances(o={})
     []
   end
-  register_remote_base :Hype
+  def instances_list
+    []
+  end  
+end
+
+class PoolParty::Remote::HypeRemoteInstance &lt; PoolParty::Remote::RemoteInstance
 end
 
+PoolParty::Remote.register_remote_base :Hype
+
 describe &quot;Remote&quot; do
   before(:each) do
     @cloud = cloud :test_cloud do;end
-    
-    @tc = TestClass.new
+    @tc = TestRemoterClass.new
     @tc.stub!(:verbose).and_return false
-    setup
+    setup 
   end
   it &quot;should have the method 'using'&quot; do
     @tc.respond_to?(:using).should == true
@@ -26,12 +32,13 @@ describe &quot;Remote&quot; do
     @tc.instance_eval do
       @remote_base = nil
     end
-    @tc.should_receive(:extend).with(&quot;Hype&quot;.preserved_module_constant).once
     @tc.using :hype
+    @tc.remote_base.class ==&quot;Hype&quot;.class_constant
   end
   it &quot;should keep a list of the remote_bases&quot; do
     @tc.stub!(:remote_bases).and_return [:ec2, :hype]
-    @tc.available_bases.should == [:ec2, :hype]
+    @tc.available_bases.include?(:ec2).should == true
+    @tc.available_bases.include?(:hype).should == true
   end
   it &quot;should be able to register a new base&quot; do
     @tc.remote_bases.should_receive(:&lt;&lt;).with(:hockey).and_return true
@@ -52,42 +59,40 @@ describe &quot;Remote&quot; do
       @tc.should_receive(:using_remoter?).once
       @tc.using :hype
     end
-    it &quot;should only include the remote class once&quot; do
-      @tc.instance_eval do
-        @remote_base = nil
-      end
-      @tc.should_receive(:extend).with(Hype).once
-      @tc.using :hype
-      @tc.using :hype
-      @tc.using :hype
-    end
   end
   describe &quot;after using&quot; do
     before(:each) do
-      @tc = TestClass.new
-      stub_list_from_remote_for(@tc, false)
-      @tc.using :hype
+      @hype_cloud = TestCloud.new do
+        using :hype
+      end
+      stub_list_from_remote_for(@hype_cloud, false)
+    end
+    it &quot;should set the remote_base as an instance of the remoter base&quot; do
+      @hype_cloud.remote_base.class.should == Hype
     end
     it &quot;should now have the methods available from the module&quot; do
-      @tc.respond_to?(:hyper).should == true
+      lambda {
+        @hype_cloud.hyper
+      }.should_not raise_error
     end
     it &quot;should raise an exception because the launch_new_instance! is not defined&quot; do
       lambda {
-        @tc.launch_new_instance!
-      }.should raise_error
+           @tc.launch_new_instance!
+         }.should raise_error
     end
     it &quot;should not raise an exception because instances_list is defined&quot; do
+      @hype_cloud.remote_instances_list
       lambda {
-        @tc.remote_instances_list
+        @hype_cloud.remote_instances_list
       }.should_not raise_error
     end
     it &quot;should run hyper&quot; do
-      @tc.hyper.should == &quot;beatnick&quot;
+      @hype_cloud.hype.hyper.should == &quot;beatnick&quot;
     end
   end
   describe &quot;methods&quot; do
     before(:each) do
-      @tc = TestClass.new
+      @tc = TestClass.new      
       @tc.using :ec2
       
       @tc.reset!
@@ -134,6 +139,7 @@ describe &quot;Remote&quot; do
     end
     describe &quot;can_start_a_new_instance?&quot; do
       it &quot;should be true because the maximum instances are not running&quot; do
+        @tc.stub!(:list_of_pending_instances).and_return [&quot;none&quot;]
         @tc.can_start_a_new_instance?.should == false
       end
       it &quot;should say that we cannot start a new instance because we are at the maximum instances&quot; do
@@ -154,23 +160,6 @@ describe &quot;Remote&quot; do
         @tc.maximum_number_of_instances_are_not_running?.should == false
       end
     end
-    describe &quot;request_launch_one_instance_at_a_time&quot; do
-      before(:each) do
-        @tc.stub!(:wait).and_return &quot;true&quot;
-        remove_stub_instance_from(@tc, 3)
-        remove_stub_instance_from(@tc, 5)
-        @tc.stub!(:launch_new_instance!).and_return {}
-      end
-      it &quot;should call reset! once&quot; do
-        @tc.should_receive(:reset!).once
-        @tc.request_launch_one_instance_at_a_time
-      end
-      it &quot;should not call wait if there are no pending instances&quot; do
-        Kernel.should_not_receive(:sleep)
-        @tc.request_launch_one_instance_at_a_time
-      end
-      # TODO: Stub methods with wait
-    end
     describe &quot;launch_minimum_number_of_instances&quot; do
       it &quot;should not call minimum_number_of_instances_are_running? if if cannot start a new instance&quot; do
         @tc.stub!(:can_start_a_new_instance?).and_return false
@@ -180,13 +169,18 @@ describe &quot;Remote&quot; do
       # TODO: Stub methods with wait
     end
     describe &quot;request_termination_of_non_master_instance&quot; do
+      before(:each) do
+        @inst = &quot;last instance of the pack&quot;
+        @inst.stub!(:instance_id).and_return &quot;12345&quot;
+        @tc.stub!(:nonmaster_nonterminated_instances).and_return [@inst]
+      end
       it &quot;should reject the master instance from the list of instances (we should never shut down the master unless shutting down the cloud)&quot; do
         @master = @tc.list_of_running_instances.select {|a| a.master? }.first
         @tc.should_not_receive(:terminate_instance!).with(@master).and_return true
         @tc.request_termination_of_non_master_instance
       end
       it &quot;should call terminate on an instance&quot; do
-        @tc.should_receive(:terminate_instance!).once
+        @tc.should_receive(:terminate_instance!).with(&quot;12345&quot;).and_return true
         @tc.request_termination_of_non_master_instance
       end
     end
@@ -205,44 +199,45 @@ describe &quot;Remote&quot; do
         @tc.stub!(:run_command_on).and_return true
         @tc.stub!(:full_keypair_path).and_return &quot;true&quot;
       end
-      describe &quot;expand_cloud_if_necessary&quot; do
-        before(:each) do
-          setup
-          stub_list_from_remote_for(@tc)
-          @ri = PoolParty::Remote::RemoteInstance.new(:ip =&gt; &quot;127.0.0.1&quot;, :num =&gt; 1, :name =&gt; &quot;master&quot;)
-          @tc.stub!(:request_launch_new_instances).and_return @ri
-          @tc.stub!(:can_start_a_new_instance).and_return true
-          @tc.stub!(:list_of_pending_instances).and_return []
-          @tc.stub!(:prepare_for_configuration).and_return true
-          @tc.stub!(:build_and_store_new_config_file).and_return true          
-          PoolParty::Provisioner.stub!(:provision_slaves).and_return true
-          @cloud.stub!(:master).and_return @ri
-          @cloud.stub!(:list_of_nonterminated_instances).and_return [@ri]
-          @cloud.stub!(:full_keypair_path).and_return &quot;keyairs&quot;
-          
-          @provisioner = PoolParty::Provisioner::Capistrano.new(@ri, @cloud, :ubuntu)
-          PoolParty::Provisioner::Capistrano.stub!(:new).and_return @provisioner
-          @provisioner.stub!(:install).and_return true
-          @provisioner.stub!(:configure).and_return true
-        end
-        it &quot;should receive can_start_a_new_instance?&quot; do
-          @tc.should_receive(:can_start_a_new_instance?).once
-        end
-        it &quot;should see if we should expand the cloud&quot; do
-          @tc.should_receive(:can_expand_cloud?).once.and_return false
-        end
-        it &quot;should call request_launch_new_instances if we can_expand_cloud?&quot; do
-          @tc.should_receive(:can_expand_cloud?).once.and_return true
-          @tc.should_receive(:request_launch_one_instance_at_a_time).once.and_return [{:ip =&gt; &quot;127.0.0.5&quot;, :name =&gt; &quot;node2&quot;}]
-        end
-        it &quot;should call a new slave provisioner&quot; do
-          @tc.stub!(:can_expand_cloud?).once.and_return true
-          @provisioner.should_receive(:install).at_least(1)
-        end
-        after(:each) do
-          @tc.expand_cloud_if_necessary
-        end
-      end
+      # describe &quot;expand_cloud_if_necessary&quot; do
+      #   before(:each) do
+      #     setup
+      #     stub_list_from_remote_for(@tc)
+      #     @ri = PoolParty::Remote::RemoteInstance.new(:ip =&gt; &quot;127.0.0.1&quot;, :num =&gt; 1, :name =&gt; &quot;master&quot;)
+      #     @tc.stub!(:request_launch_new_instances).and_return @ri
+      #     @tc.stub!(:can_start_a_new_instance).and_return true
+      #     @tc.stub!(:list_of_pending_instances).and_return []
+      #     @tc.stub!(:prepare_for_configuration).and_return true
+      #     @tc.stub!(:build_and_store_new_config_file).and_return true          
+      #     PoolParty::Provisioner.stub!(:provision_slaves).and_return true
+      #     @cloud.stub!(:master).and_return @ri
+      #     @cloud.stub!(:list_of_nonterminated_instances).and_return [@ri]
+      #     @cloud.stub!(:full_keypair_path).and_return &quot;keyairs&quot;
+      #     
+      #     @provisioner = PoolParty::Provisioner::Capistrano.new(@ri, @cloud, :ubuntu)
+      #     PoolParty::Provisioner::Capistrano.stub!(:new).and_return @provisioner
+      #     @provisioner.stub!(:install).and_return true
+      #     @provisioner.stub!(:configure).and_return true
+      #   end
+      #   it &quot;should receive can_start_a_new_instance?&quot; do
+      #     @tc.should_receive(:can_start_a_new_instance?).once
+      #   end
+      #   it &quot;should see if we should expand the cloud&quot; do
+      #     @tc.should_receive(:can_expand_cloud?).once.and_return false
+      #   end
+      #   it &quot;should call request_launch_new_instances if we can_expand_cloud?&quot; do
+      #     @tc.should_receive(:can_expand_cloud?).once.and_return true
+      #     @tc.should_receive(:request_launch_one_instance_at_a_time).once.and_return [{:ip =&gt; &quot;127.0.0.5&quot;, :name =&gt; &quot;node2&quot;}]
+      #   end
+      #   it &quot;should call a new slave provisioner&quot; do
+      #     @tc.stub!(:can_expand_cloud?).once.and_return true
+      #     @provisioner.should_receive(:install).at_least(1)
+      #   end
+      #   after(:each) do
+      #     @tc.expand_cloud_if_necessary
+      #   end
+      # end
+      
       describe &quot;contract_cloud_if_necessary&quot; do
         before(:each) do
           @tc.stub!(:request_termination_of_non_master_instance).and_return true
@@ -270,36 +265,23 @@ describe &quot;Remote&quot; do
       before(:each) do
         Kernel.stub!(:system).and_return true
         @tc.extend CloudResourcer        
-        @tc.stub!(:keypair_path).and_return &quot;~/.ec2/fake_keypair&quot;
         @obj = Object.new
         @obj.stub!(:ip).and_return &quot;192.168.0.1&quot;
       end
       it &quot;should call exec on the kernel&quot; do
-        @tc.stub!(:keypair).and_return &quot;funky&quot;
-        ::File.stub!(:exists?).with(&quot;#{File.expand_path(Base.base_keypair_path)}/id_rsa-funky&quot;).and_return true
         lambda {
-          @tc.rsync_storage_files_to(@tc.master)
+          @tc.rsync_storage_files_to(stub_instance(1))
         }.should_not raise_error
       end
       describe &quot;run_command_on&quot; do
         before(:each) do
-          @tc.stub!(:keypair).and_return &quot;fake_keypair&quot;
-          @tc.stub!(:keypair_path).and_return &quot;~/.ec2/fake_keypair&quot;
           @obj.stub!(:name).and_return &quot;pop&quot;
         end
         it &quot;should call system on the kernel&quot; do
-          ::File.stub!(:exists?).with(&quot;#{File.expand_path(Base.base_keypair_path)}/id_rsa-funky&quot;).and_return true
+          ::File.stub!(:exists?).with(&quot;#{File.expand_path(Default.base_keypair_path)}/id_rsa-funky&quot;).and_return true
           Kernel.should_receive(:system).with(&quot;#{@tc.ssh_string} 192.168.0.1 'ls'&quot;).and_return true
           @tc.run_command_on(&quot;ls&quot;, @obj)
         end
-      end
-      describe &quot;ssh_into_instance_number&quot; do
-        before(:each) do          
-          @tc.stub!(:keypair).and_return &quot;fake_keypair&quot;
-          ::File.stub!(:exists?).with(&quot;#{File.expand_path(Base.base_keypair_path)}/id_rsa-funky&quot;).and_return true
-          
-          Kernel.stub!(:system).with(&quot;#{@tc.ssh_string} 192.168.0.1&quot;).and_return true          
-        end
         it &quot;should find the instance&quot; do
           @tc.should_receive(:get_instance_by_number).with(0).and_return @obj
           @tc.ssh_into_instance_number</diff>
      <filename>spec/poolparty/net/remote_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,8 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
-class TestRemoteClass
+class TestRemoteClass &lt; PoolParty::Remote::RemoteInstance
   include CloudResourcer
   include PoolParty::Remote
-
-  def keypair
-    &quot;fake_keypair&quot;
-  end
 end
 
 describe &quot;RemoterBase&quot; do
@@ -20,7 +16,8 @@ describe &quot;RemoterBase&quot; do
     %w(launch_new_instance! terminate_instance describe_instance instances_list).each do |method|
       eval &lt;&lt;-EOE
         it &quot;should raise an exception if #{method} is not defined as a method&quot; do
-          lambda { @tr.#{method} }.should raise_error
+          # pending # Weird .should raise_error
+          lambda { @tr.class.#{method} }.should raise_error
         end
         it &quot;should not raise an exception if #{method} is defined as a method&quot; do
           lambda {
@@ -33,59 +30,6 @@ describe &quot;RemoterBase&quot; do
         end
       EOE
     end
-    describe &quot;lists&quot; do
-      before(:each) do
-        @tr = TestClass.new
-        stub_list_of_instances_for(@tr)
-      end
-      it &quot;should gather a list of the running instances&quot; do
-        @tr.list_of_running_instances.map {|a| a.name }.should == [&quot;master&quot;, &quot;node1&quot;]
-      end
-      it &quot;should be able to gather a list of the pending instances&quot; do
-        @tr.list_of_pending_instances.map {|a| a.name }.should == [&quot;node3&quot;]
-      end
-      it &quot;should be able to gather a list of the terminating instances&quot; do
-        @tr.list_of_terminating_instances.map {|a| a.name }.should == []
-      end
-      it &quot;should be able to gather a list of the non-terminated instances&quot; do
-        @tr.list_of_nonterminated_instances.map {|a| a.name }.should == [&quot;master&quot;, &quot;node1&quot;, &quot;node3&quot;]
-      end
-      it &quot;should return a list of remote instances&quot; do
-        @tr.remote_instances_list.first.class.should == PoolParty::Remote::RemoteInstance
-      end
-      describe &quot;by keypairs&quot; do
-        it &quot;should be able to grab all the alist keypairs&quot; do
-          @tr.list_of_instances(&quot;fake_keypair&quot;).map {|a| a[:name] }.should == [&quot;master&quot;, &quot;node1&quot;, &quot;node2&quot;, &quot;node3&quot;]
-        end
-        it &quot;should be able to grab all the blist keypairs&quot; do
-          @tr.list_of_instances(&quot;blist&quot;).map {|a| a[:name] }.should == [&quot;node4&quot;]
-        end
-      end
-      describe &quot;get by name&quot; do
-        it &quot;should fetch the instance by number &quot; do
-          @tr.get_instance_by_number(1).name.should == &quot;node1&quot;
-        end
-        it &quot;should fetch the master by number 0&quot; do
-          @tr.get_instance_by_number(0).name.should == &quot;master&quot;
-        end
-        it &quot;should not throw a fit if the node doesn't exist&quot; do
-          lambda {@tr.get_instance_by_number(1000)}.should_not raise_error
-        end
-      end
-    end
     
-    describe &quot;adding custom install tasks (like set_hostname, for example)&quot; do
-      before(:each) do
-        @master = Object.new
-        @master.stub!(:ip).and_return &quot;192.68.0.1&quot;
-        @tr = TestClass.new
-        @tr.stub!(:master).and_return @master
-      end
-      it &quot;should have the method custom_install_tasks&quot; do;@tr.respond_to?(:custom_install_tasks_for).should == true;end
-      it &quot;should have the method custom_configure_tasks&quot; do;@tr.respond_to?(:custom_configure_tasks_for).should == true;end
-      it &quot;should set the ip to the master ip&quot; do
-        @tr.ip.should == &quot;192.68.0.1&quot;
-      end
-    end
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/net/remoter_base_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,6 @@ describe &quot;Remoter&quot; do
     @cloud = cloud :app do;end
     @tc = TestClass.new
     @tc.parent = @cloud
-    ::File.stub!(:exists?).with(&quot;#{File.expand_path(Base.base_keypair_path)}/id_rsa-fake_keypair&quot;).and_return true
     @sample_instances_list = [{:ip =&gt; &quot;192.168.0.1&quot;, :name =&gt; &quot;master&quot;}, {:ip =&gt; &quot;192.168.0.2&quot;, :name =&gt; &quot;node1&quot;}]
   end
   describe &quot;ssh_string&quot; do
@@ -14,7 +13,7 @@ describe &quot;Remoter&quot; do
       @tc.ssh_string.should =~ /ssh -o StrictHostKeyChecking=no -l/
     end
     it &quot;should have the keypair in the ssh_string&quot; do
-      @tc.ssh_string.should =~ /#{@tc.keypair}/
+      @tc.ssh_string.should =~ /#{@tc.full_keypair_path}/
     end
   end
   describe &quot;ssh_array&quot; do
@@ -31,59 +30,67 @@ describe &quot;Remoter&quot; do
       @ri.stub!(:ip).and_return &quot;192.168.0.22&quot;
     end
     it &quot;should have rsync in the rsync_command&quot; do
-      @tc.rsync_command.should == &quot;rsync -azP --exclude cache -e '#{@tc.ssh_string} -l #{Base.user}'&quot;
+      @tc.rsync_command.should == &quot;rsync -azP --exclude cache -e '#{@tc.ssh_string} -l #{Default.user}'&quot;
     end
     it &quot;should be able to rsync storage commands&quot; do
-      @tc.rsync_storage_files_to_command(@ri).should == &quot;#{@tc.rsync_command} #{Base.storage_directory}/ 192.168.0.22:/var/poolparty&quot;
-    end
-  end
-  describe &quot;launch_and_configure_master!&quot; do
-    before(:each) do
-      @tc.stub!(:wait).and_return true
-      stub_list_from_remote_for(@tc)
-      stub_remoting_methods_for(@tc)
-      @tc.stub!(:maximum_instances).and_return 5
-      @tc.stub!(:list_of_pending_instances).and_return []
-      @tc.stub!(:list_of_nonterminated_instances).and_return []
-      @tc.stub!(:list_of_running_instances).and_return []
-      @tc.stub!(:master).and_return ris.first
-      @tc.stub!(:after_launched).and_return true
-      @tc.stub!(:verbose).and_return false
-      ::File.stub!(:exists?).and_return true
-      
-      @pb = PoolParty::Provisioner::Capistrano.new(nil, @tc)
-      PoolParty::Provisioner::Capistrano.stub!(:new).and_return @pb
-      @pb.stub!(:setup_runner)
-      @pb.stub!(:install).and_return true
-      @pb.stub!(:configure).and_return true
-      @pb.stub!(:create_roles).and_return true
-    end
-    it &quot;should have the method launch_master!&quot; do
-      @tc.respond_to?(:launch_and_configure_master!).should == true
-    end
-    it &quot;should test if it can start a new instance&quot; do
-      @tc.should_receive(:can_start_a_new_instance?).once.and_return false      
-    end
-    it &quot;should test if the master is running&quot; do
-      @tc.should_receive(:is_master_running?).and_return false
-    end
-    it &quot;should ask to request_launch_new_instances when the master is not running and we can start a new instance&quot; do
-      @tc.should_receive(:request_launch_master_instance)
-      @tc.stub!(:can_start_a_new_instance?).and_return true
-      @tc.stub!(:is_master_running?).and_return false
-    end
-    after(:each) do
-      @tc.launch_and_configure_master!
+      @tc.rsync_storage_files_to_command(@ri).should == &quot;#{@tc.rsync_command} #{Default.storage_directory}/ 192.168.0.22:/var/poolparty&quot;
     end
   end
+
+  # describe &quot;launch_and_configure_master!&quot; do
+  #   before(:each) do
+  #     @tc.stub!(:wait).and_return true
+  #     stub_list_from_remote_for(@tc)
+  #     stub_remoting_methods_for(@tc)
+  #     @tc.stub!(:maximum_instances).and_return 5
+  #     @tc.stub!(:list_of_pending_instances).and_return []
+  #     @tc.stub!(:list_of_nonterminated_instances).and_return []
+  #     @tc.stub!(:list_of_running_instances).and_return []
+  #     @tc.stub!(:master).and_return ris.first
+  #     @tc.stub!(:after_launched).and_return true
+  #     @tc.stub!(:verbose).and_return false
+  #     # @tc.stub!(:testing).and_return true #MF
+  #     ::File.stub!(:exists?).and_return true
+  #     
+  #     @pb = PoolParty::Provisioner::Capistrano.new(nil, @tc)
+  #     PoolParty::Provisioner::Capistrano.stub!(:new).and_return @pb
+  #     @pb.stub!(:setup_runner)
+  #     @pb.stub!(:install).and_return true
+  #     @pb.stub!(:configure).and_return true
+  #     @pb.stub!(:create_roles).and_return true
+  #   end
+  #   it &quot;should have dependency_resolver_command&quot; do
+  #     @tc.respond_to?(:dependency_resolver_command)
+  #     @tc.dependency_resolver_command.should match(/puppet/)
+  #   end
+  #   it &quot;should have the method launch_master!&quot; do
+  #     @tc.respond_to?(:launch_and_configure_master!).should == true
+  #   end
+  #   it &quot;should test if it can start a new instance&quot; do
+  #     @tc.should_receive(:can_start_a_new_instance?).once.and_return false      
+  #   end
+  #   it &quot;should test if the master is running&quot; do
+  #     @tc.should_receive(:is_master_running?).and_return false
+  #   end
+  #   it &quot;should ask to request_launch_new_instances when the master is not running and we can start a new instance&quot; do
+  #     @tc.should_receive(:request_launch_master_instance)
+  #     @tc.stub!(:can_start_a_new_instance?).and_return true
+  #     @tc.stub!(:is_master_running?).and_return false
+  #   end
+  #   after(:each) do
+  #     @tc.launch_and_configure_master!
+  #   end
+  # end
+
   describe &quot;expansions and contractions&quot; do
     before(:each) do
       @tc = TestClass.new
       stub_list_from_remote_for @tc # sets the list of instances to 2
+      stub_running_remote_instances @tc
     end
     describe &quot;list_of_nodes_exceeding_minimum_runtime&quot; do
       before(:each) do
-        @tc.stub!(:minimum_runtime).and_return 3000
+        @tc.stub!(:minimum_runtime).and_return 3000        
       end
       it &quot;should not be empty&quot; do
         @tc.list_of_running_instances.size.should == 2</diff>
      <filename>spec/poolparty/net/remoter_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,52 +1,51 @@
-require File.dirname(__FILE__) + '/../spec_helper'
-
-include PoolParty::Resources
-
-class TestClass
-  include PoolParty::Resources
-end
-describe &quot;Remote Instance&quot; do
-  before(:each) do
-    reset_resources!
-    Kernel.stub!(:system).and_return true
-  end
-  describe &quot;wrapped&quot; do
-    before(:each) do
-      @tc = TestClass.new      
-      @cloud = MyOpenStruct.new(:keypair =&gt; &quot;keys&quot;, :remote_keypair_path =&gt; &quot;/keypair_path&quot;, :name =&gt; &quot;cloudcloud&quot;)
-      @cloud.stub!(:is_a?).with(PoolParty::Cloud::Cloud).and_return true
-      @tc.stub!(:parent).and_return @cloud
-      
-      @options = {:name =&gt; &quot;deploydirectory&quot;, :from =&gt; ::File.dirname(__FILE__), :to =&gt; &quot;/var/www/deploydirectory&quot;, :testing =&gt; false}
-    end
-    it &quot;should be a string&quot; do
-      @tc.has_deploydirectory(@options).to_string.should =~ /exec \{/
-    end
-    it &quot;should included the flushed out options&quot; do
-      @tc.has_deploydirectory(@options).to_string.should =~ /command/
-    end
-    describe &quot;in resource&quot; do
-      before(:each) do
-        @tc.instance_eval do
-          has_deploydirectory do
-            name &quot;deploydirectory&quot;
-            from ::File.dirname(__FILE__)
-            to &quot;/var/www/deploydirectory&quot;
-          end
-        end
-      end
-      it &quot;should have the path set within the resource&quot; do
-        @tc.resource(:deploydirectory).first.to_string.should =~ /exec \{/
-      end
-      it &quot;should not have the from in the to_string&quot; do
-        @tc.resource(:deploydirectory).first.to_string.should_not =~ /from /
-      end
-      it &quot;should not have the to in the to_string&quot; do
-        @tc.resource(:deploydirectory).first.to_string.should_not =~ /to /
-      end
-      it &quot;should have onlyif in the to_string&quot; do
-        @tc.resource(:deploydirectory).first.to_string.should =~ /onlyif/
-      end
-    end
-  end
-end
\ No newline at end of file
+# require File.dirname(__FILE__) + '/../spec_helper'
+# 
+# include PoolParty::Resources
+# 
+# class TestClass
+#   include PoolParty::Resources
+# end
+# describe &quot;Remote Instance&quot; do
+#   before(:each) do
+#     Kernel.stub!(:system).and_return true
+#   end
+#   describe &quot;wrapped&quot; do
+#     before(:each) do
+#       @tc = TestClass.new      
+#       @cloud = MyOpenStruct.new(:keypair =&gt; &quot;keys&quot;, :remote_keypair_path =&gt; &quot;/keypair_path&quot;, :name =&gt; &quot;cloudcloud&quot;)
+#       @cloud.stub!(:is_a?).with(PoolParty::Cloud::Cloud).and_return true
+#       @tc.stub!(:parent).and_return @cloud
+#       
+#       @options = {:name =&gt; &quot;deploydirectory&quot;, :from =&gt; ::File.dirname(__FILE__), :to =&gt; &quot;/var/www/deploydirectory&quot;, :testing =&gt; false}
+#     end
+#     it &quot;should be a string&quot; do
+#       @tc.has_deploydirectory(@options).to_string.should =~ /exec \{/
+#     end
+#     it &quot;should included the flushed out options&quot; do
+#       @tc.has_deploydirectory(@options).to_string.should =~ /command/
+#     end
+#     describe &quot;in resource&quot; do
+#       before(:each) do
+#         @tc.instance_eval do
+#           has_deploydirectory do
+#             name &quot;deploydirectory&quot;
+#             from ::File.dirname(__FILE__)
+#             to &quot;/var/www/deploydirectory&quot;
+#           end
+#         end
+#       end
+#       it &quot;should have the path set within the resource&quot; do
+#         @tc.resource(:deploydirectory).first.to_string.should =~ /exec \{/
+#       end
+#       it &quot;should not have the from in the to_string&quot; do
+#         @tc.resource(:deploydirectory).first.to_string.should_not =~ /from /
+#       end
+#       it &quot;should not have the to in the to_string&quot; do
+#         @tc.resource(:deploydirectory).first.to_string.should_not =~ /to /
+#       end
+#       it &quot;should have onlyif in the to_string&quot; do
+#         @tc.resource(:deploydirectory).first.to_string.should =~ /onlyif/
+#       end
+#     end
+#   end
+# end
\ No newline at end of file</diff>
      <filename>spec/poolparty/plugins/deploydirectory_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,44 +1,38 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
-include PoolParty::Resources
-
-class TestGitClass
-  include PoolParty::Resources
-  
-  def options(h={})
-    {}
-  end
+class TestGitClass &lt; PoolParty::Cloud::Cloud
 end
+
 describe &quot;Remote Instance&quot; do
-  before(:each) do
-    reset_resources!
-  end
   describe &quot;wrapped&quot; do
     before(:each) do
-      @tc = TestGitClass.new
+      @tc = cloud :test_git_class_cloud do
+        has_git_repos :at =&gt; &quot;/var/www/&quot;, :name =&gt; &quot;gitrepos.git&quot;, :source =&gt; &quot;git://git/repos/source.git&quot;, :requires_user =&gt; &quot;finger&quot;
+      end
+      @compiled = PuppetResolver.new(@tc.to_properties_hash).compile
     end
     it &quot;should be a string&quot; do
-      @tc.has_git_repos(:at =&gt; &quot;/var/www/&quot;, :name =&gt; &quot;gitrepos.git&quot;, :source =&gt; &quot;git://source.git&quot;).to_string.should =~ /exec/
+      @compiled.should =~ /exec/
     end
     it &quot;should included the flushed out options&quot; do
-      @tc.has_git_repos({:name =&gt; &quot;git.git&quot;, :source =&gt; &quot;git://source.git&quot;, :requires_user =&gt; &quot;finger&quot;, :at =&gt; &quot;/var/www/&quot;}).to_string.should =~ /finger@git:/
+      @compiled.should =~ /finger@git:/
     end
     it &quot;should not include the user if none is given&quot; do
-      @tc.has_git_repos({:name =&gt; &quot;git.git&quot;, :source =&gt; &quot;git://source.git&quot;,:at =&gt; &quot;/var/www/&quot;}).to_string.should =~ /git clone git:/
+      @compiled.should =~ /git clone finger@git:/
     end
     describe &quot;in resource&quot; do
       before(:each) do
-        @tc.instance_eval do
+        @tc = cloud :test_git_class_cloud_two do
           has_git_repos(:name =&gt; &quot;gittr&quot;) do
-            source &quot;git://source.git&quot;
-            path &quot;/var/www/xnot.org&quot;
             symlink &quot;/var/www/xnot.org/public&quot;
+            source &quot;git://source.git&quot;
+            path &quot;/var/www/xnot.org&quot;       
             at &quot;/var/www&quot;
           end
         end
       end
       it &quot;should have the path set within the resource&quot; do
-        @tc.resource(:git_repos).first.to_string.should =~ /exec \{ \&quot;git-gittr/
+        PuppetResolver.new(@tc.to_properties_hash).compile.should =~ /exec \{ \&quot;git-gittr/
       end
     end
   end</diff>
      <filename>spec/poolparty/plugins/git_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,20 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
-class TestClass
-  include PoolParty::Resources
-end
 describe &quot;Remote Instance&quot; do
   before(:each) do
-    @tc = TestClass.new
+    @tc = TestBaseClass.new do
+    end
   end
-  it &quot;should be a string&quot; do
-    @tc.has_line_in_file(&quot;hi&quot;, &quot;ho&quot;).to_string.should =~ /line \{/
+  it &quot;should have the method has_line_in_file available on the class&quot; do
+    @tc.respond_to?(:has_line_in_file).should == true
   end
-  it &quot;should included the flushed out options&quot; do
-    @tc.has_line_in_file(&quot;hi&quot;, &quot;who&quot;, {:name =&gt; &quot;finger&quot;}).to_string.should =~ /name =&gt; 'finger'/
+  describe &quot;call&quot; do
+    before(:each) do
+      @line = @tc.has_line_in_file({:line =&gt; &quot;hi&quot;, :file =&gt; &quot;ho&quot;})
+      @compiled = PuppetResolver.new(@tc.to_properties_hash).compile
+    end
+    it &quot;should have the line in the file from PuppetResolver&quot; do
+      @compiled.should match(/grep -q &quot;hi&quot; ho/)
+    end
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/plugins/line_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
-include PoolParty::Cloud
-include PoolParty::Resources
-
-class TestServiceClass
+class TestService
   plugin :test_service do
-    def enable
+    def initialize(o={}, e=nil, &amp;block)
+      super(&amp;block)
+    end
+    def enable(o={})
       has_file(:name =&gt; &quot;/etc/poolparty/lobos&quot;)
     end                  
   end
@@ -14,7 +14,7 @@ end
 describe &quot;Cloud&quot; do
   before(:each) do
     setup
-    reset_resources!
+    # 
   end
   describe &quot;wrapped&quot; do
     before(:each) do
@@ -38,7 +38,7 @@ describe &quot;Cloud&quot; do
         @cloud1.using_remoter?.should_not == nil
       end
       it &quot;should say the remoter_base is ec2 (by default)&quot; do
-        @cloud1.remote_base.should == PoolParty::Ec2
+        @cloud1.remote_base.class.should == Kernel::Ec2
       end
     end
     it &quot;should return the cloud if the cloud key is already in the clouds list&quot; do
@@ -49,32 +49,44 @@ describe &quot;Cloud&quot; do
       before(:each) do
         reset!
         setup
-        @p = pool :options do
+        pool :options do
+          user &quot;bob&quot;
+          pop_stick true
           minimum_instances 100
-          access_key &quot;access_key&quot;
-          cloud :apple do          
+          access_key &quot;pool_access_key&quot;
+          cloud :apple do
             access_key &quot;cloud_access_key&quot;
           end
         end
-        @c = @p.cloud(:apple)
       end
       it &quot;should be able to grab the cloud from the pool&quot; do
-        @c.should == @p.cloud(:apple)
+        clouds[:apple].should == pools[:options].cloud(:apple)
       end
       it &quot;should take the options set on the pool&quot; do
-        @p.minimum_instances.should == 100
+        pools[:options].minimum_instances.should == 100
       end
       it &quot;should take the access_key option set from the cloud&quot; do
-        @c.access_key.should == &quot;cloud_access_key&quot;
+        clouds[:apple].access_key.should == &quot;cloud_access_key&quot;
+      end
+      it &quot;should take the option pop_stick from the superclass&quot; do
+        clouds[:apple].pop_stick.should == true
+      end
+      it &quot;should take the option testing true from the superclass&quot; do
+        pools[:options].user.should == &quot;bob&quot;
+        clouds[:apple].user.should == &quot;bob&quot;
       end
     end
     describe &quot;block&quot; do
       before(:each) do
         reset!
-        @cloud = Cloud.new(:test, @pool) do
-          # Inside cloud block
-          keypair &quot;fake_keypair&quot;
+        pool :test do
+          Cloud.new(:test) do
+            # Inside cloud block
+            testing true
+            keypair &quot;fake_keypair&quot;
+          end
         end
+        @cloud = cloud :test
         @cloud.stub!(:plugin_store).and_return []
       end
 
@@ -88,19 +100,19 @@ describe &quot;Cloud&quot; do
         end
         cloud(:paddy_wack).parent.should == pool(:knick_knack)
       end
-      it &quot;should have services in an array&quot; do
-        @cloud.services.class.should == Array
+      it &quot;should have services in an hash&quot; do
+        @cloud.services.class.should == Hash
       end
       it &quot;should have no services in the array when there are no services defined&quot; do
         @cloud.services.size.should == 0
       end
-      it &quot;should respond to a configure method&quot; do
-        @cloud.respond_to?(:configure).should == true
+      it &quot;should respond to a options method (from Dslify)&quot; do
+        @cloud.respond_to?(:options).should == true
       end
       describe &quot;configuration&quot; do
         before(:each) do
           reset!
-          @cloud2 = Cloud.new(:test, @pool) do
+          @cloud2 = Cloud.new(:test) do
             minimum_instances 1
             maximum_instances 2
           end
@@ -124,8 +136,8 @@ describe &quot;Cloud&quot; do
           @cloud.minimum_instances.should == 3
         end
         it &quot;should be able to take a hash from configure and convert it to the options&quot; do
-          @cloud.configure( {:minimum_instances =&gt; 1, :maximum_instances =&gt; 10, :keypair =&gt; &quot;friend&quot;} )
-          @cloud.keypair.should == &quot;friend&quot;
+          @cloud.set_vars_from_options( {:minimum_instances =&gt; 1, :maximum_instances =&gt; 10, :keypair =&gt; &quot;friend&quot;} )
+          @cloud.minimum_instances.should == 1
         end
         describe &quot;minimum_instances/maximum_instances as a range&quot; do
           before(:each) do
@@ -152,35 +164,32 @@ describe &quot;Cloud&quot; do
             @c = cloud :app do
               keypair &quot;hotdog&quot;
             end
-            @c.keypair.should == &quot;hotdog&quot;
+            @c.keypairs.first.filepath.should == &quot;hotdog&quot;
           end
           it &quot;should take the pool parent's keypair if it's defined on the pool&quot; do
             pool :pool do
               keypair &quot;ney&quot;
               cloud :app do
               end
-              cloud :group do
-              end
             end
-            pool(:pool).cloud(:app).keypair.should == &quot;ney&quot;
-            pool(:pool).cloud(:group).keypair.should == &quot;ney&quot;
+            clouds[:app]._keypairs.first.stub!(:exists?).and_return true
+            clouds[:app]._keypairs.first.stub!(:full_filepath).and_return &quot;ney&quot;
+            clouds[:app].keypair.full_filepath.should == &quot;ney&quot;
           end
-          it &quot;should generate a keypair based on the cloud name if none is defined&quot; do
+          it &quot;should default to ~/.ssh/id_rsa if none are defined&quot; do
+            File.stub!(:exists?).with(&quot;#{ENV[&quot;HOME&quot;]}/.ssh/id_rsa&quot;).and_return(true)
             pool :pool do
               cloud :app do
               end
-              cloud :nickes do
-              end
             end
-            pool(:pool).cloud(:app).keypair.should == &quot;pool_app&quot;
-            pool(:pool).cloud(:nickes).keypair.should == &quot;pool_nickes&quot;
+            clouds[:app].keypair.full_filepath.should match(/\.ssh\/id_rsa/)
           end
         end
         describe &quot;Manifest&quot; do
           before(:each) do
             reset!
             stub_list_from_remote_for(@cloud)
-            @cloud.instance_eval do
+            @cloud = TestClass.new :test_more_manifest do
               has_file(:name =&gt; &quot;/etc/httpd/http.conf&quot;) do
                 content &lt;&lt;-EOE
                   hello my lady
@@ -189,51 +198,52 @@ describe &quot;Cloud&quot; do
               has_gempackage(:name =&gt; &quot;poolparty&quot;)
               has_package(:name =&gt; &quot;dummy&quot;)            
             end
+            context_stack.push @cloud
           end
           it &quot;should it should have the method build_manifest&quot; do
             @cloud.respond_to?(:build_manifest).should == true
           end
           it &quot;should make a new 'haproxy' class&quot; do
-            @cloud.stub!(:realize_plugins!).and_return true
-            PoolPartyHaproxyClass.should_receive(:new).once
+            PoolpartyBaseHaproxyClass.should_receive(:new).once
             @cloud.add_poolparty_base_requirements
           end
-          it &quot;should have 3 resources&quot; do
+          it &quot;should have 3 resources&quot; do            
             @cloud.add_poolparty_base_requirements
-            @cloud.number_of_resources.should &gt; 2
+            @cloud.services.size.should &gt; 2
           end
           it &quot;should receive add_poolparty_base_requirements before building the manifest&quot; do
             @cloud.should_receive(:add_poolparty_base_requirements).once
             @cloud.build_manifest
           end
+          after(:each) do
+            context_stack.pop
+          end
           describe &quot;add_poolparty_base_requirements&quot; do
             before(:each) do
               reset!            
               @cloud.instance_eval do
                 @heartbeat = nil
               end
-              @hb = &quot;heartbeat&quot;.class_constant.new(@cloud)
-              @cloud.stub!(:realize_plugins!).and_return []
+              @hb = PoolpartyBaseHeartbeatClass.new
             end
             it &quot;should call initialize on heartbeat (in add_poolparty_base_requirements)&quot; do
-              @cloud.stub!(:realize_plugins!).and_return []
               @hb.class.should_receive(:new).and_return true
               @cloud.add_poolparty_base_requirements
             end
             it &quot;should call heartbeat on the cloud&quot; do
-              @cloud.should_receive(:heartbeat).and_return true
+              @cloud.should_receive(:poolparty_base_heartbeat).and_return true
               @cloud.add_poolparty_base_requirements
             end
             it &quot;should call Hearbeat.new&quot; do
-              &quot;heartbeat&quot;.class_constant.should_receive(:new).and_return @hb
+              PoolpartyBaseHeartbeatClass.should_receive(:new).and_return @hb
               @cloud.add_poolparty_base_requirements            
             end
             it &quot;should call enable on the plugin call&quot; do
-              @hb = &quot;heartbeat&quot;.class_constant
-              &quot;heartbeat&quot;.class_constant.stub!(:new).and_return @hb
+              @hb = PoolpartyBaseHeartbeatClass.new
+              PoolpartyBaseHeartbeatClass.stub!(:new).and_return @hb
               
               @cloud.add_poolparty_base_requirements
-              @cloud.heartbeat.should == @hb
+              @cloud.poolparty_base_heartbeat.should == @hb
             end
             describe &quot;after adding&quot; do
               before(:each) do
@@ -243,18 +253,18 @@ describe &quot;Cloud&quot; do
               it &quot;should add resources onto the heartbeat class inside the cloud&quot; do
                 @cloud.services.size.should &gt; 0
               end
-              it &quot;should store the class heartbeat&quot; do              
-                @cloud.services.map {|a| a.class}.include?(&quot;heartbeat&quot;.class_constant).should == true
+              it &quot;should store the class heartbeat&quot; do
+                @cloud.services.map {|k,v| k}.include?(:poolparty_base_heartbeat_class).should == true
               end
               it &quot;should have an array of resources on the heartbeat&quot; do
-                @cloud.services.first.resources.class.should == Hash
+                @cloud.services.class.should == Hash
               end
               describe &quot;resources&quot; do
                 before(:each) do
-                  @cloud8 = Cloud.new(:tester, @pool) do     
-                    test_service             
+                  @cloud8 = cloud :tester do
+                    test_service
                   end
-                  @service = @cloud8.services.first
+                  @service = clouds[:tester].services.test_service_class
                   @files = @service.resource(:file)
                 end
                 it &quot;should have a file resource&quot; do
@@ -295,9 +305,6 @@ describe &quot;Cloud&quot; do
             it &quot;should include the poolparty gem&quot; do
               @manifest.should =~ /package \{/
             end
-            it &quot;should include custom functions&quot; do
-              @manifest.should =~ /define line\(\$file/
-            end
           end
           describe &quot;prepare_for_configuration&quot; do
             before(:each) do
@@ -339,8 +346,8 @@ describe &quot;Cloud&quot; do
             end
             describe &quot;copy_custom_monitors&quot; do
               before(:each) do                
-                Base.stub!(:custom_monitor_directories).and_return [&quot;/tmp/monitors/custom_monitor.rb&quot;]
-                Dir.stub!(:[]).with(&quot;#{Base.custom_monitor_directories}/*.rb&quot;).and_return [&quot;/tmp/monitors/custom_monitor.rb&quot;]
+                Default.stub!(:custom_monitor_directories).and_return [&quot;/tmp/monitors/custom_monitor.rb&quot;]
+                Dir.stub!(:[]).with(&quot;#{Default.custom_monitor_directories}/*.rb&quot;).and_return [&quot;/tmp/monitors/custom_monitor.rb&quot;]
                 @cloud.stub!(:copy_misc_templates).and_return true
                 @cloud.stub!(:copy_file_to_storage_directory).and_return true
               end
@@ -360,7 +367,7 @@ describe &quot;Cloud&quot; do
               @cloud.should_receive(:store_keys_in_file).once
             end
             it &quot;should call save! on Script&quot; do
-              Script.should_receive(:save!).with(@cloud).once
+              pending
             end
             it &quot;should copy_ssh_key&quot; do
               @cloud.should_receive(:copy_ssh_key).once
@@ -407,7 +414,7 @@ describe &quot;Cloud&quot; do
             @cloud.respond_to?(:generate_unique_cookie_string).should == true
           end
           it &quot;should call hexdigest to digest/sha&quot; do
-            Digest::SHA256.should_receive(:hexdigest).with(&quot;#{@cloud.full_keypair_name}#{@cloud.name}&quot;).and_return &quot;blaaaaah&quot;
+            Digest::SHA256.should_receive(:hexdigest).with(&quot;#{@cloud.keypair.basename}#{@cloud.name}&quot;).and_return &quot;blaaaaah&quot;
             @cloud.generate_unique_cookie_string
           end
           it &quot;should generate the same cookie string every time&quot; do
@@ -421,18 +428,19 @@ describe &quot;Cloud&quot; do
         end
       end
 
-      describe &quot;instances&quot; do
-        before(:each) do
-          @cloud3 = cloud :pop do;keypair &quot;fake_keypair&quot;;end
-          stub_list_from_remote_for(@cloud3)
-        end
-        it &quot;should respond to the method master&quot; do
-          @cloud3.respond_to?(:master).should == true
-        end
-        it &quot;should return a master that is not nil&quot; do
-          @cloud3.master.should_not be_nil
-        end
-      end
+      # describe &quot;instances&quot; do
+      #   before(:each) do
+      #     @cloud3 = cloud :pop do;keypair &quot;fake_keypair&quot;;end
+      #     stub_list_from_remote_for(@cloud3)
+      #   end
+      #   it &quot;should respond to the method master&quot; do
+      #     @cloud3.master.should_not be_nil
+      #     @cloud3.respond_to?(:master).should == true
+      #   end
+      #   it &quot;should return a master that is not nil&quot; do
+      #     @cloud3.master.should_not be_nil
+      #   end
+      # end
     end
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/poolparty/cloud_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,12 @@
 pool :poolpartyrb do
-  plugin_directory &quot;docs_plugins&quot;
+  plugin_directory &quot;docs_plugins&quot;  
   
   cloud :app do
         
     # Configuration
-    configure({ :maximum_instances =&gt; 1,:keypair =&gt; &quot;name&quot; })
-    minimum_instances 1    
+    minimum_instances 1
     
-    apache do
+    apachetest do
       enable_php
       site(&quot;poolpartyrb.com&quot;)
     end</diff>
      <filename>spec/poolparty/poolparty/configurers/files/ruby_basic.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,8 @@ require File.dirname(__FILE__) + '/../test_plugins/webserver'
 describe &quot;Configurer&quot; do
   before(:each) do
     reset!
-    @basic = read_file(File.join(File.dirname(__FILE__), &quot;files&quot;, &quot;ruby_basic.rb&quot;))
-    Script.inflate @basic
+    @basic = File.join(File.dirname(__FILE__), &quot;files&quot;, &quot;ruby_basic.rb&quot;)
+    PoolParty::Pool::Pool.load_from_file @basic
     @conf = Object.new
   end
   it &quot;should not be nil&quot; do
@@ -16,25 +16,13 @@ describe &quot;Configurer&quot; do
     before(:each) do
       @s = Script.new
       Script.stub!(:new).and_return(@s)
-      @basic = read_file(File.join(File.dirname(__FILE__), &quot;files&quot;, &quot;ruby_basic.rb&quot;))
-    end
-    it &quot;should load the basic example configure&quot; do
-      @s.should_receive(:inflate).and_return true
-    end
-    it &quot;should call inflate on the pools&quot; do
-      @s.pools.each {|a,b| b.should_receive(:inflate).and_return true }
-    end
-    describe &quot;pool&quot; do
-      before(:each) do
-        Script.inflate @basic
-        @pool = pool(:poolpartyrb)
-      end
+      @basic = File.join(File.dirname(__FILE__), &quot;files&quot;, &quot;ruby_basic.rb&quot;)
     end
     describe &quot;clouds&quot; do
       before(:each) do
         reset!
-        Script.inflate @basic
-        @cloud = pool(:poolpartyrb).cloud(:app)
+        PoolParty::Pool::Pool.load_from_file @basic
+        @cloud = clouds[:app]
       end
       it &quot;should contain a list of the clouds within the pool (:app)&quot; do
         @cloud.should_not be_nil
@@ -43,16 +31,12 @@ describe &quot;Configurer&quot; do
         @cloud.minimum_instances.should == 1
       end
       it &quot;should set the maximum instances on the :app cloud&quot; do
-        @cloud.maximum_instances.should == 1
+        @cloud.maximum_instances.should == 5
       end
       it &quot;should set the keypair name on the :app cloud too&quot; do
-        @cloud.keypair.should == &quot;name&quot;
+        @cloud.keypair.to_s.should =~ /id_rsa/
       end
     end
-    
-    after do
-      Script.inflate @basic
-    end
   end
   
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/poolparty/configurers/ruby_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -46,7 +46,7 @@ describe &quot;Custom Resource&quot; do
     end
     describe &quot;printing&quot; do
       before do
-        reset_resources!
+        
         define_resource(:rockstar) do
           def has_a_line_in_file(line=&quot;line_in_file&quot;, file=&quot;file&quot;)
             call_custom_function &quot;line(#{file}, #{line})&quot;
@@ -72,48 +72,7 @@ describe &quot;Custom Resource&quot; do
         @resource.resource(:call_function).first.to_string.should == &quot;line(filename, hi)&quot;
       end
       it &quot;should be stored in an array&quot; do
-        resource(:rockstar).class.should == Array
-      end
-      describe &quot;call function&quot; do
-        before(:each) do
-          @res = Class.new
-          @res.stub!(:class_name_sym).and_return :bunk
-          @res.stub!(:key).and_return &quot;bunk&quot;
-        end
-        it &quot;should have the class CallFunction available&quot; do
-          lambda {PoolParty::Resources::CallFunction}.should_not raise_error
-        end
-        it &quot;should create a new CallFunction instance when calling call_function with a string&quot; do
-          PoolParty::Resources::CallFunction.should_receive(:new).and_return @res
-          add_resource(:call_function, :name =&gt; &quot;line&quot;)
-        end
-        it &quot;should create a call function in the function call array&quot; do
-          add_resource(:call_function, {:name =&gt; &quot;custom_function&quot;}, @cloud)
-          resource(:call_function).size.should == 1
-        end
-        describe &quot;defining&quot; do
-          it &quot;should add the methods to the class through module_eval&quot; do
-            PoolParty::Resources.should_receive(:module_eval).at_least(1)
-            define_resource :imarockstar2YEAH do
-            end
-          end
-        end
-      
-        describe &quot;within context&quot; do
-          before(:each) do
-            cloud :apple do
-              has_line_in_file(&quot;hello&quot;, &quot;messages&quot;)
-              brain_child(&quot;meee&quot;)
-            end
-            @cloud = cloud(:apple)
-          end
-          it &quot;should have 1 resource (the line resource)&quot; do
-            @cloud.resources.should_not be_empty
-          end
-          it &quot;should have one call_function resource&quot; do
-            @cloud.resource(:call_function).first.to_string.should =~ /line \{/
-          end
-        end
+        @resource.resource(:rockstar).class.should == Array
       end
     end
   end</diff>
      <filename>spec/poolparty/poolparty/custom_resource_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,26 +3,58 @@ require &quot;open-uri&quot;
 
 describe &quot;basic&quot; do
   before(:each) do
-    @example_dir = ::File.join(::File.dirname(__FILE__), &quot;..&quot;, &quot;..&quot;, &quot;..&quot;, &quot;examples&quot;)
-    reset!
-    PoolParty::Script.inflate open(@example_dir + &quot;/basic.rb&quot;).read
+    PoolParty.reset!
+    @example_spec_file = ::File.join(::File.dirname(__FILE__), &quot;..&quot;, &quot;..&quot;, &quot;..&quot;, &quot;examples&quot;, 'basic.rb')
+    PoolParty::Pool::Pool.load_from_file(@example_spec_file)
+    @db = clouds[:basic_db]
+    @app = clouds[:basic_app]
   end
   it &quot;should have one pool called :app&quot; do
-    pool(:app).should_not be_nil
+    pool(:application).should_not == nil
+    pools[:application].should_not == nil
   end
   it &quot;should have a cloud called :app&quot; do
-    pool(:app).cloud(:app).should_not be_nil
+    clouds[:basic_app].should_not == nil
   end
   it &quot;should have a cloud called :db&quot; do
-    pool(:app).cloud(:db).should_not be_nil
+    pools[:application].clouds[:basic_db].should_not == nil
   end
-  it &quot;should set the minimum_instances on the cloud to 2 (overriding the pool options)&quot; do
-    pool(:app).cloud(:app).minimum_instances.should == 2
+  it &quot;should set the minimum_instances on the cloud to 2 (overriding the pool options)&quot; do    
+    pools[:application].minimum_instances.should == 3
+    clouds[:basic_app].minimum_instances.should == 12
   end
-  it &quot;should set the maximum_instances on the cloud to 5&quot; do
-    pool(:app).cloud(:app).maximum_instances.should == 5
+  it &quot;should set the maximum_instances on the cloud to 50&quot; do
+    clouds[:basic_app].maximum_instances.should == 50
   end
   it &quot;should set the minimum_instances on the db cloud to 3&quot; do
-    pool(:app).cloud(:db).minimum_instances.should == 3
+    clouds[:basic_db].minimum_instances.should == 19
+    clouds[:basic_app].minimum_instances.should == 12
+    pools[:application].minimum_instances.should ==3
+  end
+  it &quot;should set ambiguous methods on the cloud&quot; do
+    clouds[:basic_app].junk_yard_dogs.should == &quot;pains&quot;
+    clouds[:basic_db].junk_yard_dogs.should == &quot;are bad&quot;
+  end
+  it &quot;should set the parent to the pool&quot; do
+    clouds[:basic_app].parent.should == pools[:application]
+    clouds[:basic_db].parent.should == pools[:application]
+    clouds[:basic_db].parent.should_not == pools[:app]
+  end
+  it &quot;should have the keypair matching /auser/on the db cloud &quot; do
+    clouds[:basic_db]._keypairs.select{|a| a.filepath.match(/auser/)}
+  end
+  it &quot;cloud should know what remoter base it is using&quot; do
+    clouds[:basic_db].remote_base.class.should == PoolParty::Remote::Ec2
+  end
+  it &quot;cloud should have methods from the remoter base available&quot; do
+    clouds[:basic_db].remote_base.should_receive(:describe_instances).and_return({})
+    clouds[:basic_db].describe_instances.should == {}
+  end
+  it &quot;should not return nil to undefined methods&quot; do
+    lambda {clouds[:basic_db].not_a_method_that_exists_anywhere}.should raise_error
+  end
+  it &quot;should have the keypair set for the specific cloud on top of the keypair stack&quot; do
+    #I think this should be the behavior. mf
+    # pools[:application].clouds[:basic_db].keypairs.last.filepath.should_match(/auser/)
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/poolparty/example_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,54 +1,44 @@
 require File.dirname(__FILE__) + '/../spec_helper'
-include PoolParty::Resources
 require File.dirname(__FILE__) + '/test_plugins/webserver'
 
 describe &quot;Plugin&quot; do
-  before(:each) do
-    @p = pool :poolpartyrb do
-      cloud :app do
-        apache do                
-          enable_php
-          site(&quot;heady&quot;, {
-            :document_root =&gt; &quot;/root&quot;
-          })
-        end
+  before(:each) do    
+    @c = cloud :test_plugin_model_cloud do
+      apachetest do                
+        enable_php
+        site(&quot;heady&quot;, {
+          :document_root =&gt; &quot;/root&quot;
+        })
       end
     end
-    @c = @p.cloud(:app)
   end
   describe &quot;methods should include&quot; do
     it &quot;register_plugin(plugin)&quot; do;WebServers.respond_to?(:register_plugin).should == true;end
   end
   describe &quot;registered&quot; do
     before(:each) do
-      @plugin = &quot;apache&quot;.class_constant.new(@c)
+      @plugin = @c.apachetest
     end
     describe &quot;storage&quot; do
-      it &quot;should store the plugin in a Hash on the pool&quot; do
-        @c.plugins.class.should == Hash
-      end
       it &quot;should be able to retrieve the plugin as a name&quot; do
-        @c.plugin(&quot;apache&quot;).should_not be_nil
+        @c.plugin(&quot;apachetest&quot;).should_not be_nil
       end
     end
+    it &quot;be of the class apachetesttestClass on the Kernel&quot; do
+      @plugin.class.should == Kernel::ApachetestClass
+    end
     it &quot;should store the regsitered plugins in an array&quot; do
       @plugin.should_not be_nil
     end
-    it &quot;should set the pool on the plugin&quot; do
-      @plugin.parent.should == @c
-    end
     it &quot;should have the plugin name as a method on the cloud &quot; do
-      @c.respond_to?(:apache).should == true
+      @c.respond_to?(:apachetest).should == true
     end
     describe &quot;methods&quot; do
-      before(:each) do
-        reset!
-      end
       it &quot;should call the enable_php method when in the defininition of the cloud&quot; do
         @plugin.respond_to?(:enable_php).should == true
       end
       it &quot;should call php = true in the enable_php&quot; do
-        @plugin.php.should_not == true
+        @plugin.php?.should == false
         @plugin.enable_php
         @plugin.php.should == true
       end</diff>
      <filename>spec/poolparty/poolparty/plugin_model_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,109 +4,38 @@ include PoolParty::Resources
 require File.dirname(__FILE__) + '/test_plugins/webserver'
 
 describe &quot;Plugin&quot; do
-  before(:each) do
-    reset_resources!
-  end
   describe &quot;wrapped&quot; do
     before(:each) do
       reset!
-      pool :poolpartyrb do      
-        cloud :app do
-          apache do
-            enable_php
-            site(&quot;heady&quot;, {
-              :document_root =&gt; &quot;/root&quot;
-            })
-          end
-        end      
-      end
-      @p = pool :poolpartyrb
-      @c = @p.cloud(:app)
-    end
-
-    it &quot;should allow access to the pool on the cloud&quot; do
-      @c.parent.should == @p
-    end
-    describe &quot;instance&quot; do
-      before(:each) do        
-        @plugin = @c.apache
-      end
-      it &quot;should not be empty&quot; do
-        @plugin.class.should == PoolPartyApacheClass
-      end
-      it &quot;should have access to the cloud's container&quot; do
-        @plugin.parent.should == @c
-      end
-      it &quot;should have enable_php as a method&quot; do
-        @plugin.respond_to?(:enable_php).should == true
-      end
-      describe &quot;after eval'ing&quot; do
-        before(:each) do
-          @plugin.instance_eval do
-            enable_php
-            has_gempackage(:name =&gt; &quot;aska&quot;)
-          end
-        end
-        it &quot;should call enable_php on the class&quot; do
-          @plugin.php.should == true
-        end
-        it &quot;should have resources attached to it&quot; do
-          @plugin.resources.class.should == Hash
-        end
-        it &quot;should have an array of gem resources&quot; do
-          @plugin.resource(:gempackage).class.should == Array
-        end
-        it &quot;should have 1 gem in the resources defined&quot; do
-          @plugin.resource(:gempackage).size.should == 1
-        end
-        it &quot;should have the gem named aska in the gem resource&quot; do
-          @plugin.get_resource(:gempackage, &quot;aska&quot;).name.should == &quot;aska&quot;
+      cloud :app_for_plugin do
+        apachetest do
+          enable_php
+          site(&quot;heady&quot;, {
+            :document_root =&gt; &quot;/root&quot;
+          })
         end
-        it &quot;should have its resources visible to its parent&quot; do
-          @plugin.parent = @c
-          @c.resources
-        end
-      end
-      describe &quot;before eval'ing&quot; do
-        before(:each) do
-          reset!
-          @plugin = &quot;apache&quot;.class_constant.new(@c)
-        end
-        it &quot;should call has_line_in_file&quot; do
-          @plugin.should_receive(:php).and_return true
-        end
-        it &quot;should call site&quot; do
-          @plugin.should_receive(:site).with(&quot;frank&quot;).and_return true
-        end
-        after do
-          @plugin.instance_eval do
-            enable_php
-            site(&quot;frank&quot;)
-          end
+        apachetest do
+          site(&quot;boob&quot;)
         end
       end
+      @plugin = clouds[:app_for_plugin].apachetest
     end
-    describe &quot;DSL&quot; do
-      it &quot;should have a cloud method from within the plugin&quot; do
-        @plugin.respond_to?(:cloud).should == true
-      end
-      it &quot;should get a hold of the containing cloud&quot; do
-        @plugin.cloud.should == @c
-      end
-      describe &quot;enable&quot; do
-        before(:each) do
-          reset!
-          @plugin = PoolParty::Plugin::Plugin.new
-          Kernel::PoolPartyApacheClass.stub!(:new).and_return @plugin          
-        end
-        it &quot;should call enable on calling realize! when there is no block included&quot; do
-          @plugin.should_receive(:enable).at_least(1).and_return true
-          @cloud = cloud :app do
-            apache
-          end
-          @cloud.realize_plugins!
-        end
-      end
+    it &quot;should not be empty&quot; do
+      clouds[:app_for_plugin].apachetest.class.should == ApachetestClass
+    end
+    it &quot;should set loaded == true&quot; do
+      clouds[:app_for_plugin].apachetest.loaded.should == true
+    end
+    it &quot;should have enable_php as a method&quot; do
+      ApachetestClass.new.respond_to?(:enable_php).should == true
+    end
+    it &quot;should set enable_php&quot; do
+      @plugin.enable_php.should == true
+    end
+    it &quot;should store the plugin in the clouds plugin_store&quot; do
+      clouds[:app_for_plugin].plugin_store.should == [@plugin]
+      clouds[:app_for_plugin].apachetest
+      clouds[:app_for_plugin].plugin_store.should == [@plugin]
     end
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/poolparty/plugin_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -36,7 +36,9 @@ describe &quot;Pool&quot; do
           plugin_directory &quot;yaway&quot;
         end
       end
-      it &quot;should call Dir when the plugin directory is set&quot; do        
+      it &quot;should call Dir when the plugin directory is set&quot; do
+        ::File.should_receive(:directory?).with(&quot;yaway&quot;).once.and_return true
+        ::File.stub!(:directory?).and_return(false)
         Dir.should_receive(:[]).with(&quot;yaway/*/*.rb&quot;).once.and_return []        
       end
     end</diff>
      <filename>spec/poolparty/poolparty/pool_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,9 +6,7 @@ require File.dirname(__FILE__) + '/test_plugins/webserver'
 
 class MyResource &lt; PoolParty::Resources::Resource
   # Just to give some options for the test class
-  def options(h={})
-    @options ||= {:a =&gt; 1,:b =&gt; 2,:c =&gt; 3}
-  end
+  default_options(:a =&gt; 1,:b =&gt; 2,:c =&gt; 3)
 end
 describe &quot;Resource&quot; do
   before(:each) do
@@ -29,17 +27,12 @@ describe &quot;Resource&quot; do
     it &quot;should not wipe out the rest of the default options&quot; do
       @resource.c.should == 3    
     end
-    describe &quot;to_s&quot; do
-      it &quot;should be able to coalesce the instances&quot; do
-        @resource.to_string.should =~ /resource \{/
-      end
-    end
     describe &quot;class methods&quot; do
       it &quot;should have an array of available resources&quot; do
         PoolParty::Resources::Resource.available_resources.class.should == Array
       end
       it &quot;should not be empty&quot; do
-        PoolParty::Resources::Resource.available_resources.should_not be_empty
+        PoolParty::Resources::Resource.available_resources.empty?.should == false
       end
     end
     describe &quot;instance methods&quot; do
@@ -63,339 +56,152 @@ describe &quot;Resource&quot; do
         @resource.respond_to?(:ensures).should == true
       end
       it &quot;should push the option ensure onto the options&quot; do
-        @resource.options.has_key?(:ensure).should == false
+        @resource.options.has_key?(:ensures).should == false
         @resource.ensures(&quot;nibbles&quot;)
-        @resource.options.has_key?(:ensure).should == true
+        @resource.options.has_key?(:ensures).should == true
+        @resource.options.ensures.should == 'present'
       end
       it &quot;should write the option ensures as present with is_present&quot; do
-        @resource.options.has_key?(:ensure).should == false
+        @resource.options.has_key?(:ensures).should == false
         @resource.is_present
-        @resource.options[:ensure].should == &quot;present&quot;
+        @resource.options[:ensures].should == &quot;present&quot;
       end
       it &quot;should write the option ensures as absent with is_absent&quot; do
-        @resource.options.has_key?(:ensure).should == false
+        @resource.options.has_key?(:ensures).should == false
         @resource.is_absent
-        @resource.options[:ensure].should == &quot;absent&quot;
+        @resource.options[:ensures].should == &quot;absent&quot;
       end
       it &quot;should write the option unless for ifnot&quot; do
         @resource.options.has_key?(:unless).should == false
         @resource.ifnot &quot;str&quot;
         @resource.options[:unless].should == &quot;str&quot;
       end
-      describe &quot;templating&quot; do
-        before(:each) do
-          FileUtils.stub!(:cp).and_return true        
-        end
-        it &quot;should have the method template&quot; do
-          @resource.respond_to?(:template).should == true
-        end
-        it &quot;should raise an exception if no file is given&quot; do
-          lambda {
-            @resource.template
-          }.should raise_error
-        end
-        it &quot;should not raise an exception if there is a file passed and the file is found&quot; do
-          File.stub!(:file?).and_return true
-          lambda {
-            @resource.template(&quot;radar&quot;)
-          }.should_not raise_error
-        end
-        # it &quot;should push the template option on to the options&quot; do
-        #   File.stub!(:file?).with(&quot;radar&quot;).and_return true
-        #   @resource.options.has_key?(:template).should == false
-        #   @resource.template(&quot;radar&quot;)
-        #   @resource.options.has_key?(:template).should == true
-        # end
-      end
     end
     describe &quot;command&quot; do
-      include PoolParty::Resources
       before(:each) do
-        @cloud = cloud :command_cloud do; end
+        @tc = TestBaseClass.new do
+          has_file(:name =&gt; &quot;frank&quot;)
+        end
+        @cloud = @tc
       end
       describe &quot;add_resource&quot; do
         it &quot;should call add_resource when creating using the command: file&quot; do
-          @cloud.should_receive(:add_resource).with(:file, {:name =&gt; &quot;frank&quot;}, @cloud)
+          @cloud.should_receive(:add_resource).with(:file, {:name =&gt; &quot;frank&quot;})
           @cloud.instance_eval do
-            file(:name =&gt; &quot;frank&quot;)
+            __file(:name =&gt; &quot;frank&quot;)
           end
         end
         it &quot;should return a resource when the resource does not exist&quot; do
-          file(:name =&gt; &quot;/etc/frank.txt&quot;).class.should == PoolParty::Resources::File
+          @cloud.resource(:file).first.class.should == PoolParty::Resources::File
         end
         it &quot;should return a resource when the resource does exist&quot; do
-          file(:name =&gt; &quot;frank&quot;)
-          file(:name =&gt; &quot;frank&quot;).class.should == PoolParty::Resources::File
+          @cloud.instance_eval do
+            resources[:file] = nil
+            has_file({:name =&gt; &quot;frank&quot;})
+          end
+          @cloud.resource(:file).first.class.should == PoolParty::Resources::File
         end
       end
       it &quot;should create the new 'resource' as a resource&quot; do
-        resource(:file).class.should == Array
-      end
-      it &quot;should receive &lt;&lt; when adding a new one&quot; do
-        resource(:file).should_receive(:&lt;&lt;).once
-        has_file({:name =&gt; &quot;pop&quot;})
+        @tc.resource(:file).class.should == Array
       end
       it &quot;should contain 3 instances after calling resource 3 times&quot; do
-        file({:name =&gt; &quot;red&quot;})
-        file({:name =&gt; &quot;hot&quot;})
-        file({:name =&gt; &quot;summer&quot;})
-        resource(:file).size.should == 3
+        @cloud.instance_eval do
+          resources[:file] = nil
+          has_file({:name =&gt; &quot;red&quot;})
+          has_file({:name =&gt; &quot;hot&quot;})
+          has_file({:name =&gt; &quot;summer&quot;})
+        end
+        @tc.resource(:file).size.should == 3
       end
       describe &quot;adding&quot; do
         before(:each) do
-          @a = file({:name =&gt; &quot;red&quot;})
-          @b = file({:name =&gt; &quot;hot&quot;})
-          @c = file({:name =&gt; &quot;summer&quot;})
+          @cloud.instance_eval do
+            resources[:file] = nil
+            has_file({:name =&gt; &quot;red&quot;})
+            has_file({:name =&gt; &quot;hot&quot;})
+            has_file({:name =&gt; &quot;summer&quot;})
+          end
         end
         it &quot;should contain file named with 'red'&quot; do
-          get_resource(:file, &quot;red&quot;).nil?.should == false
+          @cloud.get_resource(:file, &quot;red&quot;).nil?.should == false
         end
       end
       describe &quot;method_missing&quot; do
         before(:each) do
-          file({:name =&gt; &quot;red&quot;})
-          file({:name =&gt; &quot;hot&quot;})
-          file({:name =&gt; &quot;summer&quot;})
+          @cloud.instance_eval do
+            resources[:file] = nil
+            has_file({:name =&gt; &quot;red&quot;})
+            has_file({:name =&gt; &quot;hot&quot;})
+            has_file({:name =&gt; &quot;summer&quot;})
+          end
         end
         it &quot;should be able to pick out methods with the phrase has_&quot; do
           lambda {
-            has_file
+            @cloud.instance_eval do
+              has_file({:name =&gt; &quot;summer&quot;})
+            end
           }.should_not raise_error
         end
-        it &quot;should not have a method prepended with crabs_&quot; do
-          lambda {
-            crabs_file
-          }.should raise_error
-        end
         it &quot;should pick out methods with the phrase does_not_&quot; do
           lambda {
-            does_not_have_file({:name =&gt; &quot;red&quot;})
+            @cloud.instance_eval do
+              does_not_have_file({:name =&gt; &quot;summer&quot;})
+            end
           }.should_not raise_error
         end
-        it &quot;should set the has_file to present ensure&quot; do
-          has_file({:name =&gt; &quot;redface&quot;})
-          resource(:file).get_named(&quot;redface&quot;).first.options[:ensure].should == &quot;present&quot;
-        end
-        it &quot;should set the does_not_have_file to absent ensure&quot; do
-          does_not_have_file({:name =&gt; &quot;net&quot;})
-          resource(:file).get_named(&quot;net&quot;).first.options[:ensure].should == &quot;absent&quot;
-        end
-        it &quot;should be able to have_service as well&quot; do
-          has_service({:name =&gt; &quot;apache&quot;})
-          resource(:service).get_named(&quot;apache&quot;).first.options[:ensure].should == &quot;running&quot;
-        end      
       end
       describe &quot;get_resource&quot; do
         before(:each) do
-          reset_resources!
-          @cloud_get_resource = cloud :get_resource do
-            file(:name =&gt; &quot;red&quot;)
-            file(:name =&gt; &quot;hot&quot;)
-            file(:name =&gt; &quot;tamales&quot;)
+          @tc.instance_eval do
+            resources[:file] = nil
+            has_file(:name =&gt; &quot;red&quot;)
+            has_file(:name =&gt; &quot;hot&quot;)
+            has_file(:name =&gt; &quot;tamales&quot;)
           end
         end
         it &quot;should return a type of resource when looking for a resource that exists&quot; do
-          @cloud_get_resource.get_resource(:file, &quot;hot&quot;).class.should == PoolParty::Resources::File
+          @tc.get_resource(:file, &quot;hot&quot;).class.should == PoolParty::Resources::File
         end
         it &quot;should return the resource of the name requested&quot; do
-          @cloud_get_resource.get_resource(:file, &quot;hot&quot;).name.should == &quot;hot&quot;
+          @tc.get_resource(:file, &quot;hot&quot;).name.should == &quot;hot&quot;
         end
         it &quot;should return nil if the resource requested is not there&quot; do
-          @cloud_get_resource.get_resource(:file, &quot;smarties&quot;).should be_nil
+          @tc.get_resource(:file, &quot;smarties&quot;).nil?.should == true
         end
         it &quot;should not have created any more resources&quot; do
-          @cloud_get_resource.resource(:file).size.should == 3
-        end
-      end
-      describe &quot;parent&quot; do
-        before(:each) do
-          @cloud = cloud :orange do
-            tangerine &quot;orange&quot;
-            file(:name =&gt; &quot;file.txt&quot;)
-          end
-          @file = @cloud.resources[:file].first
-        end
-        it &quot;should take the options of the parent&quot; do        
-          @file.parent.tangerine.should_not == nil
-        end
-        it &quot;should set the option as the same from the parent&quot; do
-          @file.parent.tangerine.should == &quot;orange&quot;
+          @tc.resource(:file).size.should == 3
         end
       end
       describe &quot;appending to resource&quot; do
         before(:each) do
-          @cloud1 = cloud :apples do
-            directory(:name =&gt; &quot;/var/www&quot;) do
-              file(:name =&gt; &quot;/var/www/file.html&quot;)
+          @tc = TestBaseClass.new do
+            has_directory(:name =&gt; &quot;/var/www&quot;) do
+              has_file(:name =&gt; &quot;/var/www/file.html&quot;)
             end
           end
-          @dir = @cloud1.get_resource(:directory, &quot;/var/www&quot;)
-          @file = @dir.get_resource(:file, &quot;/var/www/file.html&quot;)
+          @dir = @tc.resource(:directory).first
+          @file = @tc.resource(:file).first
         end
         it &quot;should say there is 1 resource because the lower-level resources should be contained on the parenting resource&quot; do
-          @cloud1.resources.size.should == 1
-        end
-        it &quot;should set the exec to notify apache2&quot; do
-          has_service(&quot;apache2&quot;)
-          has_exec(:name =&gt; &quot;reload-page&quot;, :notify =&gt; get_service(&quot;apache2&quot;))
-          resource(:exec).get_named(&quot;reload-page&quot;).first.options[:notify].to_s.should == &quot;Service['apache2']&quot;
+          @tc.resources.size.should == 2
         end
         it &quot;should say there is one resource on the outer resource&quot; do
           @dir.resources.size.should == 1
         end
         it &quot;should contain the file as a resource&quot; do
-          @dir.resource(:file)[0].to_s.should == @file.to_s
-        end
-        it &quot;should set the parent as the parenting resource&quot; do
-          @file.parent.to_s.should == @dir.to_s
-        end
-      end
-      describe &quot;handle_option_value&quot; do
-        it &quot;should turn a string into a hash with the string as the key name&quot; do
-          handle_option_values(&quot;vat of cats&quot;).should == {:name =&gt; &quot;vat of cats&quot;}
-        end
-        it &quot;should not change a hash into anything&quot; do
-          handle_option_values({:name =&gt; &quot;poe&quot;}).should == {:name =&gt; &quot;poe&quot;}
+          @dir.resource(:file)[0].class.should == PoolParty::Resources::File
         end
       end
       describe &quot;fetching&quot; do
         before(:each) do
-          @file = file(:name =&gt; &quot;pancakes&quot;)
-        end
-        it &quot;should not create a new resource if the same resource exists&quot; do
-          PoolParty::Resources::File.should_not_receive(:new)
-          file(:name =&gt; &quot;pancakes&quot;)
-        end
-        it &quot;should return the file preiously created&quot; do
-          get_resource(:file, &quot;pancakes&quot;).options.keys.sort.should == @file.options.keys.sort
-        end
-        it &quot;should be able to use the helper to grab the file&quot; do
-          PoolParty::Resources::File.should_not_receive(:new)
-          self.stub!(:key).and_return &quot;false&quot;
-          file(:name =&gt; &quot;pancakes&quot;).name.should == @file.name
-        end
-        it &quot;should turn the resource into a string&quot; do
-          @file.to_s.should == &quot;File['pancakes']&quot;
-        end
-        describe &quot;cancelled&quot; do
-          it &quot;should make a resource not cancelled by default&quot; do
-            @file.cancelled?.should == false
-          end
-          it &quot;should say cancelled? is true if it has been cancelled&quot; do
-            @file.cancel
-            @file.cancelled?.should == true
-          end
-          it &quot;should be able to get the file from the helper&quot; do
-            get_file(&quot;pancakes&quot;).options.keys.sort.should == @file.options.keys.sort
+          @tc = TestBaseClass.new do
+            has_file(:name =&gt; &quot;pancakes&quot;)
           end
+          @file = @tc.resource(:file).first
         end
-        describe &quot;virtual_resources&quot; do
-          before(:each) do
-            @virtual_resource = git(:at =&gt; &quot;/var/paint/cans&quot;, :name =&gt; &quot;tank&quot;, :source =&gt; &quot;git://github.com/auser/testgit.git&quot;)
-          end
-          it &quot;should fetch a virtual resource the same&quot; do
-            git(:at =&gt; &quot;/var/paint/cans&quot;, :name =&gt; &quot;tank&quot;, :source =&gt; &quot;git://github.com/auser/testgit.git&quot;).to_s.should == @virtual_resource.to_s
-          end
-        end
-      end
-      describe &quot;global resources&quot; do
-        describe &quot;setting&quot; do
-          before(:each) do        
-            @cloud2 = cloud :applepie do          
-              directory(:name =&gt; &quot;/var/www&quot;) do
-                file(:name =&gt; &quot;/var/www/file.html&quot;)
-              end
-            end
-            @cloud2 = cloud(:applepie)
-          end
-          it &quot;should have a global_resources_store available as an Array&quot; do
-            @cloud2.global_resources_store.class.should == Array
-          end
-          it &quot;should have stored the two resources from the cloud into the global_resources_store&quot; do
-            @cloud2.global_resources_store.size.should &gt;= 2
-          end
-          it &quot;should be an array of resources&quot; do
-            @cloud2.global_resources_store.first.is_a?(PoolParty::Resources::Resource).should == true
-          end
-          it &quot;should say that the type directory of name /var/www is in the global_resources_store&quot; do
-            @cloud2.in_global_resource_store?(:directory, &quot;/var/www&quot;).should == true
-          end
-          it &quot;should say that the type file of the name /var/www/file.html is in the global_resources_store&quot; do
-            @cloud2.in_global_resource_store?(:file, &quot;/var/www/file.html&quot;).should == true
-          end
-          it &quot;should say tht the type exec of the name echo 'hello' is not in the global_resources_store&quot; do
-            @cloud2.in_global_resource_store?(:exec, &quot;echo 'hello'&quot;).should == false
-          end
-          it &quot;should say that the resource is in the global_resources_store when put in the global_resources_store&quot; do
-            @file1 = PoolParty::Resources::File.new(:name =&gt; &quot;/var/tmp.txt&quot;)
-            @cloud2.store_into_global_resource_store(@file1)
-            @cloud2.in_global_resource_store?(:file, &quot;/var/tmp.txt&quot;)
-          end
-          it &quot;should put the resource into the global_resources_store when calling store_into_global_resource_store&quot; do
-            @file2 = PoolParty::Resources::File.new({:name =&gt; &quot;/var/bunk.txt&quot;})
-            @cloud2.global_resources_store.should_receive(:&lt;&lt;).with(@file2)
-            @cloud2.store_into_global_resource_store(@file2)
-          end
-          it &quot;should not put a resource into the global_resources_store if it's already there&quot; do
-            @file3 = PoolParty::Resources::File.new({:name =&gt; &quot;/var/www/file.html&quot;})
-            @cloud2.global_resources_store.should_not_receive(:&lt;&lt;).with(@file3)
-            @cloud2.store_into_global_resource_store(@file3)
-          end
-          it &quot;should be able to get the resource from the global_resources_store by the name and type&quot; do
-            @cloud2.get_from_global_resource_store(:directory, &quot;/var/www&quot;).key.should == &quot;/var/www&quot;
-          end
-          describe &quot;adding to global resource store&quot; do
-            before(:each) do
-              @cloud3 = cloud :pumpkinpie do          
-                file(:name =&gt; &quot;/var/www/pumpkinfile.html&quot;)
-                file(:name =&gt; &quot;/var/www/pumpkinfile.html&quot;)
-                apache do
-                  file(:name =&gt; &quot;/var/www/pumpkinfile.html&quot;)
-                end
-              end
-              @cloud3 = cloud(:pumpkinpie)
-            end
-            it &quot;should not have 2 of the same resources&quot; do
-              @cloud3.resource(:file).size.should == 1
-            end
-          end
-          describe &quot;grabbing after already instantiated&quot; do
-            before(:each) do
-              @cloud2.instance_eval do
-                has_package(:name =&gt; &quot;apache2&quot;) do
-                  has_exec(:name =&gt; &quot;Add apache2 module&quot;) do
-                    command &quot;a2enmod mpm_worker&quot;
-                  end
-                end
-                has_package(:name =&gt; &quot;boxers&quot;) do
-                  has_file(:name =&gt; &quot;/var/list_of_boxers.txt&quot;, :requires =&gt; (get_package(&quot;apache2&quot;)) )
-                end
-              end
-            end
-            describe &quot;same_resources_of&quot; do
-              it &quot;should say that two resources are the same&quot; do
-                has_file(:name =&gt; &quot;tanks&quot;)
-                has_file(:name =&gt; &quot;tanks&quot;).same_resources_of(:file, &quot;tanks&quot;).should == true
-              end
-              it &quot;should say that two resources are the same regardless of their context&quot; do
-                @cloud2.instance_eval do
-                  has_file(:name =&gt; &quot;mighty_mighty_bosstones&quot;)
-                end
-                @cloud2.resource(:file).first.same_resources_of(:file, &quot;mighty_mighty_bosstones&quot;).should == true
-              end
-              it &quot;should say that two resources are not the same if they are not the same&quot; do
-                has_file(:name =&gt; &quot;trees&quot;).same_resources_of(:file, &quot;timber&quot;).should == false
-              end
-            end
-            it &quot;should grab the resource when called in in a block&quot;# do
-            #   @cloud2.resources_string_from_resources(@cloud2.resources).should =~ /\[ Package\['apache2'\], Package\['boxers'\] \]/
-            # end
-          end
-          describe &quot;inherited&quot; do
-            it &quot;should turn passengersite_with_ssl into PassengerSiteWithSsl&quot; do
-              &quot;PassengersiteWithSsl&quot;.to_s.split(&quot;::&quot;)[-1].underscore.should == &quot;passengersite_with_ssl&quot;
-            end
-          end
+        it &quot;should return the file preiously created&quot; do
+          @tc.resource(:file).first.options.keys.sort.should == @file.options.keys.sort
         end
       end
     end    </diff>
      <filename>spec/poolparty/poolparty/resource_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ include PoolParty::Resources
 
 describe &quot;Script&quot; do
   before(:each) do
-    reset_resources!
+    
     setup
   end
   describe &quot;wrapped&quot; do
@@ -14,59 +14,36 @@ describe &quot;Script&quot; do
     it &quot;should have inflate_file as an instance method&quot; do
       Script.respond_to?(:inflate_file).should == true
     end
-    it &quot;should have inflate as an instance method&quot; do
-      Script.new.respond_to?(:inflate).should == true
-    end
 
     describe &quot;with a script&quot; do
-      before(:each) do
-        @script = 'script' 
-        @filename = 'filename'
-
-        @pool = Script.new
-        Script.stub!(:new).and_return(@pool)
-        @pool.stub!(:inflate).and_return true
-      end
-
-      it &quot;should create a new Script when calling on the class method&quot; do
-        Script.should_receive(:new).and_return @pool      
-      end    
-      it &quot;should instance eval the script&quot; do
-        @pool.should_receive(:instance_eval).with(@script, @filename).and_return true
-      end
-      it &quot;should call inflate on itself&quot; do
-        @pool.should_receive(:inflate).and_return true
-      end
-      after do
-        Script.inflate(@script, @filename)
-      end
-      describe &quot;save!&quot; do
-        before(:each) do
-          reset!
-          reset_resources!
-          pool :appdotcomcool do
-            keypair &quot;snoodle&quot;
-            ami &quot;ami-123456&quot;
-            
-            cloud :app do
-              expand_when &quot;cpu &gt; 90&quot;, &quot;memory &gt; 80&quot;
-              contract_when &quot;cpu &lt; 10&quot;, &quot;memory &lt; 10&quot;
-              
-              has_file :name =&gt; &quot;/etc/httpd/httpd.conf&quot;
-            end
-          end
-          @saved = Script.save!(false)
-        end
-        it &quot;should save the keypair&quot; do
-          @saved.should =~ /keypair 'snoodle'/
-        end
-        it &quot;should save the ami&quot; do
-          @saved.should =~ /ami 'ami-123456'/
-        end
-        it &quot;should save the expansions&quot; do
-          @saved.should =~ /expand_when 'cpu&gt;90', 'memory&gt;80'/
-        end
-      end
+      # describe &quot;save!&quot; do
+      #   before(:each) do
+      #     reset!
+      # 
+      #     pool :appdotcomcool do
+      #       ami &quot;ami-123456&quot;
+      #       
+      #       cloud :app do
+      #         expand_when &quot;cpu &gt; 90&quot;, &quot;memory &gt; 80&quot;
+      #         contract_when &quot;cpu &lt; 10&quot;, &quot;memory &lt; 10&quot;
+      #         
+      #         has_file :name =&gt; &quot;/etc/httpd/httpd.conf&quot;
+      #       end
+      #     end
+      #     @saved = Script.save!(false)
+      #   end
+      #   it &quot;should save the full keypair&quot; do
+      #     @saved.should =~ /keypair ([\w -\/]+)+id_rsa'/
+      #   end
+      #   it &quot;should save the ami&quot; do
+      #     @saved.should =~ /ami 'ami-123456'/
+      #   end
+      #   it &quot;should save the expansions&quot; do
+      #     @saved.should =~ /expand_when 'cpu&gt;90', 'memory&gt;80'/
+      #   end
+      # end
+      # NOT ENTIRELY CERTAIN THIS SHOULD WORK THE SAME WAY IT WORKED BEFORE
+      # AL
     end
   end
-end
\ No newline at end of file
+end</diff>
      <filename>spec/poolparty/poolparty/script_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,19 +1,20 @@
 class WebServers
-  plugin :apache do
-    include PoolParty::Resources
-    
+  plugin :apachetest do    
     attr_accessor :php
     
-    def enable      
+    def loaded(o={}, &amp;block)
+      @loaded ||= true
+    end
+    
+    def enable
     end
     
     def enable_php
       @php = true
-      php
     end
     
     def php
-      @php
+      @php ||= false
     end
     
     def site(name=:domain1, opts={})
@@ -24,24 +25,6 @@ class WebServers
       opts = {
         :document_root =&gt; opts[:document_root] || &quot;/www/#{name}/&quot;
       }
-      call_function &quot;virtual_host()&quot;
-    end
-        
-    custom_function &lt;&lt;-EOE
-define virtual_host($docroot, $ip, $order = 500, $ensure = &quot;enabled&quot;) { 
-    $file = &quot;/etc/sites-available/$name.conf&quot; 
-    file { $file: 
-        content =&gt; template(&quot;virtual_host.erb&quot;), 
-        notify =&gt; Service[apache] 
-    } 
-    file { &quot;/etc/sites-enabled/$order-$name.conf&quot;: 
-        ensure =&gt; $ensure ? { 
-            enabled =&gt; $file, 
-            disabled =&gt; absent 
-        } 
-    } 
-}
-    EOE
-        
+    end        
   end
 end</diff>
      <filename>spec/poolparty/poolparty/test_plugins/webserver.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,18 +2,18 @@ require File.dirname(__FILE__) + '/spec_helper'
 
 describe &quot;PoolParty&quot; do
   after(:all) do
-    # FileUtils.rm_r(Base.storage_directory) rescue &quot;&quot;
+    # FileUtils.rm_r(Default.storage_directory) rescue &quot;&quot;
   end
   it &quot;should have the method copy_file_to_storage_directory on the PoolParty&quot; do
     PoolParty.respond_to?(:copy_file_to_storage_directory).should == true
   end
   it &quot;should copy the file given with File&quot; do
-    FileUtils.should_receive(:cp).with(&quot;haymaker&quot;, Base.storage_directory + &quot;/haymaker&quot;).once
+    FileUtils.should_receive(:cp).with(&quot;haymaker&quot;, Default.storage_directory + &quot;/haymaker&quot;).once
     PoolParty.copy_file_to_storage_directory(&quot;haymaker&quot;)
   end
   describe &quot;writing file to storage_directory&quot; do
     before(:each) do
-      @path = &quot;#{Base.storage_directory}/happydayz&quot;
+      @path = &quot;#{Default.storage_directory}/happydayz&quot;
     end
     it &quot;should have the method write_to_file_in_storage_directory&quot; do
       PoolParty.respond_to?(:write_to_file_in_storage_directory).should == true
@@ -31,6 +31,6 @@ describe &quot;PoolParty&quot; do
     end
   end
   it &quot;should have a logger&quot; do
-    PoolParty.log.should_not be_nil
+    PoolParty.log.should_not == nil
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/poolparty_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,31 +2,39 @@ require File.dirname(__FILE__) + '/../../spec_helper'
 
 describe &quot;Capistrano provisioner&quot; do
   before(:each) do
-    @cloud = cloud :app do;end
-    @remote_instance = PoolParty::Remote::RemoteInstance.new({:ip =&gt; &quot;192.168.0.1&quot;, :status =&gt; &quot;running&quot;, :name =&gt; &quot;master&quot;}, @cloud)
-    stub_list_from_remote_for(@cloud)
+    @cloud = new_test_cloud
+    stub_remoter_for(@cloud)
   end
   describe &quot;instance&quot; do
-    before(:each) do
-      @pb = PoolParty::Provisioner::Capistrano.new(@remote_instance, @cloud)
-    end
-    it &quot;should create the config on the initialize&quot; do    
-      @pb.config.class.should == ::Capistrano::Configuration
-    end
-    describe &quot;config&quot; do
-      it &quot;should create the config at ::Capistrano::Logger::INFO if the cloud is verbose&quot; do
-        @cloud.stub!(:verbose).and_return true
-        PoolParty::Provisioner::Capistrano.new(nil, @cloud).config.logger.level.should == ::Capistrano::Logger::INFO
-      end
-      it &quot;should create the config at ::Capistrano::Logger::IMPORTANT if the cloud is not verbose&quot; do
-        @cloud.stub!(:verbose).and_return false
-        PoolParty::Provisioner::Capistrano.new(nil, @cloud).config.logger.level.should == ::Capistrano::Logger::IMPORTANT
-      end
-    end
-    describe &quot;install tasks&quot; do
-      it &quot;should have the configure tasks included&quot; do
-        @pb.master_install_tasks.include?(&quot;custom_configure_tasks&quot;).should == true
-      end
+    it &quot;should be meaningfully spec'd&quot; do
+      pending
     end
+    # before(:each) do
+    #   @pb = PoolParty::Provisioner::Capistrano.new(@remote_instance, @cloud)
+    # end
+    # it &quot;should have the cloud set as the cloud&quot; do      
+    #   @pb.cloud.should == @cloud
+    # end
+    # it &quot;should create the config on the initialize&quot; do    
+    #   @pb.config.class.should == ::Capistrano::Configuration
+    # end
+    # describe &quot;config&quot; do
+    #   it &quot;should create the config at ::Capistrano::Logger::INFO if the cloud is verbose&quot; do
+    #     @cloud.stub!(:verbose).and_return true
+    #     PoolParty::Provisioner::Capistrano.new(nil, @cloud).config.logger.level.should == ::Capistrano::Logger::INFO
+    #   end
+    #   it &quot;should create the config at ::Capistrano::Logger::IMPORTANT if the cloud is not verbose&quot; do
+    #     @cloud.stub!(:verbose).and_return false
+    #     PoolParty::Provisioner::Capistrano.new(nil, @cloud).config.logger.level.should == ::Capistrano::Logger::IMPORTANT
+    #   end
+    # end
+    # describe &quot;install tasks&quot; do
+    #   it &quot;should have the configure tasks included&quot; do
+    #     @pb.master_install_tasks.include?(&quot;custom_configure_tasks&quot;).should == true
+    #   end
+    #   it &quot;should call the copy_gem_bins_to_usr_bin method&quot; do
+    #     pending
+    #   end
+    # end
   end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/provisioners/capistrano/capistrano_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,9 @@ include Provisioner
 
 describe &quot;ProvisionerBase&quot; do
   before(:each) do    
-    @cloud = cloud :app do;end
+    ::Suitcase::Zipper.stub!(:gems).and_return true
+    # ::Suitcase::Zipper.stub!(:packages).and_return true
+    @cloud = new_test_cloud
     @remote_instance = PoolParty::Remote::RemoteInstance.new({:ip =&gt; &quot;192.168.0.1&quot;, :status =&gt; &quot;running&quot;, :name =&gt; &quot;master&quot;}, @cloud)
     @pb = PoolParty::Provisioner::ProvisionerBase.new(@remote_instance, @cloud)
     stub_list_from_remote_for(@cloud)
@@ -23,6 +25,7 @@ describe &quot;ProvisionerBase&quot; do
     describe &quot;in action&quot; do
       it &quot;should call a new ProvisionerBase&quot; do
         ProvisionerBase.should_receive(:new).with(@remote_instance, @cloud).and_return @pb
+        @cloud.stub!(:remote_instances_list).and_return sample_instances_list
         ProvisionerBase.install(@remote_instance, @cloud)
       end
     end
@@ -32,6 +35,7 @@ describe &quot;ProvisionerBase&quot; do
       @pb = PoolParty::Provisioner::ProvisionerBase.new(@remote_instance, @cloud)
       stub_list_from_remote_for(@pb)
       stub_list_from_remote_for(@cloud)
+      @cloud.stub!(:remote_instances_list).and_return sample_instances_list
       stub_remoting_methods_for(@pb)
     end
     it &quot;should store the instance on the ProvisionerBase&quot; do</diff>
      <filename>spec/poolparty/provisioners/provisioner_base_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,8 @@
 $:.unshift(File.dirname(__FILE__) + '/../../lib')
 require 'poolparty'
 
+# TODO: FIX THE STUBS
+# %w(context matchy).each do |library|
 %w(spec).each do |library|
   begin
     require library
@@ -12,33 +14,78 @@ end
 # Dir[&quot;#{File.dirname(__FILE__)}/helpers/**&quot;].each {|a| require a}
 
 ENV[&quot;POOL_SPEC&quot;] = nil
+ENV[&quot;AWS_ACCESS_KEY&quot;] = 'fake_access_key'
+ENV[&quot;AWS_SECRET_ACCESS_KEY&quot;] = 'fake_aws_secret_access_key'
 
 include PoolParty
 extend PoolParty
 
-def debugging
-  false
-end
-def are_too_many_instances_running?  
-end
-def are_any_nodes_exceeding_minimum_runtime?  
+def debugging(*args); false; end
+def are_too_many_instances_running?; end
+def are_any_nodes_exceeding_minimum_runtime?; end
+def are_too_few_instances_running?; end
+
+include Remote
+require File.dirname(__FILE__)+'/net/remoter_bases/ec2_mocks_and_stubs.rb'
+
+# Append this directory - which contains a mock key named id_rsa - to the list of searchable locations 
+class Key
+  class &lt;&lt; self
+    alias :keypair_paths_without_spec_dir :keypair_paths unless method_defined?(:keypair_paths_without_spec_dir)
+    def keypair_paths
+      [keypair_paths_without_spec_dir, File.dirname(__FILE__)].flatten
+    end
+  end
+  
 end
-def are_too_few_instances_running?
+
+class TestRemoterClass &lt; ::PoolParty::Remote::Ec2
+  include CloudResourcer
+  include CloudDsl
+  
+  def ami;&quot;ami-abc123&quot;;end
+  def size; &quot;small&quot;;end
+  def security_group; &quot;default&quot;;end
+  def ebs_volume_id; &quot;ebs_volume_id&quot;;end
+  def availabilty_zone; &quot;us-east-1a&quot;;end
+  def verbose; false; end
+  def debugging; false; end
+  def ec2
+    @ec2 ||= EC2::Base.new( :access_key_id =&gt; &quot;not_an_access_key&quot;, :secret_access_key =&gt; &quot;not_a_secret_access_key&quot;)
+  end
+  def describe_instances(o={})
+    response_list_of_instances
+  end
 end
 
-class TestClass &lt; PoolParty::Cloud::Cloud
+class TestClass &lt; ::PoolParty::Cloud::Cloud
   include CloudResourcer
+  include PoolParty::Remote
   attr_accessor :parent
-  def initialize(&amp;block)
-    super :test_cloud, nil, &amp;block
+  def initialize(name=:name, &amp;block)
+    super :test_cloud, &amp;block
   end
-  def keypair
-    &quot;fake_keypair&quot;
+  def verbose
+    false
   end
 end
+class TestCloud &lt; TestClass  
+end
+
+class TestBaseClass &lt; PoolParty::PoolPartyBaseClass
+end
 
 def setup
-  PoolParty::Messenger.stub!(:messenger_send!).and_return false
+  PoolParty::Messenger.stub!(:messenger_send!).and_return false  
+end
+
+def new_test_cloud(force_new=false)
+  unless @test_cloud || force_new
+    @test_cloud = TestCloud.new(&quot;test_cloud_#{rand(10000)}&quot;)
+    stub_list_from_remote_for @test_cloud
+    @test_cloud.stub!(:describe_instances).and_return response_list_of_instances
+  end
+  @test_cloud
 end
 
 def setup_cl
@@ -93,9 +140,17 @@ def stub_list_from_local_for(o)
 
   @ris = @list.split(/\n/).map {|line| PoolParty::Remote::RemoteInstance.new(line) }
 end
-def stub_remoter_for(o)
-  o.stub!(:ec2).and_return EC2::Base.new( :access_key_id =&gt; &quot;not a key&quot;,  :secret_access_key =&gt; &quot;even more not a key&quot;)
+def stub_remoter_for(o)  
+  @ec2 = EC2::Base.new( :access_key_id =&gt; &quot;not a key&quot;,  :secret_access_key =&gt; &quot;even more not a key&quot;)
+  EC2::Base.stub!(:new).and_return @ec2
+  
+  o.class.stub!(:ec2).and_return @ec2 
   o.stub!(:list_of_running_instances).and_return sample_instances
+  
+  o.stub!(:list_of_instances).and_return sample_instances
+  @ec2.stub!(:run_instances).and_return true
+  @ec2.stub!(:describe_instances).and_return sample_instances
+  @ec2.stub!(:describe_instance).and_return sample_instances
 end
 def stub_list_from_remote_for(o, launch_stub=true)
   stub_remoter_for(o)
@@ -109,8 +164,6 @@ def stub_list_from_remote_for(o, launch_stub=true)
   stub_remoting_methods_for(o)
 end
 def stub_remoting_methods_for(o)
-  o.stub!(:keypair).and_return &quot;fake_keypair&quot;
-  o.stub!(:keypair_path).and_return &quot;~/.ec2/fake_keypair&quot;
   o.stub!(:other_clouds).and_return []
   o.stub!(:expand_when).and_return &quot;cpu &gt; 10&quot;
   o.stub!(:copy_file_to_storage_directory).and_return true
@@ -125,20 +178,26 @@ def stub_remoting_methods_for(o)
   o.stub!(:can_expand_cloud?).and_return false
 end
 def stub_list_of_instances_for(o)  
-  # o.stub!(:list_of_running_instances).once.and_return running_remote_instances
-  o.stub!(:keypair).and_return &quot;fake_keypair&quot;
-  o.stub!(:describe_instances).and_return response_list_of_instances
+  o.stub!(:list_of_running_instances).once.and_return running_remote_instances
+  # o.stub!(:describe_instances).and_return response_list_of_instances
+end
+
+def stub_running_remote_instances(o)
+  o.stub!(:list_of_running_instances).and_return(running_remote_instances.map {|h| PoolParty::Remote::RemoteInstance.new(h) })
 end
 
 def response_list_of_instances(arr=[])
   unless @response_list_of_instances
     @a1 = stub_instance(1); 
     @a1[:name] = &quot;master&quot;
-    @a2 = stub_instance(1); @a3 = stub_instance(2, &quot;terminated&quot;); @a4 = stub_instance(3, &quot;pending&quot;)
-    @b1 = stub_instance(4, &quot;shutting down&quot;, &quot;blist&quot;); @c1 = stub_instance(5, &quot;pending&quot;, &quot;clist&quot;)
+    @a2 = stub_instance(1); 
+    @a3 = stub_instance(2, &quot;terminated&quot;); 
+    @a4 = stub_instance(3, &quot;pending&quot;)
+    @b1 = stub_instance(4, &quot;shutting down&quot;, &quot;blist&quot;); 
+    @c1 = stub_instance(5, &quot;pending&quot;, &quot;clist&quot;)
     @response_list_of_instances = [@a1, @a2, @a3, @a4, @b1, @c1]
   end
-  @response_list_of_instances
+  @response_list_of_instances+arr
 end
 
 def running_remote_instances
@@ -179,4 +238,26 @@ class Object
   def messenger_send!(*args)
     true
   end
+end
+
+class Object
+  def to_html_list
+    str = ''
+    str &lt;&lt; &quot;&lt;ul&gt;&quot;
+    str &lt;&lt; self.collect {|k,v| 
+      &quot;&lt;li&gt;#{k} =&gt; #{(v.instance_of?(Hash) || v.instance_of?(Array)) ? v.to_html_list : v.inspect}&lt;/li&gt; &quot;
+      }.join(&quot; &quot;)
+    str &lt;&lt; &quot;&lt;/ul&gt;&quot;
+  end
+end
+
+class Array 
+    def to_html_list
+         str =''
+        str&lt;&lt; &quot;&lt;ul class='array'&gt;&quot;
+        str&lt;&lt; self.collect {|v| 
+          &quot;&lt;li&gt;#{(v.is_a?(Array) || v.is_a?(Hash)) ? v.to_html_list : v.inspect}&lt;/li&gt;&quot;
+          }.join(' ')
+        str&lt;&lt;&quot;&lt;/ul&gt;&quot;
+    end
 end
\ No newline at end of file</diff>
      <filename>spec/poolparty/spec_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,75 +1,82 @@
-namespace(:dev) do
-  task :initialize do
-    Kernel.system&quot;mkdir ~/.ec2 &gt;/dev/null 2&gt;/dev/null&quot; unless File.directory?(&quot;~/.ec2&quot;)      
-  end
-  # Setup a basic development environment for the user 
-  desc &quot;Setup development environment specify the config_file&quot;
-  task :setup =&gt; [:initialize, :setup_keypair] do    
-    certloc = &quot;#{Base.ec2_dir}/#{Base.keypair}/cert-*.pem 2&gt;/dev/null&quot;
-    pkloc = &quot;#{Base.ec2_dir}/#{Base.keypair}/pk-*.pem 2&gt;/dev/null&quot;
-    unless `ls #{certloc}`.length &gt; 1 &amp;&amp; `ls #{pkloc}`.length &gt; 1
-      puts &lt;&lt;-EOM
-Make sure you run rake dev:setup_pemkeys before you run this command
-
-I cannot continue until your keys are setup. 
-exiting...
-      EOM
-      exit
+namespace :poolparty do
+  namespace(:ec2) do
+    
+    task :initialize do
+      Kernel.system&quot;mkdir ~/.ec2 &gt;/dev/null 2&gt;/dev/null&quot; unless File.directory?(&quot;~/.ec2&quot;)      
     end
-    keyfilename = &quot;.#{Base.keypair}_pool_keys&quot;
-    run &lt;&lt;-EOR
-      echo 'export AWS_ACCESS_KEY=\&quot;#{Base.access_key}\&quot;' &gt; $HOME/#{keyfilename}
-      echo 'export AWS_SECRET_ACCESS=\&quot;#{Base.secret_access_key}\&quot;' &gt;&gt; $HOME/#{keyfilename}
-      echo 'export EC2_HOME=\&quot;#{Base.ec2_dir}\&quot;' &gt;&gt; $HOME/#{keyfilename}
-      echo 'export KEYPAIR_NAME=\&quot;#{Base.keypair}\&quot;' &gt;&gt; $HOME/#{keyfilename}
-      echo 'export EC2_PRIVATE_KEY=`ls ~/.ec2/#{Base.keypair}/pk-*.pem`;' &gt;&gt; $HOME/#{keyfilename}
-      echo 'export EC2_CERT=`ls ~/.ec2/#{Base.keypair}/cert-*.pem`;' &gt;&gt; $HOME/#{keyfilename}
-    EOR
-    puts &lt;&lt;-EOM
-To work on this cloud, source the file like: 
+    # Setup a basic development environment for the user 
+    
+    desc &quot;Setup development environment specify the config_file&quot;
+    task :setup =&gt; [:initialize, :setup_keypair] do    
+      certloc = &quot;#{Default.ec2_dir}/#{Default.keypair}/cert-*.pem 2&gt;/dev/null&quot;
+      pkloc = &quot;#{Default.ec2_dir}/#{Default.keypair}/pk-*.pem 2&gt;/dev/null&quot;
+      unless `ls #{certloc}`.length &gt; 1 &amp;&amp; `ls #{pkloc}`.length &gt; 1
+        puts &lt;&lt;-EOM
+  Make sure you run rake dev:setup_pemkeys before you run this command
+
+  I cannot continue until your keys are setup. 
+  exiting...
+        EOM
+        exit
+      end
+      keyfilename = &quot;.#{Default.keypair}_pool_keys&quot;
+      run &lt;&lt;-EOR
+        echo 'export AWS_ACCESS_KEY=\&quot;#{Default.access_key}\&quot;' &gt; $HOME/#{keyfilename}
+        echo 'export AWS_SECRET_ACCESS=\&quot;#{Default.secret_access_key}\&quot;' &gt;&gt; $HOME/#{keyfilename}
+        echo 'export EC2_HOME=\&quot;#{Default.ec2_dir}\&quot;' &gt;&gt; $HOME/#{keyfilename}
+        echo 'export KEYPAIR_NAME=\&quot;#{Default.keypair}\&quot;' &gt;&gt; $HOME/#{keyfilename}
+        echo 'export EC2_PRIVATE_KEY=`ls ~/.ec2/#{Default.keypair}/pk-*.pem`;' &gt;&gt; $HOME/#{keyfilename}
+        echo 'export EC2_CERT=`ls ~/.ec2/#{Default.keypair}/cert-*.pem`;' &gt;&gt; $HOME/#{keyfilename}
+      EOR
+      puts &lt;&lt;-EOM
+  To work on this cloud, source the file like: 
   
-  source $HOME/#{keyfilename}
+    source $HOME/#{keyfilename}
   
-    EOM
-  end
-  desc &quot;Generate a new keypair&quot;
-  task :setup_keypair =&gt; [:initialize] do
-    Base.keypair ||= &quot;#{File.basename(Dir.pwd)}&quot;    
-    run &quot;ec2-delete-keypair #{Base.keypair}&quot; if File.file?(Base.keypair_path)
-    puts &quot;-- setting up keypair named #{Base.keypair} in #{Base.keypair_path}&quot;
-    run &lt;&lt;-EOR        
-      chmod 600 #{Base.keypair_path} 2&gt;/dev/null
-      mkdir ~/.ec2/#{Base.keypair} 2&gt;/dev/null
-      ec2-add-keypair #{Base.keypair} &gt; #{Base.keypair_path}
-    EOR
-  end
-  desc &quot;Setup pem keys&quot;
-  task :setup_pemkeys =&gt; [:initialize] do    
-    puts &quot;Setting up stubbed pem keys in ~/.ec2/#{Base.keypair}&quot;
-    run &lt;&lt;-EOR
-      mkdir -p ~/.ec2/#{Base.keypair} 2&gt;/dev/null
-      echo 'UPDATE ME' &gt; #{Base.ec2_dir}/#{Base.keypair}/cert-UPDATEME.pem
-      echo 'UPDATE ME' &gt; #{Base.ec2_dir}/#{Base.keypair}/pk-UPDATEME.pem
-    EOR
-    puts &quot;Don't forget to replace your ~/.ec2/#{Base.keypair}/*.pem keys with the real amazon keys&quot;
-  end
-  desc &quot;initialize setup&quot;
-  task :init =&gt; [:setup_pemkeys]
-  desc &quot;Authorize base ports for application&quot;
-  task :authorize_ports =&gt; :initialize do
-    run &lt;&lt;-EOR
-      ec2-authorize -p 22 default
-      ec2-authorize -p 80 default
-    EOR
-  end
-  desc &quot;Turn the gemspec into a yaml file&quot;
-  task :gemspec_to_yaml =&gt; [:initialize, :gemspec] do
-    filepath = ::File.join(::File.dirname(__FILE__), &quot;..&quot;, &quot;poolparty.gemspec&quot;)
-    data = open(filepath).read
-    spec = eval(&quot;$SAFE = 3\n#{data}&quot;)
-    yml = YAML.dump spec
-    File.open(filepath, &quot;w+&quot;) do |f|
-      f &lt;&lt; yml
+      EOM
+    end
+    
+    desc &quot;Generate a new keypair&quot;
+    task :setup_keypair =&gt; [:initialize] do
+      Default.keypair ||= &quot;#{File.basename(Dir.pwd)}&quot;    
+      run &quot;ec2-delete-keypair #{Default.keypair}&quot; if File.file?(Default.keypair_path)
+      puts &quot;-- setting up keypair named #{Default.keypair} in #{Default.keypair_path}&quot;
+      run &lt;&lt;-EOR        
+        chmod 600 #{Default.keypair_path} 2&gt;/dev/null
+        mkdir ~/.ec2/#{Default.keypair} 2&gt;/dev/null
+        ec2-add-keypair #{Default.keypair} &gt; #{Default.keypair_path}
+      EOR
+    end
+    
+    desc &quot;Setup pem keys&quot;
+    task :setup_pemkeys =&gt; [:initialize] do    
+      puts &quot;Setting up stubbed pem keys in ~/.ec2/#{Default.keypair}&quot;
+      run &lt;&lt;-EOR
+        mkdir -p ~/.ec2/#{Default.keypair} 2&gt;/dev/null
+        echo 'UPDATE ME' &gt; #{Default.ec2_dir}/#{Default.keypair}/cert-UPDATEME.pem
+        echo 'UPDATE ME' &gt; #{Default.ec2_dir}/#{Default.keypair}/pk-UPDATEME.pem
+      EOR
+      puts &quot;Don't forget to replace your ~/.ec2/#{Default.keypair}/*.pem keys with the real amazon keys&quot;
+    end
+    
+    desc &quot;initialize setup&quot;
+    task :init =&gt; [:setup_pemkeys]
+    desc &quot;Authorize base ports for application&quot;
+    task :authorize_ports =&gt; :initialize do
+      run &lt;&lt;-EOR
+        ec2-authorize -p 22 default
+        ec2-authorize -p 80 default
+      EOR
+    end
+    
+    desc &quot;Turn the gemspec into a yaml file&quot;
+    task :gemspec_to_yaml =&gt; [:initialize, :gemspec] do
+      filepath = ::File.join(::File.dirname(__FILE__), &quot;..&quot;, &quot;poolparty.gemspec&quot;)
+      data = open(filepath).read
+      spec = eval(&quot;$SAFE = 3\n#{data}&quot;)
+      yml = YAML.dump spec
+      File.open(filepath, &quot;w+&quot;){ |f|f &lt;&lt; yml }
     end
+    
   end
 end
\ No newline at end of file</diff>
      <filename>tasks/development.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,42 +1,44 @@
 # Tasks to be run on the server
-namespace(:server) do                
-  task :init  do
-    PoolParty::Coordinator.init(false)
-  end
-  # bundle, upload and register your bundle on the server
-  desc &quot;Bundle, upload and register your ami&quot;
-  task :all =&gt; [:bundle, :upload, :register] do
-    puts &quot;== your ami is ready&quot;
-  end
-  # Cleanup the /mnt directory
-  desc &quot;Clean the /mnt directory&quot;
-  task :clean_mnt do
-    `rm -rf /mnt/image* img*`
-  end
-  # Before we can bundle, we have to make sure we have the cert and pk files
-  desc &quot;Ensure the required bundle files are present in /mnt&quot;
-  task :check_bundle_files do
-    raise Exception.new(&quot;You must have a private key in your /mnt directory&quot;) unless File.exists?(&quot;/mnt/pk-*.pem&quot;)
-    raise Exception.new(&quot;You must have your access key in your /mnt directory&quot;) unless File.exists?(&quot;/mnt/cert-*.pem&quot;)          
-  end
-  # Bundle the image
-  desc &quot;Bundle this image into the /mnt directory&quot;
-  task :bundle =&gt; [:clean_mnt, :check_bundle_files] do
-    puts `ec2-bundle-vol -k /mnt/pk-*.pem -u '#{Planner.user_id}' -d /mnt -c /mnt/cert-*.pem -r i386`
-  end
-  # Upload the bundle into the app_name bucket
-  desc &quot;Upload the bundle to your bucket with a unique name: deletes old ami&quot;
-  task :upload =&gt; [:init, :delete_bucket] do
-    puts `ec2-upload-bundle -b #{Planner.app_name} -m /mnt/image.manifest.xml -a #{Planner.access_key} -s #{Planner.secret_access_key}`
-  end
-  # Register the bucket with amazon and get back an ami
-  desc &quot;Register the bundle with amazon&quot;
-  task :register do
-    puts `ec2-register -K /mnt/pk-*.pem -C /mnt/cert-*.pem #{Planner.app_name}/image.manifest.xml`
-  end
-  # Delete the bucket
-  desc &quot;Delete the bucket with the bundle under tha app name&quot;
-  task :delete_bucket do
-    Planner.app_name.delete_bucket 
+namespace :poolparty do
+  namespace :server do                
+    task :init  do
+      PoolParty::Coordinator.init(false)
+    end
+    # bundle, upload and register your bundle on the server
+    desc &quot;Bundle, upload and register your ami&quot;
+    task :all =&gt; [:bundle, :upload, :register] do
+      puts &quot;== your ami is ready&quot;
+    end
+    # Cleanup the /mnt directory
+    desc &quot;Clean the /mnt directory&quot;
+    task :clean_mnt do
+      `rm -rf /mnt/image* img*`
+    end
+    # Before we can bundle, we have to make sure we have the cert and pk files
+    desc &quot;Ensure the required bundle files are present in /mnt&quot;
+    task :check_bundle_files do
+      raise Exception.new(&quot;You must have a private key in your /mnt directory&quot;) unless File.exists?(&quot;/mnt/pk-*.pem&quot;)
+      raise Exception.new(&quot;You must have your access key in your /mnt directory&quot;) unless File.exists?(&quot;/mnt/cert-*.pem&quot;)          
+    end
+    # Bundle the image
+    desc &quot;Bundle this image into the /mnt directory&quot;
+    task :bundle =&gt; [:clean_mnt, :check_bundle_files] do
+      puts `ec2-bundle-vol -k /mnt/pk-*.pem -u '#{Planner.user_id}' -d /mnt -c /mnt/cert-*.pem -r i386`
+    end
+    # Upload the bundle into the app_name bucket
+    desc &quot;Upload the bundle to your bucket with a unique name: deletes old ami&quot;
+    task :upload =&gt; [:init, :delete_bucket] do
+      puts `ec2-upload-bundle -b #{Planner.app_name} -m /mnt/image.manifest.xml -a #{Planner.access_key} -s #{Planner.secret_access_key}`
+    end
+    # Register the bucket with amazon and get back an ami
+    desc &quot;Register the bundle with amazon&quot;
+    task :register do
+      puts `ec2-register -K /mnt/pk-*.pem -C /mnt/cert-*.pem #{Planner.app_name}/image.manifest.xml`
+    end
+    # Delete the bucket
+    desc &quot;Delete the bucket with the bundle under tha app name&quot;
+    task :delete_bucket do
+      Planner.app_name.delete_bucket 
+    end
   end
 end
\ No newline at end of file</diff>
      <filename>tasks/server.rake</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>Manifest.txt</filename>
    </removed>
    <removed>
      <filename>bin/pool-console</filename>
    </removed>
    <removed>
      <filename>bin/server-list-responding</filename>
    </removed>
    <removed>
      <filename>config/hoe.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/dependency_resolutions/base.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/dependency_resolutions/puppet.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/modules/configurable.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/modules/method_missing_sugar.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/net/remote.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/net/remote_bases/ec2.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/net/remote_bases/ec2/ec2_response_object.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/net/remoter.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/plugins/line.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/base.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/class_package.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/conditional.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/cron.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/custom_service.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/directory.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/exec.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/file.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/gem_package.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/host.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/mount.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/package.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/remote_file.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/remote_user.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/service.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/sshkey.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/symlink.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/poolparty/resources/variable.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/provisioners/capistrano/recipies/base.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/provisioners/capistrano/recipies/master.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/provisioners/capistrano/recipies/slave.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/server/agent.rb</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/templates/puppet.conf</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/templates/puppetcleaner</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/templates/puppetrerun</filename>
    </removed>
    <removed>
      <filename>lib/poolparty/templates/puppetrunner</filename>
    </removed>
    <removed>
      <filename>pkg/poolparty.gem</filename>
    </removed>
    <removed>
      <filename>script/txt2html</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/dependency_resolutions/base_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/modules/configurable_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/net/remote_bases/ec2_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/base_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/class_package_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/conditional_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/cron_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/directory_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/exec_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/file_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/gem_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/host_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/package_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/remote_file_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/service_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/sshkey_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/symlink_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/user_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/poolparty/poolparty/resources/variable_spec.rb</filename>
    </removed>
    <removed>
      <filename>tasks/deployment.rake</filename>
    </removed>
    <removed>
      <filename>tasks/website.rake</filename>
    </removed>
    <removed>
      <filename>website/index.html</filename>
    </removed>
    <removed>
      <filename>website/index.txt</filename>
    </removed>
    <removed>
      <filename>website/javascripts/rounded_corners_lite.inc.js</filename>
    </removed>
    <removed>
      <filename>website/stylesheets/code.css</filename>
    </removed>
    <removed>
      <filename>website/stylesheets/screen.css</filename>
    </removed>
    <removed>
      <filename>website/template.html.erb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>c56fac32c7366f91ecae80e497c6fafe6d8f0121</id>
    </parent>
  </parents>
  <author>
    <name>fairchild</name>
    <email>fairchild@stimble.net</email>
  </author>
  <url>http://github.com/jashmenn/poolparty/commit/9b872a0e26b000729d2928cbe1496222dd9d5309</url>
  <id>9b872a0e26b000729d2928cbe1496222dd9d5309</id>
  <committed-date>2009-04-01T11:50:54-07:00</committed-date>
  <authored-date>2009-04-01T11:50:54-07:00</authored-date>
  <message>merge deps_remoter_merge branch.
This brings in the several core changes:
# Provides a properties_hash which represents the defined state of our pool.
# First phase of chef support
# New, simpler bootstrapping and provisioning system
# Redesigned remoter_bases to more easily add alternate remoter bases thru subclassing of the base RemoterBase class.
# break out specific functionality into gems where possible
## dslify
## parenting
## Suitcase, a new gem for packaging up dependencies to a directory or tarball</message>
  <tree>ddca6dd5c819282cf2260df6b1b3e88245d1a866</tree>
  <committer>
    <name>fairchild</name>
    <email>fairchild@stimble.net</email>
  </committer>
</commit>
