auser-poolparty 0.2.35 → 0.2.36
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/Manifest.txt +5 -9
 - data/bin/cloud-start +1 -1
 - data/lib/erlang/messenger/ebin/master_app.beam +0 -0
 - data/lib/erlang/messenger/ebin/node_app.beam +0 -0
 - data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
 - data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
 - data/lib/erlang/messenger/ebin/pm_event_manager.beam +0 -0
 - data/lib/erlang/messenger/ebin/pm_master_event_handler.beam +0 -0
 - data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
 - data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
 - data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
 - data/lib/erlang/messenger/src/pm_client.erl +19 -13
 - data/lib/erlang/messenger/src/pm_cluster.erl +7 -6
 - data/lib/erlang/messenger/src/pm_master.erl +5 -8
 - data/lib/poolparty/aska/aska.rb +111 -0
 - data/lib/poolparty/base_packages/poolparty.rb +23 -13
 - data/lib/poolparty/core/array.rb +3 -0
 - data/lib/poolparty/core/kernel.rb +2 -2
 - data/lib/poolparty/core/object.rb +17 -1
 - data/lib/poolparty/core/symbol.rb +6 -0
 - data/lib/poolparty/helpers/provisioner_base.rb +3 -7
 - data/lib/poolparty/helpers/provisioners/master.rb +9 -6
 - data/lib/poolparty/helpers/provisioners/slave.rb +3 -4
 - data/lib/poolparty/monitors/base_monitor.rb +32 -5
 - data/lib/poolparty/{helpers → net}/messenger.rb +1 -1
 - data/lib/poolparty/net/remoter.rb +4 -3
 - data/lib/poolparty/pool/cloud.rb +1 -1
 - data/lib/poolparty/pool/script.rb +1 -1
 - data/lib/poolparty/templates/puppetcleaner +3 -1
 - data/lib/poolparty/version.rb +1 -1
 - data/lib/poolparty.rb +1 -1
 - data/poolparty.gemspec +7 -11
 - data/spec/poolparty/aska/aska_spec.rb +97 -0
 - data/spec/poolparty/monitors/base_monitor_spec.rb +83 -2
 - data/spec/poolparty/monitors/monitors/cpu_monitor_spec.rb +0 -1
 - data/spec/poolparty/{helpers → net}/messenger_spec.rb +2 -0
 - data/spec/poolparty/net/remote_bases/ec2_spec.rb +3 -2
 - data/spec/poolparty/net/remote_instance_spec.rb +1 -0
 - data/spec/poolparty/net/remote_spec.rb +8 -1
 - data/spec/poolparty/net/remoter_base_spec.rb +4 -1
 - data/spec/poolparty/net/remoter_spec.rb +5 -0
 - data/spec/poolparty/pool/cloud_spec.rb +2 -0
 - data/spec/poolparty/pool/plugin_model_spec.rb +1 -0
 - data/spec/poolparty/pool/resource_spec.rb +3 -0
 - data/spec/poolparty/pool/script_spec.rb +14 -2
 - data/spec/poolparty/spec_helper.rb +13 -1
 - data/website/index.html +1 -1
 - metadata +7 -11
 - data/lib/erlang/messenger/utils.beam +0 -0
 
    
        data/Manifest.txt
    CHANGED
    
    | 
         @@ -37,6 +37,7 @@ bin/server-start-master 
     | 
|
| 
       37 
37 
     | 
    
         
             
            bin/server-start-node
         
     | 
| 
       38 
38 
     | 
    
         
             
            config/hoe.rb
         
     | 
| 
       39 
39 
     | 
    
         
             
            config/requirements.rb
         
     | 
| 
      
 40 
     | 
    
         
            +
            erl_crash.dump
         
     | 
| 
       40 
41 
     | 
    
         
             
            examples/basic.rb
         
     | 
| 
       41 
42 
     | 
    
         
             
            examples/plugin_without_plugin_directory.rb
         
     | 
| 
       42 
43 
     | 
    
         
             
            examples/poolparty.rb
         
     | 
| 
         @@ -143,8 +144,8 @@ lib/erlang/messenger/src/pm_node_supervisor.erl 
     | 
|
| 
       143 
144 
     | 
    
         
             
            lib/erlang/messenger/src/pm_packager.erl
         
     | 
| 
       144 
145 
     | 
    
         
             
            lib/erlang/messenger/src/utils.erl
         
     | 
| 
       145 
146 
     | 
    
         
             
            lib/erlang/messenger/useful_snippets
         
     | 
| 
       146 
     | 
    
         
            -
            lib/erlang/messenger/utils.beam
         
     | 
| 
       147 
147 
     | 
    
         
             
            lib/poolparty.rb
         
     | 
| 
      
 148 
     | 
    
         
            +
            lib/poolparty/aska/aska.rb
         
     | 
| 
       148 
149 
     | 
    
         
             
            lib/poolparty/base_packages/haproxy.rb
         
     | 
| 
       149 
150 
     | 
    
         
             
            lib/poolparty/base_packages/heartbeat.rb
         
     | 
| 
       150 
151 
     | 
    
         
             
            lib/poolparty/base_packages/poolparty.rb
         
     | 
| 
         @@ -176,7 +177,6 @@ lib/poolparty/exceptions/UnacceptableCommand.rb 
     | 
|
| 
       176 
177 
     | 
    
         
             
            lib/poolparty/helpers/binary.rb
         
     | 
| 
       177 
178 
     | 
    
         
             
            lib/poolparty/helpers/console.rb
         
     | 
| 
       178 
179 
     | 
    
         
             
            lib/poolparty/helpers/display.rb
         
     | 
| 
       179 
     | 
    
         
            -
            lib/poolparty/helpers/messenger.rb
         
     | 
| 
       180 
180 
     | 
    
         
             
            lib/poolparty/helpers/optioner.rb
         
     | 
| 
       181 
181 
     | 
    
         
             
            lib/poolparty/helpers/provisioner_base.rb
         
     | 
| 
       182 
182 
     | 
    
         
             
            lib/poolparty/helpers/provisioners/master.rb
         
     | 
| 
         @@ -194,6 +194,7 @@ lib/poolparty/modules/safe_instance.rb 
     | 
|
| 
       194 
194 
     | 
    
         
             
            lib/poolparty/monitors/base_monitor.rb
         
     | 
| 
       195 
195 
     | 
    
         
             
            lib/poolparty/monitors/monitors/cpu_monitor.rb
         
     | 
| 
       196 
196 
     | 
    
         
             
            lib/poolparty/monitors/monitors/memory_monitor.rb
         
     | 
| 
      
 197 
     | 
    
         
            +
            lib/poolparty/net/messenger.rb
         
     | 
| 
       197 
198 
     | 
    
         
             
            lib/poolparty/net/remote.rb
         
     | 
| 
       198 
199 
     | 
    
         
             
            lib/poolparty/net/remote_bases/ec2.rb
         
     | 
| 
       199 
200 
     | 
    
         
             
            lib/poolparty/net/remote_instance.rb
         
     | 
| 
         @@ -225,12 +226,6 @@ lib/poolparty/pool/resources/sshkey.rb 
     | 
|
| 
       225 
226 
     | 
    
         
             
            lib/poolparty/pool/resources/symlink.rb
         
     | 
| 
       226 
227 
     | 
    
         
             
            lib/poolparty/pool/resources/variable.rb
         
     | 
| 
       227 
228 
     | 
    
         
             
            lib/poolparty/pool/script.rb
         
     | 
| 
       228 
     | 
    
         
            -
            lib/poolparty/pool/tmp/.ppkeys
         
     | 
| 
       229 
     | 
    
         
            -
            lib/poolparty/pool/tmp/happydayz
         
     | 
| 
       230 
     | 
    
         
            -
            lib/poolparty/pool/tmp/install_master.sh
         
     | 
| 
       231 
     | 
    
         
            -
            lib/poolparty/pool/tmp/pool.spec
         
     | 
| 
       232 
     | 
    
         
            -
            lib/poolparty/pool/tmp/poolparty.pp
         
     | 
| 
       233 
     | 
    
         
            -
            lib/poolparty/pool/tmp/tc-instances.list
         
     | 
| 
       234 
229 
     | 
    
         
             
            lib/poolparty/templates/authkeys
         
     | 
| 
       235 
230 
     | 
    
         
             
            lib/poolparty/templates/cib.xml
         
     | 
| 
       236 
231 
     | 
    
         
             
            lib/poolparty/templates/gem
         
     | 
| 
         @@ -248,6 +243,7 @@ script/destroy 
     | 
|
| 
       248 
243 
     | 
    
         
             
            script/generate
         
     | 
| 
       249 
244 
     | 
    
         
             
            script/txt2html
         
     | 
| 
       250 
245 
     | 
    
         
             
            setup.rb
         
     | 
| 
      
 246 
     | 
    
         
            +
            spec/poolparty/aska/aska_spec.rb
         
     | 
| 
       251 
247 
     | 
    
         
             
            spec/poolparty/base_packages/haproxy_spec.rb
         
     | 
| 
       252 
248 
     | 
    
         
             
            spec/poolparty/base_packages/heartbeat_spec.rb
         
     | 
| 
       253 
249 
     | 
    
         
             
            spec/poolparty/bin/console_spec.rb
         
     | 
| 
         @@ -262,7 +258,6 @@ spec/poolparty/core/time_spec.rb 
     | 
|
| 
       262 
258 
     | 
    
         
             
            spec/poolparty/dependency_resolutions/base_spec.rb
         
     | 
| 
       263 
259 
     | 
    
         
             
            spec/poolparty/helpers/binary_spec.rb
         
     | 
| 
       264 
260 
     | 
    
         
             
            spec/poolparty/helpers/display_spec.rb
         
     | 
| 
       265 
     | 
    
         
            -
            spec/poolparty/helpers/messenger_spec.rb
         
     | 
| 
       266 
261 
     | 
    
         
             
            spec/poolparty/helpers/optioner_spec.rb
         
     | 
| 
       267 
262 
     | 
    
         
             
            spec/poolparty/helpers/provisioner_base_spec.rb
         
     | 
| 
       268 
263 
     | 
    
         
             
            spec/poolparty/helpers/provisioners/master_spec.rb
         
     | 
| 
         @@ -274,6 +269,7 @@ spec/poolparty/modules/file_writer_spec.rb 
     | 
|
| 
       274 
269 
     | 
    
         
             
            spec/poolparty/modules/s3_string_spec.rb
         
     | 
| 
       275 
270 
     | 
    
         
             
            spec/poolparty/monitors/base_monitor_spec.rb
         
     | 
| 
       276 
271 
     | 
    
         
             
            spec/poolparty/monitors/monitors/cpu_monitor_spec.rb
         
     | 
| 
      
 272 
     | 
    
         
            +
            spec/poolparty/net/messenger_spec.rb
         
     | 
| 
       277 
273 
     | 
    
         
             
            spec/poolparty/net/remote_bases/ec2_spec.rb
         
     | 
| 
       278 
274 
     | 
    
         
             
            spec/poolparty/net/remote_instance_spec.rb
         
     | 
| 
       279 
275 
     | 
    
         
             
            spec/poolparty/net/remote_spec.rb
         
     | 
    
        data/bin/cloud-start
    CHANGED
    
    | 
         @@ -14,7 +14,7 @@ load_pool(o.spec || Binary.get_existing_spec_location) 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
            @clouds.each do |name, cloud|
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
              with_cloud(cloud, {:testing => @testing}) do
         
     | 
| 
      
 17 
     | 
    
         
            +
              with_cloud(cloud, {:testing => @testing, :verbose => (o.verbose || false)}) do
         
     | 
| 
       18 
18 
     | 
    
         
             
                puts header("Starting cloud")
         
     | 
| 
       19 
19 
     | 
    
         
             
                puts "#{list_of_running_instances.size} running instances (#{minimum_instances} - #{maximum_instances})"
         
     | 
| 
       20 
20 
     | 
    
         
             
                if list_of_running_instances.size != 1
         
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         @@ -1,27 +1,35 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            -module (pm_client).
         
     | 
| 
       2 
2 
     | 
    
         
             
            -include_lib("../include/defines.hrl").
         
     | 
| 
       3 
     | 
    
         
            -
            -define (SERVER, global:whereis_name(?MODULE)).
         
     | 
| 
       4 
3 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            -export ([ 
     | 
| 
      
 4 
     | 
    
         
            +
            -export ([reconfigure_cloud/0, get_load/1, get_live_nodes/0, start/0]).
         
     | 
| 
      
 5 
     | 
    
         
            +
            -export ([run_cmd/1, fire_cmd/1]).
         
     | 
| 
       6 
6 
     | 
    
         
             
            -export ([provision_orphan_running_servers/0]).
         
     | 
| 
       7 
7 
     | 
    
         
             
            -export ([shutdown/0]).
         
     | 
| 
       8 
8 
     | 
    
         
             
            % Run commands on the running master process
         
     | 
| 
       9 
9 
     | 
    
         
             
            % erl -pa ./ebin/ -run pm_client get_load cpu -run init stop -noshell
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            % Connect to the master
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
            start() -> 
         
     | 
| 
      
 13 
     | 
    
         
            +
            	pong = net_adm:ping(?MASTER_LOCATION),
         
     | 
| 
      
 14 
     | 
    
         
            +
            	global:sync().
         
     | 
| 
       13 
15 
     | 
    
         
             
            % Send the command Cmd to the pm_master process
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            	 
     | 
| 
       16 
     | 
    
         
            -
            	 
     | 
| 
      
 16 
     | 
    
         
            +
            run_cmd(Cmd) ->	
         
     | 
| 
      
 17 
     | 
    
         
            +
            	Out = pm_master:run_cmd(Cmd),
         
     | 
| 
      
 18 
     | 
    
         
            +
            	io:format("~p", [Out]),
         
     | 
| 
      
 19 
     | 
    
         
            +
            	Out.
         
     | 
| 
      
 20 
     | 
    
         
            +
            fire_cmd(Cmd) ->	
         
     | 
| 
      
 21 
     | 
    
         
            +
            	Out = pm_master:fire_cmd(Cmd),
         
     | 
| 
      
 22 
     | 
    
         
            +
            	io:format("~p", [Out]),
         
     | 
| 
      
 23 
     | 
    
         
            +
            	Out.
         
     | 
| 
       17 
24 
     | 
    
         
             
            % Reconfigure the cloud
         
     | 
| 
       18 
     | 
    
         
            -
            reconfigure_cloud() -> 
         
     | 
| 
       19 
     | 
    
         
            -
            	init_conn(),
         
     | 
| 
       20 
     | 
    
         
            -
            	pm_master:reconfigure_cloud().
         
     | 
| 
      
 25 
     | 
    
         
            +
            reconfigure_cloud() -> pm_master:reconfigure_cloud().
         
     | 
| 
       21 
26 
     | 
    
         
             
            % Get the load on the cloud of type Type
         
     | 
| 
       22 
27 
     | 
    
         
             
            get_load(Type) -> 
         
     | 
| 
       23 
     | 
    
         
            -
            	 
     | 
| 
       24 
     | 
    
         
            -
            	pm_master:get_load(Type) 
     | 
| 
      
 28 
     | 
    
         
            +
            	start(),
         
     | 
| 
      
 29 
     | 
    
         
            +
            	Load = pm_master:get_load(Type),
         
     | 
| 
      
 30 
     | 
    
         
            +
            	io:format("~p", [Load]),
         
     | 
| 
      
 31 
     | 
    
         
            +
            	Load.
         
     | 
| 
      
 32 
     | 
    
         
            +
            	
         
     | 
| 
       25 
33 
     | 
    
         
             
            % Check to see if there are servers that are unprovisioned
         
     | 
| 
       26 
34 
     | 
    
         
             
            % And if there are, log in to them and start their messenger
         
     | 
| 
       27 
35 
     | 
    
         
             
            % sending the live code on the master to them
         
     | 
| 
         @@ -38,10 +46,8 @@ provision_orphan_running_servers() -> 
     | 
|
| 
       38 
46 
     | 
    
         | 
| 
       39 
47 
     | 
    
         
             
            % Get a list of the live nodes
         
     | 
| 
       40 
48 
     | 
    
         
             
            get_live_nodes() -> 
         
     | 
| 
       41 
     | 
    
         
            -
            	init_conn(),
         
     | 
| 
       42 
49 
     | 
    
         
             
            	pm_cluster:get_live_nodes().
         
     | 
| 
       43 
50 
     | 
    
         
             
            % Terminate the cloud messenger
         
     | 
| 
       44 
51 
     | 
    
         
             
            % This sends a shutdown to the whole cloud
         
     | 
| 
       45 
52 
     | 
    
         
             
            shutdown() -> 
         
     | 
| 
       46 
     | 
    
         
            -
            	init_conn(),
         
     | 
| 
       47 
53 
     | 
    
         
             
            	pm_master:shutdown_cloud().
         
     | 
| 
         @@ -30,8 +30,7 @@ slaves([Host|Hosts]) -> 
     | 
|
| 
       30 
30 
     | 
    
         
             
            	io:format("Erlang node started = [~p]~n", [Node]),
         
     | 
| 
       31 
31 
     | 
    
         
             
            	slaves(Hosts).
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
            slaves() ->
         
     | 
| 
       34 
     | 
    
         
            -
            	get_live_nodes().
         
     | 
| 
      
 33 
     | 
    
         
            +
            slaves() ->	get_live_nodes().
         
     | 
| 
       35 
34 
     | 
    
         | 
| 
       36 
35 
     | 
    
         
             
            erl_system_args()->
         
     | 
| 
       37 
36 
     | 
    
         
             
            	Shared = case init:get_argument(shared) of
         
     | 
| 
         @@ -46,15 +45,17 @@ erl_system_args()-> 
     | 
|
| 
       46 
45 
     | 
    
         | 
| 
       47 
46 
     | 
    
         
             
            any_new_servers() ->
         
     | 
| 
       48 
47 
     | 
    
         
             
            	String = ". /etc/profile && server-list-active -c name",
         
     | 
| 
       49 
     | 
    
         
            -
            	 
     | 
| 
      
 48 
     | 
    
         
            +
            	NodesFromActive = lists:map(fun
         
     | 
| 
       50 
49 
     | 
    
         
             
            		(No) ->
         
     | 
| 
       51 
50 
     | 
    
         
             
            			erlang:list_to_atom(lists:append([No, "@", No]))
         
     | 
| 
       52 
51 
     | 
    
         
             
            	end,string:tokens(os:cmd(String), "\n\t")),
         
     | 
| 
       53 
     | 
    
         
            -
            	 
     | 
| 
      
 52 
     | 
    
         
            +
            	% Nodes -- get_live_nodes(),
         
     | 
| 
      
 53 
     | 
    
         
            +
            	NewServers = [X || X <- NodesFromActive, (lists:member(X, get_live_nodes()) /= true) ],
         
     | 
| 
       54 
54 
     | 
    
         
             
            	NewServers.
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
            % Get the live nodes
         
     | 
| 
      
 56 
     | 
    
         
            +
            % Get the live nodes that are NOT client nodes
         
     | 
| 
       57 
57 
     | 
    
         
             
            get_live_nodes() ->
         
     | 
| 
       58 
     | 
    
         
            -
            	 
     | 
| 
      
 58 
     | 
    
         
            +
            	ClientString = "client",
         
     | 
| 
      
 59 
     | 
    
         
            +
            	[X || X <- nodes(), (erlang:is_atom(regexp:first_match(erlang:atom_to_list(X), ClientString))) ].
         
     | 
| 
       59 
60 
     | 
    
         
             
            %% Do not forget to start erlang with a command like:
         
     | 
| 
       60 
61 
     | 
    
         
             
            %% erl -rsh ssh -sname clustmaster
         
     | 
| 
         @@ -21,7 +21,7 @@ 
     | 
|
| 
       21 
21 
     | 
    
         
             
                     terminate/2, code_change/3]).
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
            % Client function definitions
         
     | 
| 
       24 
     | 
    
         
            -
            -export ([get_load/1, reconfigure_cloud/0 
     | 
| 
      
 24 
     | 
    
         
            +
            -export ([get_load/1, reconfigure_cloud/0]).
         
     | 
| 
       25 
25 
     | 
    
         
             
            -export ([run_cmd/1, fire_cmd/1]).
         
     | 
| 
       26 
26 
     | 
    
         
             
            -export ([shutdown_cloud/0]).
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
         @@ -36,7 +36,6 @@ 
     | 
|
| 
       36 
36 
     | 
    
         
             
            get_load(Type) ->
         
     | 
| 
       37 
37 
     | 
    
         
             
            	% {Loads, _} = pm_cluster:send_call(get_load_for_type, [Type]),
         
     | 
| 
       38 
38 
     | 
    
         
             
            	{Loads, _} = gen_server:call(?SERVER, {get_load_for_type, [Type]}),
         
     | 
| 
       39 
     | 
    
         
            -
            	io:format("Loads: ~p~n", [Loads]),
         
     | 
| 
       40 
39 
     | 
    
         
             
            	utils:convert_responses_to_int_list(Loads).
         
     | 
| 
       41 
40 
     | 
    
         | 
| 
       42 
41 
     | 
    
         
             
            % Send reconfigure tasks to every node
         
     | 
| 
         @@ -46,9 +45,6 @@ reconfigure_cloud() -> 
     | 
|
| 
       46 
45 
     | 
    
         
             
            % Fire the given command on all nodes
         
     | 
| 
       47 
46 
     | 
    
         
             
            run_cmd(Cmd) -> gen_server:call(?SERVER, {run_cmd, Cmd}).
         
     | 
| 
       48 
47 
     | 
    
         
             
            fire_cmd(Cmd) -> gen_server:call(?SERVER, {fire_cmd, Cmd}).
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
            get_live_nodes() ->
         
     | 
| 
       51 
     | 
    
         
            -
            	nodes().
         
     | 
| 
       52 
48 
     | 
    
         | 
| 
       53 
49 
     | 
    
         
             
            % Shutdown
         
     | 
| 
       54 
50 
     | 
    
         
             
            shutdown_cloud() ->
         
     | 
| 
         @@ -87,11 +83,12 @@ init([]) -> 
     | 
|
| 
       87 
83 
     | 
    
         
             
            %%--------------------------------------------------------------------
         
     | 
| 
       88 
84 
     | 
    
         
             
            % Handle load messages
         
     | 
| 
       89 
85 
     | 
    
         
             
            handle_call({Type, Args}, _From, _State) ->
         
     | 
| 
       90 
     | 
    
         
            -
            	 
     | 
| 
       91 
     | 
    
         
            -
            	List = rpc:multicall( 
     | 
| 
      
 86 
     | 
    
         
            +
            	Nodes = pm_cluster:get_live_nodes(),
         
     | 
| 
      
 87 
     | 
    
         
            +
            	List = rpc:multicall(Nodes, pm_node, Type, [Args]),
         
     | 
| 
       92 
88 
     | 
    
         
             
            	{reply, List, nostate};
         
     | 
| 
       93 
89 
     | 
    
         
             
            handle_call(Request, _From, State) ->
         
     | 
| 
       94 
     | 
    
         
            -
            	 
     | 
| 
      
 90 
     | 
    
         
            +
            	Nodes = pm_cluster:get_live_nodes(),
         
     | 
| 
      
 91 
     | 
    
         
            +
            	Reply = Reply = rpc:multicall(Nodes, pm_node, Request, []),
         
     | 
| 
       95 
92 
     | 
    
         
             
            	{reply, Reply, State}.
         
     | 
| 
       96 
93 
     | 
    
         | 
| 
       97 
94 
     | 
    
         
             
            %%--------------------------------------------------------------------
         
     | 
| 
         @@ -0,0 +1,111 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            =begin rdoc
         
     | 
| 
      
 2 
     | 
    
         
            +
              Aska
         
     | 
| 
      
 3 
     | 
    
         
            +
              TODO: Extract this into a proper gem
         
     | 
| 
      
 4 
     | 
    
         
            +
            =end
         
     | 
| 
      
 5 
     | 
    
         
            +
            module Aska
         
     | 
| 
      
 6 
     | 
    
         
            +
              module ClassMethods
         
     | 
| 
      
 7 
     | 
    
         
            +
                def rules(name=:rules, arr=[])
         
     | 
| 
      
 8 
     | 
    
         
            +
                  returning look_up_rules(name) do |rs|
         
     | 
| 
      
 9 
     | 
    
         
            +
                    arr.each do |line|
         
     | 
| 
      
 10 
     | 
    
         
            +
                      next unless line
         
     | 
| 
      
 11 
     | 
    
         
            +
                      k = line[/(.+)[=\\\<\>](.*)/, 1].gsub(/\s+/, '')
         
     | 
| 
      
 12 
     | 
    
         
            +
                      v = line[/(.+)[=\\<>](.*)/, 2].gsub(/\s+/, '')
         
     | 
| 
      
 13 
     | 
    
         
            +
                      m = line[/[=\\<>]/, 0].gsub(/\s+/, '')
         
     | 
| 
      
 14 
     | 
    
         
            +
                      
         
     | 
| 
      
 15 
     | 
    
         
            +
                      create_instance_variable(k)
         
     | 
| 
      
 16 
     | 
    
         
            +
                      rs << {k => [m, v]}
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                    self.send(:define_method, name) do
         
     | 
| 
      
 19 
     | 
    
         
            +
                      look_up_rules(name)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end        
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
                def create_instance_variable(k)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  aska_attr_accessors << k.to_sym unless aska_attr_accessors.include?(k.to_sym)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  attr_reader k.to_sym unless respond_to?("#{k}".to_sym)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  attr_writer k.to_sym unless respond_to?("#{k}=".to_sym)
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
                def look_up_rules(name)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  defined_rules[name.to_sym] ||= Rules.new
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                def are_rules?(name)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  !look_up_rules(name).empty?
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
                def aska_attr_accessors
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @aska_attr_accessors ||= Rules.new
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
                def defined_rules
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @defined_rules ||= {}
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
                def aska_named(name)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  "#{name}_aska"
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
              
         
     | 
| 
      
 45 
     | 
    
         
            +
              module InstanceMethods
         
     | 
| 
      
 46 
     | 
    
         
            +
                def rules
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @rules ||= self.class.defined_rules
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
                def valid_rules?(name=:rules)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  self.class.look_up_rules(name).reject {|rule| valid_rule?(rule) }.empty?
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
                def __aska_aska_stuff(m)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  if respond_to?(m.to_sym)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    self.send(m.to_sym)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  else
         
     | 
| 
      
 56 
     | 
    
         
            +
                    m
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
                def valid_rule?(rule)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  rule.each do |key,value|
         
     | 
| 
      
 61 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 62 
     | 
    
         
            +
                      # puts "#{aska(key)} #{value[0].to_sym} #{get_var(value[1])} (#{attr_accessor?(value[1])})"
         
     | 
| 
      
 63 
     | 
    
         
            +
                      return __aska_aska_stuff(key).send(value[0].to_sym, __aska_get_var(value[1]))
         
     | 
| 
      
 64 
     | 
    
         
            +
                    rescue Exception => e
         
     | 
| 
      
 65 
     | 
    
         
            +
                      return false
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
                # Get the variable from the class
         
     | 
| 
      
 70 
     | 
    
         
            +
                # If it's defined as an attr_accessor, we know it has been defined as a rule
         
     | 
| 
      
 71 
     | 
    
         
            +
                # Otherwise, if we are passing it as a 
         
     | 
| 
      
 72 
     | 
    
         
            +
                def __aska_get_var(name)
         
     | 
| 
      
 73 
     | 
    
         
            +
                  # attr_accessor?(name) ? aska(name) : 
         
     | 
| 
      
 74 
     | 
    
         
            +
                  (supported_method?(name) ? name.to_sym : name.to_f)
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
                def __aska_aska(name)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  self.class.aska_named(name)
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
                def attr_accessor?(name)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  self.class.aska_attr_accessors.include?(name.to_sym)
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
                def supported_method?(meth)
         
     | 
| 
      
 83 
     | 
    
         
            +
                  %w(< > == => =<).include?("#{meth}")
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
                
         
     | 
| 
      
 86 
     | 
    
         
            +
                def look_up_rules(r);self.class.look_up_rules(r);end
         
     | 
| 
      
 87 
     | 
    
         
            +
                def are_rules?(r);self.class.are_rules?(r);end
         
     | 
| 
      
 88 
     | 
    
         
            +
                
         
     | 
| 
      
 89 
     | 
    
         
            +
                # def method_missing(m, *args, &block)
         
     | 
| 
      
 90 
     | 
    
         
            +
                #   if self.class.defined_rules.has_key?(m.to_sym)
         
     | 
| 
      
 91 
     | 
    
         
            +
                #     self.class.send(:define_method, m) do
         
     | 
| 
      
 92 
     | 
    
         
            +
                #       self.class.look_up_rules(m)
         
     | 
| 
      
 93 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 94 
     | 
    
         
            +
                #     self.send m
         
     | 
| 
      
 95 
     | 
    
         
            +
                #   else
         
     | 
| 
      
 96 
     | 
    
         
            +
                #     super
         
     | 
| 
      
 97 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 98 
     | 
    
         
            +
                # end
         
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
      
 100 
     | 
    
         
            +
              
         
     | 
| 
      
 101 
     | 
    
         
            +
              def self.included(receiver)
         
     | 
| 
      
 102 
     | 
    
         
            +
                receiver.extend         ClassMethods
         
     | 
| 
      
 103 
     | 
    
         
            +
                receiver.send :include, InstanceMethods
         
     | 
| 
      
 104 
     | 
    
         
            +
              end
         
     | 
| 
      
 105 
     | 
    
         
            +
              
         
     | 
| 
      
 106 
     | 
    
         
            +
              class Rules < Array
         
     | 
| 
      
 107 
     | 
    
         
            +
                def to_s
         
     | 
| 
      
 108 
     | 
    
         
            +
                  self.map {|r| v=r.keys.first;"'#{v} #{r[v][0]} #{r[v][1]}'"}.join(", ")
         
     | 
| 
      
 109 
     | 
    
         
            +
                end
         
     | 
| 
      
 110 
     | 
    
         
            +
              end
         
     | 
| 
      
 111 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -9,24 +9,34 @@ module PoolParty 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                    has_package(:name => "rubygems") do |g|
         
     | 
| 
       11 
11 
     | 
    
         
             
                      # These should be installed automagically by poolparty, but just in case
         
     | 
| 
       12 
     | 
    
         
            -
                      # TODO: Fix the requires method with a helper 
     | 
| 
       13 
     | 
    
         
            -
                      g.has_gempackage(:name => " 
     | 
| 
       14 
     | 
    
         
            -
                      g.has_gempackage(:name => " 
     | 
| 
      
 12 
     | 
    
         
            +
                      # TODO: Fix the requires method with a helper
         
     | 
| 
      
 13 
     | 
    
         
            +
                      g.has_gempackage(:name => "flexmock", :download_url => "http://rubyforge.org/frs/download.php/42580/flexmock-0.8.3.gem")
         
     | 
| 
      
 14 
     | 
    
         
            +
                      g.has_gempackage(:name => "lockfile", :download_url => "http://rubyforge.org/frs/download.php/18698/lockfile-1.4.3.gem")
         
     | 
| 
      
 15 
     | 
    
         
            +
                      g.has_gempackage(:name => "logging", :download_url => "http://rubyforge.org/frs/download.php/44731/logging-0.9.4.gem", :requires => [get_gempackage("flexmock"), get_gempackage("lockfile")])          
         
     | 
| 
      
 16 
     | 
    
         
            +
                      
         
     | 
| 
      
 17 
     | 
    
         
            +
                      g.has_gempackage(:name => "rubyforge", :download_url => "http://rubyforge.org/frs/download.php/45546/rubyforge-1.0.1.gem")
         
     | 
| 
      
 18 
     | 
    
         
            +
                      g.has_gempackage(:name => "hoe", :download_url => "http://rubyforge.org/frs/download.php/45685/hoe-1.8.2.gem", :version => "1.8", :requires => get_gempackage("rubyforge"))
         
     | 
| 
      
 19 
     | 
    
         
            +
                      g.has_gempackage(:name => "ZenTest", :download_url => "http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem", :requires => [get_gempackage("hoe"), get_gempackage("rubyforge")])
         
     | 
| 
      
 20 
     | 
    
         
            +
                      
         
     | 
| 
       15 
21 
     | 
    
         
             
                      g.has_gempackage(:name => "rake", :download_url => "http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem")
         
     | 
| 
       16 
     | 
    
         
            -
                      g.has_gempackage(:name => "xml-simple") do |x|
         
     | 
| 
      
 22 
     | 
    
         
            +
                      g.has_gempackage(:name => "xml-simple", :download_url => "http://rubyforge.org/frs/download.php/18366/xml-simple-1.0.11.gem") do |x|
         
     | 
| 
       17 
23 
     | 
    
         
             
                        x.has_gempackage(:name => "grempe-amazon-ec2", :download_url => "http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem")
         
     | 
| 
       18 
24 
     | 
    
         
             
                      end
         
     | 
| 
       19 
25 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                      has_gempackage(:name => " 
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                        pt.has_gempackage(:name => "activesupport", :download_url => "http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem") do |a|
         
     | 
| 
       23 
     | 
    
         
            -
                          a.has_gempackage(:name => "poolparty", :download_url => "http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true")
         
     | 
| 
       24 
     | 
    
         
            -
                        end
         
     | 
| 
       25 
     | 
    
         
            -
                        has_gempackage(:name => "RubyInline", :download_url => "http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem")
         
     | 
| 
      
 26 
     | 
    
         
            +
                      has_gempackage(:name => "sexp_processor", :download_url => "http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem")
         
     | 
| 
      
 27 
     | 
    
         
            +
                      has_gempackage(:name => "ParseTree", :download_url => "http://rubyforge.org/frs/download.php/45600/ParseTree-3.0.1.gem", :requires => [get_gempackage("sexp_processor"), get_gempackage("ZenTest")])
         
     | 
| 
       26 
28 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                       
     | 
| 
      
 29 
     | 
    
         
            +
                      has_gempackage(:name => "ruby2ruby", :download_url => "http://rubyforge.org/frs/download.php/45587/ruby2ruby-1.2.0.gem", :requires => get_gempackage("ParseTree"))
         
     | 
| 
      
 30 
     | 
    
         
            +
                      
         
     | 
| 
      
 31 
     | 
    
         
            +
                      has_gempackage(:name => "activesupport", :download_url => "http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem")
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                      has_gempackage(:name => "aska", :download_url => "http://github.com/auser/aska/tree/master%2Fpkg%2Faska-latest.gem?raw=true", :requires => get_gempackage("ruby2ruby"))            
         
     | 
| 
      
 34 
     | 
    
         
            +
                      has_gempackage(:name => "RubyInline", :download_url => "http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem")
         
     | 
| 
      
 35 
     | 
    
         
            +
                      
         
     | 
| 
      
 36 
     | 
    
         
            +
                      has_gempackage(:name => "poolparty", :download_url => "http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true", :requires => [get_gempackage("ruby2ruby"), get_gempackage("RubyInline"), get_gempackage("aska"), get_gempackage("ParseTree")])
         
     | 
| 
      
 37 
     | 
    
         
            +
                      
         
     | 
| 
      
 38 
     | 
    
         
            +
                      has_exec(:name => "build_messenger", :command => ". /etc/profile && server-build-messenger", :requires => get_gempackage("poolparty"))
         
     | 
| 
      
 39 
     | 
    
         
            +
                      has_exec(:name => "start_node", :command => ". /etc/profile && server-start-node", :requires => get_exec("build_messenger"))
         
     | 
| 
       30 
40 
     | 
    
         | 
| 
       31 
41 
     | 
    
         
             
                    end
         
     | 
| 
       32 
42 
     | 
    
         | 
    
        data/lib/poolparty/core/array.rb
    CHANGED
    
    
| 
         @@ -10,10 +10,10 @@ module Kernel 
     | 
|
| 
       10 
10 
     | 
    
         
             
                block.in_context(klass_or_obj).call
         
     | 
| 
       11 
11 
     | 
    
         
             
              end
         
     | 
| 
       12 
12 
     | 
    
         
             
              def load_p(dir)
         
     | 
| 
       13 
     | 
    
         
            -
                Dir["#{dir}/*.rb"].each do |file|
         
     | 
| 
      
 13 
     | 
    
         
            +
                Dir["#{dir}/*.rb"].sort.each do |file|
         
     | 
| 
       14 
14 
     | 
    
         
             
                  require "#{file}" if ::FileTest.file?(file)
         
     | 
| 
       15 
15 
     | 
    
         
             
                end
         
     | 
| 
       16 
     | 
    
         
            -
                Dir["#{dir}/*"].each do |dir|
         
     | 
| 
      
 16 
     | 
    
         
            +
                Dir["#{dir}/*"].sort.each do |dir|
         
     | 
| 
       17 
17 
     | 
    
         
             
                  load_p(dir) if ::FileTest.directory?(dir)
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         
             
              end
         
     | 
| 
         @@ -44,6 +44,16 @@ class Object 
     | 
|
| 
       44 
44 
     | 
    
         
             
                  "#{self}"
         
     | 
| 
       45 
45 
     | 
    
         
             
                end
         
     | 
| 
       46 
46 
     | 
    
         
             
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
              def respec_string
         
     | 
| 
      
 48 
     | 
    
         
            +
                case self.class
         
     | 
| 
      
 49 
     | 
    
         
            +
                when String
         
     | 
| 
      
 50 
     | 
    
         
            +
                  self.to_option_string
         
     | 
| 
      
 51 
     | 
    
         
            +
                when Array
         
     | 
| 
      
 52 
     | 
    
         
            +
                  self.map {|a| "#{a.respec_string}" }.join(" ")
         
     | 
| 
      
 53 
     | 
    
         
            +
                else
         
     | 
| 
      
 54 
     | 
    
         
            +
                  "'#{self}'"
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
       47 
57 
     | 
    
         
             
              def block_instance_eval(*args, &block)
         
     | 
| 
       48 
58 
     | 
    
         
             
                return instance_eval(*args,&block) unless block_given? && !block.arity.zero?
         
     | 
| 
       49 
59 
     | 
    
         
             
                old_method = (self.class.instance_method(:__) rescue nil)
         
     | 
| 
         @@ -63,7 +73,7 @@ class Object 
     | 
|
| 
       63 
73 
     | 
    
         
             
                meta_eval { remove_method name }
         
     | 
| 
       64 
74 
     | 
    
         
             
              end
         
     | 
| 
       65 
75 
     | 
    
         
             
              def run_in_context(&block)
         
     | 
| 
       66 
     | 
    
         
            -
                name="temp_#{self.class}_#{parent.to_s}".to_sym
         
     | 
| 
      
 76 
     | 
    
         
            +
                name="temp_#{self.class}_#{respond_to?(:parent) ? parent.to_s : Time.now.to_i}".to_sym
         
     | 
| 
       67 
77 
     | 
    
         
             
                meta_def name, &block
         
     | 
| 
       68 
78 
     | 
    
         
             
                self.send name, self
         
     | 
| 
       69 
79 
     | 
    
         
             
                # self.instance_eval &block if block
         
     | 
| 
         @@ -72,4 +82,10 @@ class Object 
     | 
|
| 
       72 
82 
     | 
    
         
             
              def vputs(m="", o=self)
         
     | 
| 
       73 
83 
     | 
    
         
             
                puts m if o.verbose
         
     | 
| 
       74 
84 
     | 
    
         
             
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
              def vprint(m="", o=self)
         
     | 
| 
      
 86 
     | 
    
         
            +
                print m if o.verbose
         
     | 
| 
      
 87 
     | 
    
         
            +
              end
         
     | 
| 
      
 88 
     | 
    
         
            +
              def unix_hide_string
         
     | 
| 
      
 89 
     | 
    
         
            +
                "2>&1 > /dev/null"
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
       75 
91 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,4 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Symbol
         
     | 
| 
      
 2 
     | 
    
         
            +
              # def >(num);"#{self} > #{num}";end
         
     | 
| 
      
 3 
     | 
    
         
            +
              # def <(num);"#{self} < #{num}";end
         
     | 
| 
      
 4 
     | 
    
         
            +
              # def >=(num);"#{self} >= #{num}";end
         
     | 
| 
      
 5 
     | 
    
         
            +
              # def <=(num);"#{self} <= #{num}";end
         
     | 
| 
      
 6 
     | 
    
         
            +
              # def ==(num);"#{self} > #{num}";end
         
     | 
| 
      
 7 
     | 
    
         
            +
              
         
     | 
| 
       2 
8 
     | 
    
         
             
              def to_string(pre="")
         
     | 
| 
       3 
9 
     | 
    
         
             
                "#{pre}#{self.to_s}"
         
     | 
| 
       4 
10 
     | 
    
         
             
              end
         
     | 
| 
         @@ -97,12 +97,8 @@ module PoolParty 
     | 
|
| 
       97 
97 
     | 
    
         
             
                      verbose ? @cloud.run_command_on(cmd, @instance) : hide_output {@cloud.run_command_on(cmd, @instance)}
         
     | 
| 
       98 
98 
     | 
    
         | 
| 
       99 
99 
     | 
    
         
             
                      process_clean_reconfigure_for!(@instance)
         
     | 
| 
       100 
     | 
    
         
            -
                      after_install(@instance)
         
     | 
| 
       101 
     | 
    
         
            -
                      
         
     | 
| 
      
 100 
     | 
    
         
            +
                      after_install(@instance)          
         
     | 
| 
       102 
101 
     | 
    
         
             
                    end
         
     | 
| 
       103 
     | 
    
         
            -
                    # We have to get the right generated data into the manifest
         
     | 
| 
       104 
     | 
    
         
            -
                    # TODO: Clean this setup
         
     | 
| 
       105 
     | 
    
         
            -
                    @cloud.provisioning_complete
         
     | 
| 
       106 
102 
     | 
    
         
             
                  end
         
     | 
| 
       107 
103 
     | 
    
         
             
                  # Install callbacks
         
     | 
| 
       108 
104 
     | 
    
         
             
                  # Before installation callback
         
     | 
| 
         @@ -138,7 +134,7 @@ module PoolParty 
     | 
|
| 
       138 
134 
     | 
    
         
             
                    # puppetca --clean #{instance.name}.compute-1.internal; puppetca --clean #{instance.name}.ec2.internal
         
     | 
| 
       139 
135 
     | 
    
         
             
                    # find /etc/puppet/ssl -type f -exec rm {} \;
         
     | 
| 
       140 
136 
     | 
    
         
             
                    command = <<-EOE
         
     | 
| 
       141 
     | 
    
         
            -
            if [ -f '/usr/bin/puppetcleaner' ]; then /usr/bin/puppetcleaner; fi
         
     | 
| 
      
 137 
     | 
    
         
            +
            if [ -f '/usr/bin/puppetcleaner' ]; then /usr/bin/env puppetcleaner; fi
         
     | 
| 
       142 
138 
     | 
    
         
             
                    EOE
         
     | 
| 
       143 
139 
     | 
    
         
             
                    @cloud.run_command_on(command, @cloud.master) unless testing
         
     | 
| 
       144 
140 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -282,7 +278,7 @@ echo 'deb http://mirrors.kernel.org/ubuntu hardy main universe' >> /etc/apt/sour 
     | 
|
| 
       282 
278 
     | 
    
         
             
            aptitude update -y <<heredoc
         
     | 
| 
       283 
279 
     | 
    
         
             
            Y
         
     | 
| 
       284 
280 
     | 
    
         
             
            heredoc
         
     | 
| 
       285 
     | 
    
         
            -
            aptitude autoclean
         
     | 
| 
      
 281 
     | 
    
         
            +
            aptitude autoclean #{unix_hide_string}
         
     | 
| 
       286 
282 
     | 
    
         
             
            fi
         
     | 
| 
       287 
283 
     | 
    
         
             
                      "
         
     | 
| 
       288 
284 
     | 
    
         
             
                    else
         
     | 
| 
         @@ -132,11 +132,13 @@ wget http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem -O rake.gem 2>&1 
     | 
|
| 
       132 
132 
     | 
    
         
             
            wget http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem -O sexp_processor.gem 2>&1
         
     | 
| 
       133 
133 
     | 
    
         
             
            wget http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true -O poolparty-latest.gem 2>&1
         
     | 
| 
       134 
134 
     | 
    
         
             
            wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon-ec2.gem 2>&1
         
     | 
| 
      
 135 
     | 
    
         
            +
            wget http://github.com/auser/aska/tree/master%2Fpkg%2Faska-latest.gem?raw=true -O aska.gem 2>&1
         
     | 
| 
       135 
136 
     | 
    
         | 
| 
       136 
137 
     | 
    
         
             
            #{
         
     | 
| 
       137 
     | 
    
         
            -
              %w(rake lockfile rubyforge hoe zentest sexp_processor flexmock logging activesupport  
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
      
 138 
     | 
    
         
            +
              %w(rake lockfile rubyforge hoe zentest sexp_processor flexmock logging activesupport 
         
     | 
| 
      
 139 
     | 
    
         
            +
                  RubyInline ParseTree ruby2ruby xml-simple aska poolparty-latest amazon-ec2).map do |dep|
         
     | 
| 
      
 140 
     | 
    
         
            +
                "gem install --ignore-dependencies -y --no-ri --no-rdoc #{dep}.gem"
         
     | 
| 
      
 141 
     | 
    
         
            +
              end.join("\n")
         
     | 
| 
       140 
142 
     | 
    
         
             
            }
         
     | 
| 
       141 
143 
     | 
    
         | 
| 
       142 
144 
     | 
    
         
             
            # gem install -y --no-ri --no-rdoc  --source http://gems.github.com grempe-amazon-ec2
         
     | 
| 
         @@ -147,15 +149,16 @@ wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon- 
     | 
|
| 
       147 
149 
     | 
    
         
             
                  # ps aux | grep puppetmasterd | awk '{print $2}' | xargs kill
         
     | 
| 
       148 
150 
     | 
    
         
             
                  # rm -rf /etc/puppet/ssl
         
     | 
| 
       149 
151 
     | 
    
         
             
                  def start_puppetmaster
         
     | 
| 
       150 
     | 
    
         
            -
                    <<-EOS 
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
      
 152 
     | 
    
         
            +
                    <<-EOS
         
     | 
| 
      
 153 
     | 
    
         
            +
            /usr/bin/env puppetcleaner 2>&1 > /dev/null
         
     | 
| 
      
 154 
     | 
    
         
            +
            puppetmasterd --verbose  2>&1 > /dev/null
         
     | 
| 
       152 
155 
     | 
    
         
             
                    EOS
         
     | 
| 
       153 
156 
     | 
    
         
             
                  end
         
     | 
| 
       154 
157 
     | 
    
         | 
| 
       155 
158 
     | 
    
         
             
                  # puppetd --listen --fqdn #{@instance.name}
         
     | 
| 
       156 
159 
     | 
    
         
             
                  def restart_puppetd
         
     | 
| 
       157 
160 
     | 
    
         
             
                    <<-EOS
         
     | 
| 
       158 
     | 
    
         
            -
            . /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 
     | 
| 
      
 161 
     | 
    
         
            +
            . /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master  2>&1 > /dev/null
         
     | 
| 
       159 
162 
     | 
    
         
             
                    EOS
         
     | 
| 
       160 
163 
     | 
    
         
             
                  end
         
     | 
| 
       161 
164 
     | 
    
         
             
                end
         
     | 
| 
         @@ -26,16 +26,15 @@ module PoolParty 
     | 
|
| 
       26 
26 
     | 
    
         
             
                  def setup_configs
         
     | 
| 
       27 
27 
     | 
    
         
             
                    <<-EOS          
         
     | 
| 
       28 
28 
     | 
    
         
             
                      echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
         
     | 
| 
      
 29 
     | 
    
         
            +
                      rm -rf /etc/puppet/ssl
         
     | 
| 
       29 
30 
     | 
    
         
             
                    EOS
         
     | 
| 
       30 
31 
     | 
    
         
             
                  end
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
33 
     | 
    
         
             
                  # /etc/init.d/puppetmasterd stop
         
     | 
| 
       33 
34 
     | 
    
         
             
                  # puppetd --listen --fqdn #{@instance.name}
         
     | 
| 
       34 
35 
     | 
    
         
             
                  def start_puppet
         
     | 
| 
       35 
     | 
    
         
            -
                    <<-EOS
         
     | 
| 
       36 
     | 
    
         
            -
                      / 
     | 
| 
       37 
     | 
    
         
            -
                      /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1
         
     | 
| 
       38 
     | 
    
         
            -
                      # rm -rf /etc/puppet/ssl/*
         
     | 
| 
      
 36 
     | 
    
         
            +
                    <<-EOS          
         
     | 
| 
      
 37 
     | 
    
         
            +
                      /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1          
         
     | 
| 
       39 
38 
     | 
    
         
             
                    EOS
         
     | 
| 
       40 
39 
     | 
    
         
             
                  end
         
     | 
| 
       41 
40 
     | 
    
         | 
| 
         @@ -4,11 +4,26 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
              TODO: Fill this out
         
     | 
| 
       5 
5 
     | 
    
         
             
            =end
         
     | 
| 
       6 
6 
     | 
    
         
             
            module PoolParty
         
     | 
| 
       7 
     | 
    
         
            -
              module Monitors
         
     | 
| 
      
 7 
     | 
    
         
            +
              module Monitors    
         
     | 
| 
      
 8 
     | 
    
         
            +
                
         
     | 
| 
      
 9 
     | 
    
         
            +
                module ClassMethods
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
                
         
     | 
| 
      
 12 
     | 
    
         
            +
                module InstanceMethods
         
     | 
| 
      
 13 
     | 
    
         
            +
                  def expand_when(*arr)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @expand_when ||= ((arr && arr.empty?) ? options[:expand_when] : configure(:expand_when => self.class.send(:rules, :expand_when, arr)))
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  
         
     | 
| 
      
 17 
     | 
    
         
            +
                  def contract_when(*arr)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @contract_when ||= ((arr && arr.empty?) ? options[:contract_when] : configure(:contract_when => self.class.send(:rules, :contract_when, arr)))
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
       8 
21 
     | 
    
         | 
| 
       9 
22 
     | 
    
         
             
                def self.register_monitor(*args)
         
     | 
| 
       10 
23 
     | 
    
         
             
                  args.each do |arg|
         
     | 
| 
       11 
24 
     | 
    
         
             
                    (available_monitors << "#{arg}".downcase.to_sym)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    
         
     | 
| 
      
 26 
     | 
    
         
            +
                    InstanceMethods.module_eval "def #{arg}; PoolParty::Messenger.messenger_send!(\"get_load #{arg}\"); end"
         
     | 
| 
       12 
27 
     | 
    
         
             
                  end
         
     | 
| 
       13 
28 
     | 
    
         
             
                end
         
     | 
| 
       14 
29 
     | 
    
         | 
| 
         @@ -16,15 +31,27 @@ module PoolParty 
     | 
|
| 
       16 
31 
     | 
    
         
             
                  $available_monitors ||= []
         
     | 
| 
       17 
32 
     | 
    
         
             
                end
         
     | 
| 
       18 
33 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                class BaseMonitor
         
     | 
| 
       20 
     | 
    
         
            -
                  
         
     | 
| 
      
 34 
     | 
    
         
            +
                class BaseMonitor      
         
     | 
| 
       21 
35 
     | 
    
         
             
                  def self.run
         
     | 
| 
       22 
36 
     | 
    
         
             
                    new.run
         
     | 
| 
       23 
37 
     | 
    
         
             
                  end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
                
         
     | 
| 
      
 40 
     | 
    
         
            +
                def self.included(receiver)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  receiver.extend                 PoolParty::Monitors::ClassMethods      
         
     | 
| 
      
 42 
     | 
    
         
            +
                  receiver.send :include,         PoolParty::Monitors::InstanceMethods
         
     | 
| 
      
 43 
     | 
    
         
            +
                  receiver.send :include,         Aska
         
     | 
| 
       25 
44 
     | 
    
         
             
                end
         
     | 
| 
       26 
45 
     | 
    
         | 
| 
       27 
46 
     | 
    
         
             
              end
         
     | 
| 
       28 
47 
     | 
    
         
             
            end
         
     | 
| 
       29 
48 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
            Dir["#{File.dirname(__FILE__)}/monitors/*.rb"].each {|f| require f}
         
     | 
| 
      
 49 
     | 
    
         
            +
            Dir["#{File.dirname(__FILE__)}/monitors/*.rb"].each {|f| require f}
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            module PoolParty
         
     | 
| 
      
 52 
     | 
    
         
            +
              module Cloud
         
     | 
| 
      
 53 
     | 
    
         
            +
                class Cloud
         
     | 
| 
      
 54 
     | 
    
         
            +
                  include PoolParty::Monitors
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -16,7 +16,7 @@ module PoolParty 
     | 
|
| 
       16 
16 
     | 
    
         
             
                end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                def self.messenger_send!(cmd="", testing=false)
         
     | 
| 
       19 
     | 
    
         
            -
                  command = Messenger.erl_command("client", "- 
     | 
| 
      
 19 
     | 
    
         
            +
                  command = Messenger.erl_command("client", "-s pm_client -run pm_client #{cmd} -s erlang halt -noshell")
         
     | 
| 
       20 
20 
     | 
    
         
             
                  testing ? command : %x[#{command}]
         
     | 
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
         @@ -127,10 +127,11 @@ module PoolParty 
     | 
|
| 
       127 
127 
     | 
    
         
             
                  # pending instances and then running the block
         
     | 
| 
       128 
128 
     | 
    
         
             
                  def when_no_pending_instances(&block)
         
     | 
| 
       129 
129 
     | 
    
         
             
                    reset!
         
     | 
| 
      
 130 
     | 
    
         
            +
                    vputs "Waiting for there to be no pending instances..."
         
     | 
| 
       130 
131 
     | 
    
         
             
                    if list_of_pending_instances.size == 0
         
     | 
| 
       131 
132 
     | 
    
         
             
                      block.call if block
         
     | 
| 
       132 
133 
     | 
    
         
             
                    else
         
     | 
| 
       133 
     | 
    
         
            -
                       
     | 
| 
      
 134 
     | 
    
         
            +
                      vprint "."
         
     | 
| 
       134 
135 
     | 
    
         
             
                      wait "5.seconds"
         
     | 
| 
       135 
136 
     | 
    
         
             
                      when_no_pending_instances(&block)
         
     | 
| 
       136 
137 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -167,11 +168,11 @@ module PoolParty 
     | 
|
| 
       167 
168 
     | 
    
         
             
                  end
         
     | 
| 
       168 
169 
     | 
    
         
             
                  # Stub method for the time being to handle expansion of the cloud
         
     | 
| 
       169 
170 
     | 
    
         
             
                  def should_expand_cloud?(force=false)
         
     | 
| 
       170 
     | 
    
         
            -
                    force || false
         
     | 
| 
      
 171 
     | 
    
         
            +
                    valid_rules?(:expansions) || force || false
         
     | 
| 
       171 
172 
     | 
    
         
             
                  end
         
     | 
| 
       172 
173 
     | 
    
         
             
                  # Stub method for the time being to handle the contraction of the cloud
         
     | 
| 
       173 
174 
     | 
    
         
             
                  def should_contract_cloud?(force=false)
         
     | 
| 
       174 
     | 
    
         
            -
                    force || false
         
     | 
| 
      
 175 
     | 
    
         
            +
                    valid_rules?(:contractions) || force || false
         
     | 
| 
       175 
176 
     | 
    
         
             
                  end
         
     | 
| 
       176 
177 
     | 
    
         
             
                  # Expand the cloud
         
     | 
| 
       177 
178 
     | 
    
         
             
                  # If we can start a new instance and the load requires us to expand
         
     |