auser-poolparty 1.3.5 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +2 -2
- data/VERSION.yml +1 -1
- data/bin/cloud-misc +34 -0
- data/bin/{poolparty-setup → cloud-setup} +0 -0
- data/bin/cloud-ssh +4 -1
- data/config/jeweler.rb +4 -3
- data/examples/monitored_cloud.rb +1 -1
- data/examples/thrift/thrift_example.rb +5 -3
- data/examples/vmware.rb +10 -0
- data/lib/cloud_providers/cloud_provider_instance.rb +13 -4
- data/lib/cloud_providers/connections.rb +1 -1
- data/lib/core/file.rb +12 -0
- data/lib/dependency_resolvers/base.rb +1 -1
- data/lib/dependency_resolvers/chef.rb +7 -5
- data/lib/dependency_resolvers/proxy_object.rb +11 -3
- data/lib/poolparty.rb +3 -1
- data/lib/poolparty/base.rb +1 -2
- data/lib/poolparty/cloud.rb +20 -5
- data/lib/poolparty/default.rb +1 -0
- data/lib/poolparty/plugin.rb +1 -5
- data/lib/poolparty/plugins/apache.rb +8 -6
- data/lib/poolparty/plugins/collectd.rb +24 -0
- data/lib/poolparty/plugins/collectd/templates/collectd.conf.erb +369 -0
- data/lib/poolparty/plugins/hermes.rb +89 -0
- data/lib/poolparty/pool.rb +26 -3
- data/lib/poolparty/resource.rb +12 -11
- data/lib/poolparty/resources/line.rb +2 -2
- data/lib/poolparty/resources/variable.rb +4 -3
- data/lib/proto/command_interface_handler.rb +17 -1
- data/lib/proto/gen-py/cloudthrift/CommandInterface.pyc +0 -0
- data/lib/proto/gen-py/cloudthrift/__init__.pyc +0 -0
- data/lib/proto/gen-py/cloudthrift/constants.pyc +0 -0
- data/lib/proto/gen-py/cloudthrift/ttypes.pyc +0 -0
- data/lib/proto/gen-py/thrift/Thrift.pyc +0 -0
- data/lib/proto/gen-py/thrift/__init__.pyc +0 -0
- data/lib/proto/gen-py/thrift/protocol/TBinaryProtocol.pyc +0 -0
- data/lib/proto/gen-py/thrift/protocol/TProtocol.pyc +0 -0
- data/lib/proto/gen-py/thrift/protocol/__init__.pyc +0 -0
- data/lib/proto/gen-py/thrift/transport/TSocket.pyc +0 -0
- data/lib/proto/gen-py/thrift/transport/TTransport.pyc +0 -0
- data/lib/proto/gen-py/thrift/transport/__init__.pyc +0 -0
- data/test/lib/dependency_resolvers/chef_test.rb +92 -100
- data/test/lib/poolparty/cloud_test.rb +50 -2
- data/test/lib/poolparty/monitor_test.rb +2 -2
- data/test/lib/poolparty/resource_test.rb +5 -0
- data/test/lib/poolparty/resources/variable_test.rb +33 -10
- metadata +11 -4
    
        data/lib/poolparty/pool.rb
    CHANGED
    
    | @@ -2,6 +2,11 @@ module PoolParty | |
| 2 2 |  | 
| 3 3 | 
             
              class Pool < DslBase
         | 
| 4 4 |  | 
| 5 | 
            +
                default_options(
         | 
| 6 | 
            +
                  :minimum_instances        => nil,     # minimum_instances default
         | 
| 7 | 
            +
                  :maximum_instances        => nil     # maximum_instances default
         | 
| 8 | 
            +
                )
         | 
| 9 | 
            +
                
         | 
| 5 10 | 
             
                # Freeze the pool_name so we can't modify it at all
         | 
| 6 11 | 
             
                # call and run instance_eval on the block and then call the after_create callback
         | 
| 7 12 | 
             
                def initialize(n, &block)
         | 
| @@ -26,12 +31,25 @@ module PoolParty | |
| 26 31 | 
             
                # Define a cloud by a name and a block
         | 
| 27 32 | 
             
                def cloud(name, o={}, &block)
         | 
| 28 33 | 
             
                  if block
         | 
| 29 | 
            -
                    clouds[name.to_s] ||= PoolParty::Cloud.new(name, o, &block)
         | 
| 34 | 
            +
                    clouds[name.to_s] ||= PoolParty::Cloud.new(name, soakable_options.merge(o), &block)
         | 
| 30 35 | 
             
                  else
         | 
| 31 36 | 
             
                    raise PoolPartyError.new("CloudError", "You must pass a block when defining a cloud")
         | 
| 32 37 | 
             
                  end
         | 
| 33 38 | 
             
                end
         | 
| 34 39 |  | 
| 40 | 
            +
                # Soaked options
         | 
| 41 | 
            +
                # These are options that can be set on the pool that will be grabbed from the pool
         | 
| 42 | 
            +
                # that can be set to the cloud. 
         | 
| 43 | 
            +
                # Soakable options:
         | 
| 44 | 
            +
                #   minimum_instances
         | 
| 45 | 
            +
                #   maximum_instances
         | 
| 46 | 
            +
                def soakable_options
         | 
| 47 | 
            +
                  soaked_options = {}
         | 
| 48 | 
            +
                  soaked_options.merge!(:minimum_instances => minimum_instances) if minimum_instances
         | 
| 49 | 
            +
                  soaked_options.merge!(:maximum_instances => maximum_instances) if maximum_instances
         | 
| 50 | 
            +
                  soaked_options
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
                
         | 
| 35 53 | 
             
                # Run twice to catch the errors on the first run
         | 
| 36 54 | 
             
                # TODO: CHANGE ME!
         | 
| 37 55 | 
             
                def form_clouds
         | 
| @@ -98,6 +116,7 @@ module PoolParty | |
| 98 116 | 
             
                    else
         | 
| 99 117 | 
             
                      find_default_clouds_dot_rb(filename)
         | 
| 100 118 | 
             
                    end
         | 
| 119 | 
            +
                  ENV["CLOUDS_DOT_RB"] = f
         | 
| 101 120 | 
             
                  load_from_file(f)
         | 
| 102 121 | 
             
                end
         | 
| 103 122 |  | 
| @@ -133,10 +152,14 @@ module PoolParty | |
| 133 152 | 
             
                #   + sets up the log
         | 
| 134 153 | 
             
                def self.before_file_load(filepath)
         | 
| 135 154 | 
             
                  $:.unshift(::File.dirname(filepath))
         | 
| 136 | 
            -
                  Dir["#{ ::File.dirname(filepath)}/plugins | 
| 155 | 
            +
                  Dir["#{ ::File.dirname(filepath)}/{plugins,lib}/**/*"].each do |plugin_path| 
         | 
| 137 156 | 
             
                    if File.directory?(plugin_path)
         | 
| 138 157 | 
             
                      $:.unshift(plugin_path)
         | 
| 139 | 
            -
             | 
| 158 | 
            +
             | 
| 159 | 
            +
                      ["#{plugin_path}/#{File.basename(plugin_path)}", "#{plugin_path}/lib/#{File.basename(plugin_path)}"].each do |potential|
         | 
| 160 | 
            +
                        require potential if File.exists?(potential)
         | 
| 161 | 
            +
                      end
         | 
| 162 | 
            +
             | 
| 140 163 | 
             
                    elsif File.file?(plugin_path) && plugin_path.match(/.rb$/)
         | 
| 141 164 | 
             
                      require plugin_path
         | 
| 142 165 | 
             
                    end
         | 
    
        data/lib/poolparty/resource.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            module PoolParty
         | 
| 2 2 | 
             
              class Resource < Base
         | 
| 3 3 |  | 
| 4 | 
            -
                 | 
| 4 | 
            +
                attr_accessor :exists
         | 
| 5 5 | 
             
                attr_accessor :meta_notifies, :meta_not_if, :meta_only_if, :meta_subscribes
         | 
| 6 6 | 
             
                attr_accessor :graph_index
         | 
| 7 7 |  | 
| @@ -12,9 +12,9 @@ module PoolParty | |
| 12 12 | 
             
                  :provider       => nil
         | 
| 13 13 | 
             
                )
         | 
| 14 14 |  | 
| 15 | 
            -
                def initialize(opts={}, extra_opts={}, &block)
         | 
| 16 | 
            -
                  @exists  | 
| 17 | 
            -
                  super
         | 
| 15 | 
            +
                def initialize(opts={}, extra_opts={}, exists=true, &block)
         | 
| 16 | 
            +
                  @exists ||= exists
         | 
| 17 | 
            +
                  super(opts, extra_opts, &block)
         | 
| 18 18 | 
             
                  valid?
         | 
| 19 19 | 
             
                end
         | 
| 20 20 |  | 
| @@ -88,7 +88,10 @@ module PoolParty | |
| 88 88 | 
             
                # Should this resource exist on the remote systems
         | 
| 89 89 | 
             
                # which is a lookup of the instance variable 
         | 
| 90 90 | 
             
                # on the instance of the resource
         | 
| 91 | 
            -
                # The default is that the resource DOES exist | 
| 91 | 
            +
                # The default is that the resource DOES exist
         | 
| 92 | 
            +
                def exists(n=nil)
         | 
| 93 | 
            +
                  @exists
         | 
| 94 | 
            +
                end
         | 
| 92 95 | 
             
                alias :exists? :exists
         | 
| 93 96 |  | 
| 94 97 | 
             
                # The resource exists in the output and should be created
         | 
| @@ -172,15 +175,13 @@ module PoolParty | |
| 172 175 | 
             
                # PoolParty classes that use Base
         | 
| 173 176 | 
             
                def self.define_resource(res)
         | 
| 174 177 | 
             
                  Base.class_eval <<-EOE
         | 
| 175 | 
            -
                    def has_#{res.has_method_name}(a={},b={} | 
| 176 | 
            -
                      obj = #{res}.new(a,b,&block)
         | 
| 177 | 
            -
                      obj.exists!
         | 
| 178 | 
            +
                    def has_#{res.has_method_name}(a={},b={},e=true, &block)
         | 
| 179 | 
            +
                      obj = #{res}.new(a,b,e,&block)
         | 
| 178 180 | 
             
                      resources << obj
         | 
| 179 181 | 
             
                      obj
         | 
| 180 182 | 
             
                    end
         | 
| 181 | 
            -
                    def does_not_have_#{res.has_method_name}(a={},b={},&block)
         | 
| 182 | 
            -
                      obj = has_#{res.has_method_name}(a,b,&block)
         | 
| 183 | 
            -
                      obj.does_not_exist!
         | 
| 183 | 
            +
                    def does_not_have_#{res.has_method_name}(a={},b={},e=false,&block)
         | 
| 184 | 
            +
                      obj = has_#{res.has_method_name}(a,b,e,&block)
         | 
| 184 185 | 
             
                      obj
         | 
| 185 186 | 
             
                    end
         | 
| 186 187 | 
             
                    def #{res.has_method_name}s
         | 
| @@ -36,9 +36,9 @@ module PoolParty | |
| 36 36 | 
             
                      {:command => "grep -q \'#{line.safe_quote}\' #{filepath} || echo \'#{line.safe_quote}\' >> #{filepath}",
         | 
| 37 37 | 
             
                      :not_if => "grep -q \'#{line.safe_quote}\' #{filepath}"}
         | 
| 38 38 | 
             
                    else
         | 
| 39 | 
            -
                      {:command => "cat #{filepath} | grep -v \'#{line.safe_quote}\' >  | 
| 39 | 
            +
                      {:command => "cat #{filepath} | grep -v \'#{line.safe_quote}\' > tempfile && mv tempfile #{filepath}",
         | 
| 40 40 | 
             
                      :only_if => "grep -q \'#{line.safe_quote}\' #{filepath}"}
         | 
| 41 | 
            -
                    end | 
| 41 | 
            +
                    end
         | 
| 42 42 |  | 
| 43 43 | 
             
                    opts.merge!(:name => exists? ? "line in #{filepath}" : "no line in #{filepath}")
         | 
| 44 44 |  | 
| @@ -33,7 +33,7 @@ module PoolParty | |
| 33 33 | 
             
                    :value => nil
         | 
| 34 34 | 
             
                  )
         | 
| 35 35 |  | 
| 36 | 
            -
                  def initialize(k, v=nil)
         | 
| 36 | 
            +
                  def initialize(k, v=nil, exists=true)
         | 
| 37 37 | 
             
                    case k
         | 
| 38 38 | 
             
                    when Hash
         | 
| 39 39 | 
             
                      super
         | 
| @@ -41,7 +41,7 @@ module PoolParty | |
| 41 41 | 
             
                      if value.is_a?(Hash)
         | 
| 42 42 | 
             
                        super(v.merge(:name => k))
         | 
| 43 43 | 
             
                      else
         | 
| 44 | 
            -
                        super(:name => k, :value => v)
         | 
| 44 | 
            +
                        super({:name => k, :value => v})
         | 
| 45 45 | 
             
                      end
         | 
| 46 46 | 
             
                    end
         | 
| 47 47 | 
             
                  end
         | 
| @@ -51,7 +51,8 @@ module PoolParty | |
| 51 51 | 
             
                  def print_to_chef
         | 
| 52 52 | 
             
                    # Variable
         | 
| 53 53 | 
             
                    # TODO: Variable => <%= name %>
         | 
| 54 | 
            -
                    "poolparty[:#{name}] = #{value}"
         | 
| 54 | 
            +
                    # "poolparty[:#{name}] = #{value}"
         | 
| 55 | 
            +
                    :no_print
         | 
| 55 56 | 
             
                  end
         | 
| 56 57 |  | 
| 57 58 | 
             
                end
         | 
| @@ -6,7 +6,23 @@ class CommandInterfaceHandler | |
| 6 6 | 
             
                cr.command = command
         | 
| 7 7 | 
             
                resp = begin
         | 
| 8 8 | 
             
                  the_cloud = clouds[cld.name]
         | 
| 9 | 
            -
                   | 
| 9 | 
            +
                  if the_cloud
         | 
| 10 | 
            +
                    if command.include?(".")
         | 
| 11 | 
            +
                      command.split(".").inject([]) do |sum, cmd|
         | 
| 12 | 
            +
                        if cmd.match(/\((.*)\)/)
         | 
| 13 | 
            +
                          args = $1
         | 
| 14 | 
            +
                          new_cmd = cmd.gsub(args, '').gsub(/\(\)/, '')
         | 
| 15 | 
            +
                          sum = arr.send(new_cmd.to_sym, *args)
         | 
| 16 | 
            +
                        else
         | 
| 17 | 
            +
                          sum = arr.send(cmd)
         | 
| 18 | 
            +
                        end
         | 
| 19 | 
            +
                      end
         | 
| 20 | 
            +
                    else
         | 
| 21 | 
            +
                      the_cloud.send(command.to_sym, *args)
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  else
         | 
| 24 | 
            +
                    "Cloud not found: #{cld.name}"
         | 
| 25 | 
            +
                  end
         | 
| 10 26 | 
             
                rescue Exception => e
         | 
| 11 27 | 
             
                  cr.response = "Error: #{e.inspect}"
         | 
| 12 28 | 
             
                end
         | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| @@ -4,70 +4,74 @@ include_fixture_resources | |
| 4 4 | 
             
            include_chef_only_resources
         | 
| 5 5 |  | 
| 6 6 | 
             
            class ChefTest < Test::Unit::TestCase
         | 
| 7 | 
            -
              include PoolParty
         | 
| 8 7 |  | 
| 9 | 
            -
               | 
| 10 | 
            -
                 | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
                  @cookboox_directory = test_dir/"cookbooks"/"poolparty"
         | 
| 14 | 
            -
                  
         | 
| 15 | 
            -
                  @resources = {
         | 
| 16 | 
            -
                    :variables => Resources::Variable.new(:animal, "Duck"),
         | 
| 17 | 
            -
                    :files => Resources::FileResource.new(:name => "/etc/motd", :content => "Welcome to a fake file"),
         | 
| 18 | 
            -
                    :directories => Resources::Directory.new("/etc/poolparty"),
         | 
| 19 | 
            -
                    :http_request => PoolParty::Resources::HttpRequest.new("posting data", :url => "http://check.in", :message => {:some => "data"}, :action => :post),
         | 
| 20 | 
            -
                    :link => PoolParty::Resources::Link.new("/tmp/passwd", :to => "/etc/passwd"),
         | 
| 21 | 
            -
                    :chef_recipe => PoolParty::Resources::ChefRecipe.new(fixtures_dir/"chef"/"recipes"/"sudo")
         | 
| 22 | 
            -
                  }
         | 
| 23 | 
            -
                end
         | 
| 8 | 
            +
              def setup
         | 
| 9 | 
            +
                @base = DependencyResolvers::Chef
         | 
| 10 | 
            +
                @base.compile_directory = test_dir
         | 
| 11 | 
            +
                @cookboox_directory = test_dir/"cookbooks"/"poolparty"
         | 
| 24 12 |  | 
| 25 | 
            -
                 | 
| 26 | 
            -
                   | 
| 27 | 
            -
             | 
| 13 | 
            +
                @resources = {
         | 
| 14 | 
            +
                  :variables => PoolParty::Resources::Variable.new(:bird, "Fowl"),
         | 
| 15 | 
            +
                  :files => PoolParty::Resources::FileResource.new(:name => "/etc/motd", :content => "Welcome to a fake file"),
         | 
| 16 | 
            +
                  :directories => PoolParty::Resources::Directory.new("/etc/poolparty"),
         | 
| 17 | 
            +
                  :http_request => PoolParty::Resources::HttpRequest.new("posting data", :url => "http://check.in", :message => {:some => "data"}, :action => :post),
         | 
| 18 | 
            +
                  :link => PoolParty::Resources::Link.new("/tmp/passwd", :to => "/etc/passwd"),
         | 
| 19 | 
            +
                  :chef_recipe => PoolParty::Resources::ChefRecipe.new(fixtures_dir/"chef"/"recipes"/"sudo")
         | 
| 20 | 
            +
                }
         | 
| 28 21 |  | 
| 29 | 
            -
                 | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
                 | 
| 22 | 
            +
                PoolParty::Resource.define_resource_methods
         | 
| 23 | 
            +
                @inst = FakeResource.new
         | 
| 24 | 
            +
                @res = @resources[:link]
         | 
| 25 | 
            +
                @inst.has_service("apache")
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
              def teardown
         | 
| 29 | 
            +
                FileUtils.rm_rf test_dir
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
              
         | 
| 32 | 
            +
              def test_have_compile_to_chef
         | 
| 33 | 
            +
                assert @base.respond_to?(:compile_method_name)
         | 
| 34 | 
            +
                assert_equal :print_to_chef, @base.compile_method_name
         | 
| 35 | 
            +
              end
         | 
| 33 36 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
                 | 
| 37 | 
            +
              def test_be_able_to_compile_a_variable
         | 
| 38 | 
            +
                @base.compile_to(@resources[:variables], test_dir)
         | 
| 39 | 
            +
                cont = open(@cookboox_directory/"attributes"/"poolparty.rb").read
         | 
| 40 | 
            +
                assert_match /poolparty Mash\.new unless attribute\?\("poolparty"\)/, cont
         | 
| 41 | 
            +
                assert_match /poolparty\[:bird\] = \"Fowl\"\n/, cont
         | 
| 42 | 
            +
                FileUtils.rm_rf test_dir
         | 
| 43 | 
            +
              end
         | 
| 40 44 |  | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            +
              def test_be_able_to_compile_a_file
         | 
| 46 | 
            +
                @base.compile_to(@resources[:files], test_dir)
         | 
| 47 | 
            +
                assert_equal "Welcome to a fake file", open(@cookboox_directory/"templates"/"default"/"etc"/"motd.erb").read
         | 
| 48 | 
            +
              end
         | 
| 45 49 |  | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            +
              def test_be_able_to_compile_an_http_request
         | 
| 51 | 
            +
                @base.compile_to(@resources[:http_request], test_dir)
         | 
| 52 | 
            +
                assert_equal "http_request \"posting data\" do\n  action :post\n  url \"http://check.in\"\n  message :some => \"data\"\nend\n", open(@cookboox_directory/"recipes"/"default.rb").read
         | 
| 53 | 
            +
              end
         | 
| 50 54 |  | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            +
              def test_compile_to_the_recipes
         | 
| 56 | 
            +
                @base.compile_to(@resources[:files], test_dir)
         | 
| 57 | 
            +
                assert_equal "template \"/etc/motd\" do\n  source \"/etc/motd.erb\"\n  action :create\n  backup 5\n  mode 0644\n  owner \"root\"\nend\n", open(@cookboox_directory/"recipes"/"default.rb").read
         | 
| 58 | 
            +
              end
         | 
| 55 59 |  | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 60 | 
            +
              def test_compile_the_recipes
         | 
| 61 | 
            +
                @base.compile_to(@resources[:chef_recipe], test_dir)
         | 
| 62 | 
            +
                assert_equal open(fixtures_dir/"chef"/"recipes"/"sudo"/"recipes"/"default.rb").read, open(@cookboox_directory/".."/"sudo"/"recipes"/"default.rb").read
         | 
| 63 | 
            +
                assert_equal "recipe \"sudo\"", open(@cookboox_directory/"recipes"/"default.rb").read
         | 
| 64 | 
            +
              end
         | 
| 61 65 |  | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 66 | 
            +
              def test_compile_all_the_resources_when_passed_the_entire_array
         | 
| 67 | 
            +
                resources = []
         | 
| 68 | 
            +
                resources << @resources[:files]
         | 
| 69 | 
            +
                resources << @resources[:directories]
         | 
| 70 | 
            +
                resources << @resources[:variables]
         | 
| 71 | 
            +
                @base.compile(resources)
         | 
| 72 | 
            +
                ["recipes"/"default.rb", "templates"/"default"/"etc"/"motd.erb"].each do |fi|
         | 
| 73 | 
            +
                  assert File.file?(@cookboox_directory/fi)
         | 
| 74 | 
            +
                end
         | 
| 71 75 |  | 
| 72 76 | 
             
                  output =<<-EOE
         | 
| 73 77 | 
             
            template "/etc/motd" do
         | 
| @@ -91,54 +95,42 @@ EOE | |
| 91 95 | 
             
                  assert_equal output, open(@cookboox_directory/"recipes"/"default.rb").read
         | 
| 92 96 | 
             
                end
         | 
| 93 97 |  | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
                    @res.provider "http://google.com"
         | 
| 119 | 
            -
                    assert_match /provider "http:\/\/google\.com"/, @base.compile(@res)
         | 
| 120 | 
            -
                  end
         | 
| 121 | 
            -
                  
         | 
| 122 | 
            -
                  should "Add meta not_if on the resource output" do
         | 
| 123 | 
            -
                    @res.not_if "test -f /etc/passwd"
         | 
| 124 | 
            -
                    assert_match /not_if "test -f \/etc\/passwd"/, @base.compile(@res)
         | 
| 125 | 
            -
                    @res.not_if do
         | 
| 126 | 
            -
            File.file?("/etc/passwd")
         | 
| 127 | 
            -
                    end
         | 
| 128 | 
            -
                    assert_match /not_if do File.file\?\("\/etc\/passwd"\) end/, @base.compile(@res)
         | 
| 129 | 
            -
                  end
         | 
| 130 | 
            -
                  
         | 
| 131 | 
            -
                  should "Add meta only_if on the resource output" do
         | 
| 132 | 
            -
                    @res.only_if "test -f /var/poolparty/tmp"
         | 
| 133 | 
            -
                    assert_match /only_if "test -f \/var\/poolparty\/tmp"/, @base.compile(@res)
         | 
| 134 | 
            -
                    @res.only_if do
         | 
| 98 | 
            +
              def test_Add_meta_notifies_on_the_resource_output
         | 
| 99 | 
            +
                @res.notifies @inst.get_service("apache"), :reload
         | 
| 100 | 
            +
                assert_match /notifies :reload, resources\(:service => "apache"\)/, @base.compile(@res)
         | 
| 101 | 
            +
              end
         | 
| 102 | 
            +
                
         | 
| 103 | 
            +
              def test_Add_meta_subscribes_on_the_resource_output
         | 
| 104 | 
            +
                @res.subscribes @inst.get_service("apache"), :reload
         | 
| 105 | 
            +
                assert_match /subscribes :reload, resources\(:service => "apache"\), :delayed/, @base.compile(@res)
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
                      
         | 
| 108 | 
            +
              def test_Add_meta_ignore_failure_on_the_resource_output
         | 
| 109 | 
            +
                @res.ignore_failure true
         | 
| 110 | 
            +
                assert_match /ignore_failure true/, @base.compile(@res)
         | 
| 111 | 
            +
              end
         | 
| 112 | 
            +
                
         | 
| 113 | 
            +
              def test_Add_meta_provider_on_the_resource_output
         | 
| 114 | 
            +
                @res.provider "http://google.com"
         | 
| 115 | 
            +
                assert_match /provider "http:\/\/google\.com"/, @base.compile(@res)
         | 
| 116 | 
            +
              end
         | 
| 117 | 
            +
                
         | 
| 118 | 
            +
              def test_Add_meta_not_if_on_the_resource_output
         | 
| 119 | 
            +
                @res.not_if "test -f /etc/passwd"
         | 
| 120 | 
            +
                assert_match /not_if "test -f \/etc\/passwd"/, @base.compile(@res)
         | 
| 121 | 
            +
                @res.not_if do
         | 
| 135 122 | 
             
            File.file?("/etc/passwd")
         | 
| 136 | 
            -
                    end
         | 
| 137 | 
            -
                    assert_match /only_if do File.file\?\("\/etc\/passwd"\) end/, @base.compile(@res)
         | 
| 138 | 
            -
                  end
         | 
| 139 | 
            -
                  
         | 
| 140 123 | 
             
                end
         | 
| 124 | 
            +
                assert_match /not_if do File.file\?\("\/etc\/passwd"\) end/, @base.compile(@res)
         | 
| 125 | 
            +
              end
         | 
| 141 126 |  | 
| 127 | 
            +
              def test_add_meta_only_if_on_the_resource_output
         | 
| 128 | 
            +
                @res.only_if "test -f /var/poolparty/tmp"
         | 
| 129 | 
            +
                assert_match /only_if "test -f \/var\/poolparty\/tmp"/, @base.compile(@res)
         | 
| 130 | 
            +
                @res.only_if do
         | 
| 131 | 
            +
            File.file?("/etc/passwd")
         | 
| 132 | 
            +
                end
         | 
| 133 | 
            +
                assert_match /only_if do File.file\?\("\/etc\/passwd"\) end/, @base.compile(@res)
         | 
| 142 134 | 
             
              end
         | 
| 143 135 |  | 
| 144 136 | 
             
            end
         | 
| @@ -97,8 +97,9 @@ class CloudTest < Test::Unit::TestCase | |
| 97 97 | 
             
              end
         | 
| 98 98 |  | 
| 99 99 | 
             
              def test_run
         | 
| 100 | 
            -
                 | 
| 101 | 
            -
                 | 
| 100 | 
            +
                # WHAT?
         | 
| 101 | 
            +
                # result = clouds['app'].run('uptime')
         | 
| 102 | 
            +
                # assert_match /uptime/, result["app"]
         | 
| 102 103 | 
             
              end
         | 
| 103 104 |  | 
| 104 105 | 
             
              def test_os
         | 
| @@ -120,6 +121,36 @@ class CloudTest < Test::Unit::TestCase | |
| 120 121 | 
             
                # assert_equal size-1, clouds['app'].nodes.size
         | 
| 121 122 | 
             
              end
         | 
| 122 123 |  | 
| 124 | 
            +
              def test_change_ssh_port
         | 
| 125 | 
            +
                clear!
         | 
| 126 | 
            +
                pool "ssh_port" do
         | 
| 127 | 
            +
                  cloud "babity" do
         | 
| 128 | 
            +
                    ssh_port 1922
         | 
| 129 | 
            +
                  end
         | 
| 130 | 
            +
                  cloud "noneity" do
         | 
| 131 | 
            +
                  end
         | 
| 132 | 
            +
                end
         | 
| 133 | 
            +
                assert_equal 1922, clouds["babity"].ssh_port
         | 
| 134 | 
            +
                assert_equal 22, clouds["noneity"].ssh_port
         | 
| 135 | 
            +
              end
         | 
| 136 | 
            +
              
         | 
| 137 | 
            +
              
         | 
| 138 | 
            +
              def test_children_getting_parent_options
         | 
| 139 | 
            +
                clear!
         | 
| 140 | 
            +
                pool "outside" do
         | 
| 141 | 
            +
                  minimum_instances 1
         | 
| 142 | 
            +
                  maximum_instances 10
         | 
| 143 | 
            +
                  cloud "inside" do
         | 
| 144 | 
            +
                    maximum_instances 100
         | 
| 145 | 
            +
                  end
         | 
| 146 | 
            +
                end
         | 
| 147 | 
            +
                
         | 
| 148 | 
            +
                assert_equal 1, pools["outside"].minimum_instances
         | 
| 149 | 
            +
                assert_equal 10, pools["outside"].maximum_instances
         | 
| 150 | 
            +
                assert_equal 100, clouds["inside"].maximum_instances
         | 
| 151 | 
            +
                assert_equal 1, clouds["inside"].minimum_instances
         | 
| 152 | 
            +
              end
         | 
| 153 | 
            +
              
         | 
| 123 154 | 
             
              def test_monitor_dsl
         | 
| 124 155 | 
             
                clear!
         | 
| 125 156 | 
             
                pool "monitoring" do
         | 
| @@ -136,4 +167,21 @@ class CloudTest < Test::Unit::TestCase | |
| 136 167 | 
             
                assert_equal({:configure => []}, clouds["monitor_app"].run_monitor("cpu", "0.1"))
         | 
| 137 168 | 
             
                assert_equal({:vote_for => [:expand]}, clouds["monitor_app"].run_monitor("cpu", "1.4"))
         | 
| 138 169 | 
             
              end
         | 
| 170 | 
            +
              
         | 
| 171 | 
            +
              def test_add_monitoring_stack_if_needed
         | 
| 172 | 
            +
                clear!
         | 
| 173 | 
            +
                pool "monitoring2" do
         | 
| 174 | 
            +
                  cloud "app_cloud" do
         | 
| 175 | 
            +
                    keypair "test_key"
         | 
| 176 | 
            +
                    platform :ubuntu
         | 
| 177 | 
            +
                    monitor "cpu-idle" do |c|
         | 
| 178 | 
            +
                      vote_for(:expand) if c > 0.8
         | 
| 179 | 
            +
                    end
         | 
| 180 | 
            +
                  end
         | 
| 181 | 
            +
                end
         | 
| 182 | 
            +
                
         | 
| 183 | 
            +
                assert_equal 1, clouds["app_cloud"].monitors.size
         | 
| 184 | 
            +
                
         | 
| 185 | 
            +
                clouds["app_cloud"].compile
         | 
| 186 | 
            +
              end
         | 
| 139 187 | 
             
            end
         |