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
|