auser-poolparty 0.2.35 → 0.2.36
Sign up to get free protection for your applications and to get access to all the features.
- 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
|