auser-poolparty 0.2.15 → 0.2.16
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +28 -10
- data/bin/cloud +2 -2
- data/bin/cloud-provision +1 -1
- data/bin/cloud-run +19 -0
- data/bin/pool +2 -2
- data/bin/server-fire-cmd +16 -0
- data/bin/server-start-master +32 -0
- data/bin/server-start-node +32 -0
- data/lib/erlang/messenger/Rakefile +12 -0
- data/lib/erlang/messenger/ebin/master.app +19 -0
- data/lib/erlang/messenger/ebin/master_app.beam +0 -0
- data/lib/erlang/messenger/{lib/load_app.app → ebin/node.app} +6 -5
- 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_handler.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +7 -0
- data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +7 -0
- data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/utils.beam +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.script +169 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.script +169 -0
- data/lib/erlang/messenger/src/master_app.erl +39 -0
- data/lib/erlang/messenger/src/node_app.erl +39 -0
- data/lib/erlang/messenger/src/pm_client.erl +14 -0
- data/lib/erlang/messenger/src/pm_cluster.erl +4 -1
- data/lib/erlang/messenger/src/pm_event_handler.erl +21 -0
- data/lib/erlang/messenger/src/pm_master.erl +113 -21
- data/lib/erlang/messenger/src/pm_master_supervisor.erl +33 -1
- data/lib/erlang/messenger/src/pm_node.erl +111 -65
- data/lib/erlang/messenger/src/pm_node_supervisor.erl +22 -15
- data/lib/erlang/messenger/src/utils.erl +45 -0
- data/lib/poolparty/base_packages/ruby.rb +1 -1
- data/lib/poolparty/helpers/console.rb +3 -2
- data/lib/poolparty/helpers/optioner.rb +6 -2
- data/lib/poolparty/helpers/provisioner_base.rb +5 -3
- data/lib/poolparty/helpers/provisioners/slave.rb +3 -0
- data/lib/poolparty/modules/resourcing_dsl.rb +4 -0
- data/lib/poolparty/net/remote_instance.rb +1 -1
- data/lib/poolparty/net/remoter.rb +11 -4
- data/lib/poolparty/plugins/git.rb +6 -12
- data/lib/poolparty/version.rb +1 -1
- data/poolparty.gemspec +4 -4
- data/spec/poolparty/bin/console_spec.rb +1 -1
- data/spec/poolparty/helpers/optioner_spec.rb +2 -1
- data/spec/poolparty/helpers/provisioner_base_spec.rb +1 -1
- data/spec/poolparty/helpers/provisioners/master_spec.rb +1 -1
- data/spec/poolparty/net/remote_spec.rb +51 -42
- data/spec/poolparty/pool/resources/gem_spec.rb +0 -1
- data/website/index.html +1 -1
- metadata +34 -13
- data/bin/pool-start-monitor +0 -1
- data/lib/erlang/messenger/ebin/erl_crash.dump +0 -12138
- data/lib/erlang/messenger/ebin/load_app.beam +0 -0
- data/lib/erlang/messenger/src/load_app.erl +0 -26
@@ -1,33 +1,40 @@
|
|
1
|
-
%
|
2
|
-
%
|
3
|
-
% Ari Lerner
|
4
|
-
% CitrusByte
|
1
|
+
% This supervisor is responsible for monitoring the
|
2
|
+
% client service
|
5
3
|
|
6
4
|
-module (pm_node_supervisor).
|
7
|
-
-behaviour
|
5
|
+
-behaviour(supervisor).
|
6
|
+
|
7
|
+
-export([start/0, start_in_shell_for_testing/0, start_link/1, init/1]).
|
8
8
|
|
9
9
|
-ifdef(EUNIT).
|
10
10
|
-include_lib("eunit/include/eunit.hrl").
|
11
11
|
-endif.
|
12
12
|
|
13
|
-
|
13
|
+
start() ->
|
14
|
+
spawn(fun() ->
|
15
|
+
supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = [])
|
16
|
+
end).
|
14
17
|
|
15
|
-
|
18
|
+
start_in_shell_for_testing() ->
|
19
|
+
{ok, Pid} = supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = []),
|
20
|
+
unlink(Pid).
|
16
21
|
|
17
|
-
start_link() ->
|
18
|
-
|
19
|
-
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
|
22
|
+
start_link(Args) ->
|
23
|
+
supervisor:start_link({local, ?MODULE}, ?MODULE, Args).
|
20
24
|
|
21
25
|
init([]) ->
|
22
26
|
RestartStrategy = one_for_one,
|
23
27
|
MaxRestarts = 3, % 1000
|
24
28
|
MaxTimeBetRestarts = 30, % 3600
|
25
|
-
|
29
|
+
|
26
30
|
SupFlags = {RestartStrategy, MaxRestarts, MaxTimeBetRestarts},
|
27
|
-
|
31
|
+
|
28
32
|
LoadServers = [
|
29
|
-
{
|
33
|
+
{pm_node1,
|
34
|
+
{pm_node, start_link, []},
|
35
|
+
permanent, 5000, worker,
|
36
|
+
[pm_node]
|
37
|
+
}
|
30
38
|
],
|
31
|
-
|
39
|
+
|
32
40
|
{ok, {SupFlags, LoadServers}}.
|
33
|
-
|
@@ -0,0 +1,45 @@
|
|
1
|
+
-module (utils).
|
2
|
+
-compile(export_all).
|
3
|
+
|
4
|
+
-ifdef(EUNIT).
|
5
|
+
-include_lib("eunit/include/eunit.hrl").
|
6
|
+
-endif.
|
7
|
+
|
8
|
+
% Turn a list from
|
9
|
+
% [{"0.66"}, {"0.32"}, []] -> [0.66, 0.32]
|
10
|
+
convert_responses_to_int_list(L) ->
|
11
|
+
Sum = lists:foldr( fun(Int, Sum) -> Int + Sum end, 0, [erlang:list_to_float(F) || {F} <- L] ),
|
12
|
+
average_for_list(Sum, L).
|
13
|
+
|
14
|
+
% Start a timer to fire off Fun after Time number of milliseconds
|
15
|
+
start_timer(Time, Fun) ->
|
16
|
+
register(clock, spawn(fun() -> tick_timer(Time, Fun) end)).
|
17
|
+
|
18
|
+
stop_timer() -> clock ! stop.
|
19
|
+
|
20
|
+
tick_timer(Time, Fun) ->
|
21
|
+
receive
|
22
|
+
stop ->
|
23
|
+
void
|
24
|
+
after Time ->
|
25
|
+
Fun(),
|
26
|
+
tick_timer(Time, Fun)
|
27
|
+
end.
|
28
|
+
|
29
|
+
|
30
|
+
% Private
|
31
|
+
% Get the average of the list
|
32
|
+
average_for_list(Num, L) ->
|
33
|
+
case length(L) of
|
34
|
+
0 ->
|
35
|
+
0;
|
36
|
+
_ ->
|
37
|
+
Num / length(L)
|
38
|
+
end.
|
39
|
+
|
40
|
+
% Recompiles the boot scripts
|
41
|
+
recompile_scripts(Vers) ->
|
42
|
+
systools:make_script("pm_node_rel-"++Vers, [local]),
|
43
|
+
systools:make_script("pm_master_rel-"++Vers, [local]).
|
44
|
+
|
45
|
+
% Tests
|
@@ -12,7 +12,7 @@ module PoolParty
|
|
12
12
|
has_package(:name => "ruby1.8-dev")
|
13
13
|
has_package(:name => "ruby1.8")
|
14
14
|
|
15
|
-
has_line_in_file("export PATH=$PATH:/var/lib/gems/1.8/bin
|
15
|
+
has_line_in_file("export PATH=$PATH:/var/lib/gems/1.8/bin:/sbin", "/etc/profile")
|
16
16
|
|
17
17
|
# exec(:name => "update-rubygems") do
|
18
18
|
# command "gem update --system"
|
@@ -7,8 +7,9 @@ module PoolParty
|
|
7
7
|
|
8
8
|
# Load a file that contains a pool into memory
|
9
9
|
def load_pool(filename)
|
10
|
-
|
11
|
-
|
10
|
+
filename = filename.chomp
|
11
|
+
unless filename && ::File.readable?(filename)
|
12
|
+
puts "Could not load pool: #{filename}"
|
12
13
|
exit
|
13
14
|
else
|
14
15
|
PoolParty::Script.inflate(open(filename).read, File.dirname(filename))
|
@@ -9,7 +9,7 @@ module PoolParty
|
|
9
9
|
include MethodMissingSugar
|
10
10
|
|
11
11
|
def initialize(args=[], opts={}, &block)
|
12
|
-
@arguments = args
|
12
|
+
@arguments = parse_args(args)
|
13
13
|
@parse_options = opts[:parse_options] ? opts[:parse_options] : true
|
14
14
|
|
15
15
|
set_default_options
|
@@ -17,6 +17,10 @@ module PoolParty
|
|
17
17
|
self
|
18
18
|
end
|
19
19
|
|
20
|
+
def parse_args(argv, safe=[])
|
21
|
+
argv
|
22
|
+
end
|
23
|
+
|
20
24
|
def parent
|
21
25
|
self
|
22
26
|
end
|
@@ -47,7 +51,7 @@ module PoolParty
|
|
47
51
|
exit
|
48
52
|
end
|
49
53
|
|
50
|
-
opts.parse
|
54
|
+
opts.parse(@arguments.dup)
|
51
55
|
|
52
56
|
process_options
|
53
57
|
output_options if verbose
|
@@ -71,7 +71,7 @@ module PoolParty
|
|
71
71
|
setup_runner(@cloud)
|
72
72
|
|
73
73
|
unless testing
|
74
|
-
|
74
|
+
puts "Logging on to #{@instance.ip}" if verbose
|
75
75
|
@cloud.prepare_reconfiguration
|
76
76
|
@cloud.rsync_storage_files_to(@instance)
|
77
77
|
|
@@ -95,6 +95,7 @@ module PoolParty
|
|
95
95
|
setup_runner(@cloud)
|
96
96
|
|
97
97
|
unless testing
|
98
|
+
puts "Logging on to #{@instance.ip}" if verbose
|
98
99
|
@cloud.rsync_storage_files_to(@instance)
|
99
100
|
|
100
101
|
cmd = "cd #{Base.remote_storage_path} && chmod +x configure_#{name}.sh && /bin/sh configure_#{name}.sh && rm configure_#{name}.sh"
|
@@ -181,7 +182,7 @@ module PoolParty
|
|
181
182
|
# Package installers for general *nix operating systems
|
182
183
|
def self.installers
|
183
184
|
@installers ||= {
|
184
|
-
:ubuntu => "
|
185
|
+
:ubuntu => "aptitude install -y",
|
185
186
|
:fedora => "yum install",
|
186
187
|
:gentoo => "emerge"
|
187
188
|
}
|
@@ -230,7 +231,8 @@ module PoolParty
|
|
230
231
|
"
|
231
232
|
touch /etc/apt/sources.list
|
232
233
|
echo 'deb http://mirrors.kernel.org/ubuntu hardy main universe' >> /etc/apt/sources.list
|
233
|
-
|
234
|
+
aptitude update -y
|
235
|
+
aptitude autoclean
|
234
236
|
"
|
235
237
|
else
|
236
238
|
"# No system upgrade needed"
|
@@ -19,6 +19,7 @@ module PoolParty
|
|
19
19
|
<<-EOE
|
20
20
|
if [ -z "$(grep -v '#' /etc/hosts | grep 'master')" ]; then echo "#{master_ip} puppet master" >> /etc/hosts; else echo "host already set"; fi
|
21
21
|
cp #{Base.remote_storage_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
|
22
|
+
echo 'DAEMON_OPTS="-w 120 –fqdn #{@instance.name} –server master"' > /etc/default/puppet
|
22
23
|
EOE
|
23
24
|
end
|
24
25
|
|
@@ -32,7 +33,9 @@ module PoolParty
|
|
32
33
|
# puppetd --listen --fqdn #{@instance.name}
|
33
34
|
def start_puppet
|
34
35
|
<<-EOS
|
36
|
+
ps aux | grep "puppetmasterd" | awk '{print $2}' | xargs kill
|
35
37
|
rm -rf /etc/puppet/ssl*
|
38
|
+
puppetd --test 2>&1 &
|
36
39
|
EOS
|
37
40
|
end
|
38
41
|
|
@@ -42,6 +42,10 @@ module PoolParty
|
|
42
42
|
end
|
43
43
|
# Give us a template to work with on the resource
|
44
44
|
# Make sure this template is moved to the tmp directory as well
|
45
|
+
#
|
46
|
+
# TODO: Change this method to store the template files for later
|
47
|
+
# copying to prevent unnecessary copying and tons of directories
|
48
|
+
# everywhere
|
45
49
|
def template(file, opts={})
|
46
50
|
raise TemplateNotFound.new("no template given") unless file
|
47
51
|
raise TemplateNotFound.new("template cannot be found #{file}") unless ::File.file?(file)
|
@@ -66,7 +66,7 @@ module PoolParty
|
|
66
66
|
|
67
67
|
# Commands for the servers
|
68
68
|
def puppet_runner_command
|
69
|
-
". /etc/profile && puppetd --onetime --no-daemonize --logdest syslog --server master
|
69
|
+
". /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1"
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -152,7 +152,7 @@ module PoolParty
|
|
152
152
|
request_launch_new_instances(1) if list_of_pending_instances.size.zero? && can_start_a_new_instance? && !is_master_running?
|
153
153
|
|
154
154
|
when_no_pending_instances do
|
155
|
-
wait "
|
155
|
+
wait "20.seconds"
|
156
156
|
hide_output { Provisioner.provision_master(self, testing) }
|
157
157
|
end
|
158
158
|
|
@@ -180,8 +180,10 @@ module PoolParty
|
|
180
180
|
|
181
181
|
reset!
|
182
182
|
when_no_pending_instances do
|
183
|
-
|
184
|
-
PoolParty::Provisioner.
|
183
|
+
wait "20.seconds" # Give some time for ssh to startup
|
184
|
+
PoolParty::Provisioner.provision_slaves(self)
|
185
|
+
PoolParty::Provisioner.configure_master(self, testing)
|
186
|
+
# prepare_reconfiguration
|
185
187
|
end
|
186
188
|
end
|
187
189
|
end
|
@@ -216,11 +218,16 @@ module PoolParty
|
|
216
218
|
ssh_into( get_instance_by_number( num || 0 ) )
|
217
219
|
end
|
218
220
|
|
221
|
+
# Run command on the instance by the number
|
222
|
+
def run_command_on_instance_number(cmd="ls -l", num=0)
|
223
|
+
run_command_on(cmd, get_instance_by_number( num || 0 ) )
|
224
|
+
end
|
225
|
+
|
219
226
|
# Prepare reconfiguration on the master
|
220
227
|
# TODO: Fix the killall
|
221
228
|
def prepare_reconfiguration
|
222
229
|
unless @prepared
|
223
|
-
cmd = "killall ruby && rm -rf /etc/puppet/ssl/*; puppetmasterd --verbose; puppetd --test"
|
230
|
+
cmd = "killall ruby && rm -rf /etc/puppet/ssl/*; puppetmasterd --verbose; puppetd --test --no-daemonize 2>&1 &"
|
224
231
|
run_command_on(cmd, master)
|
225
232
|
@prepared = true
|
226
233
|
end
|
@@ -4,23 +4,17 @@ module PoolParty
|
|
4
4
|
virtual_resource(:git) do
|
5
5
|
|
6
6
|
def loaded(opts={}, parent=self)
|
7
|
-
|
7
|
+
has_git_repos
|
8
8
|
end
|
9
|
-
|
10
|
-
def install_git
|
11
|
-
has_package(:name => "git-core") do
|
12
|
-
has_git_repos
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
9
|
+
|
16
10
|
def has_git_repos
|
17
11
|
exec({:name => "git-#{name}"}) do
|
18
|
-
command
|
19
|
-
cwd "#{
|
20
|
-
creates "#{::File.join( (
|
12
|
+
command parent.user ? "git clone #{parent.user}@#{parent.source} #{parent.path}" : "git clone #{parent.source} #{parent.to ? parent.to : ""}"
|
13
|
+
cwd "#{parent.cwd if parent.cwd}"
|
14
|
+
creates "#{::File.join( (parent.cwd ? parent.cwd : cwd), ::File.basename(parent.source, ::File.extname(parent.source)) )}/.git"
|
21
15
|
|
22
16
|
exec(:name => "update-#{name}") do
|
23
|
-
cwd ::File.dirname(
|
17
|
+
cwd ::File.dirname(parent.creates)
|
24
18
|
command "git pull"
|
25
19
|
end
|
26
20
|
|
data/lib/poolparty/version.rb
CHANGED
data/poolparty.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{poolparty}
|
3
|
-
s.version = "0.2.
|
3
|
+
s.version = "0.2.16"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.authors = ["Ari Lerner"]
|
7
|
-
s.date = %q{2008-10-
|
7
|
+
s.date = %q{2008-10-23}
|
8
8
|
s.description = %q{Self-healing, auto-scaling cloud computing tool}
|
9
9
|
s.email = ["ari.lerner@citrusbyte.com"]
|
10
|
-
s.executables = ["cloud", "cloud-add-keypair", "cloud-configure", "cloud-contract", "cloud-expand", "cloud-list", "cloud-maintain", "cloud-osxcopy", "cloud-provision", "cloud-refresh", "cloud-ssh", "cloud-start", "cloud-terminate", "pool", "pool-console", "pool-describe", "pool-list", "pool-provision", "pool-spec", "pool-start", "
|
10
|
+
s.executables = ["cloud", "cloud-add-keypair", "cloud-configure", "cloud-contract", "cloud-expand", "cloud-list", "cloud-maintain", "cloud-osxcopy", "cloud-provision", "cloud-refresh", "cloud-run", "cloud-ssh", "cloud-start", "cloud-terminate", "pool", "pool-console", "pool-describe", "pool-list", "pool-provision", "pool-spec", "pool-start", "server-fire-cmd", "server-get-load", "server-list-active", "server-rerun", "server-start-master", "server-start-node"]
|
11
11
|
s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "website/index.txt"]
|
12
|
-
s.files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "bin/cloud", "bin/cloud-add-keypair", "bin/cloud-configure", "bin/cloud-contract", "bin/cloud-expand", "bin/cloud-list", "bin/cloud-maintain", "bin/cloud-osxcopy", "bin/cloud-provision", "bin/cloud-refresh", "bin/cloud-ssh", "bin/cloud-start", "bin/cloud-terminate", "bin/pool", "bin/pool-console", "bin/pool-describe", "bin/pool-list", "bin/pool-provision", "bin/pool-spec", "bin/pool-start", "bin/
|
12
|
+
s.files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "bin/cloud", "bin/cloud-add-keypair", "bin/cloud-configure", "bin/cloud-contract", "bin/cloud-expand", "bin/cloud-list", "bin/cloud-maintain", "bin/cloud-osxcopy", "bin/cloud-provision", "bin/cloud-refresh", "bin/cloud-run", "bin/cloud-ssh", "bin/cloud-start", "bin/cloud-terminate", "bin/pool", "bin/pool-console", "bin/pool-describe", "bin/pool-list", "bin/pool-provision", "bin/pool-spec", "bin/pool-start", "bin/server-fire-cmd", "bin/server-get-load", "bin/server-list-active", "bin/server-rerun", "bin/server-start-master", "bin/server-start-node", "config/hoe.rb", "config/requirements.rb", "examples/basic.rb", "examples/plugin_without_plugin_directory.rb", "examples/poolparty.rb", "examples/with_apache_plugin.rb", "generators/poolspec/USAGE", "generators/poolspec/poolspec_generator.rb", "generators/poolspec/templates/pool_spec_template.erb", "lib/erlang/messenger/Makefile", "lib/erlang/messenger/README", "lib/erlang/messenger/Rakefile", "lib/erlang/messenger/control", "lib/erlang/messenger/ebin/master.app", "lib/erlang/messenger/ebin/master_app.beam", "lib/erlang/messenger/ebin/node.app", "lib/erlang/messenger/ebin/node_app.beam", "lib/erlang/messenger/ebin/pm_client.beam", "lib/erlang/messenger/ebin/pm_cluster.beam", "lib/erlang/messenger/ebin/pm_event_handler.beam", "lib/erlang/messenger/ebin/pm_master.beam", "lib/erlang/messenger/ebin/pm_master_rel-0.1.rel", "lib/erlang/messenger/ebin/pm_master_supervisor.beam", "lib/erlang/messenger/ebin/pm_node.beam", "lib/erlang/messenger/ebin/pm_node_rel-0.1.rel", "lib/erlang/messenger/ebin/pm_node_supervisor.beam", "lib/erlang/messenger/ebin/utils.beam", "lib/erlang/messenger/logs/pool_log.log", "lib/erlang/messenger/pm_master_rel-0.1.boot", "lib/erlang/messenger/pm_master_rel-0.1.script", "lib/erlang/messenger/pm_node_rel-0.1.boot", "lib/erlang/messenger/pm_node_rel-0.1.script", "lib/erlang/messenger/src/master_app.erl", "lib/erlang/messenger/src/node_app.erl", "lib/erlang/messenger/src/pm_client.erl", "lib/erlang/messenger/src/pm_cluster.erl", "lib/erlang/messenger/src/pm_event_handler.erl", "lib/erlang/messenger/src/pm_master.erl", "lib/erlang/messenger/src/pm_master_supervisor.erl", "lib/erlang/messenger/src/pm_node.erl", "lib/erlang/messenger/src/pm_node_supervisor.erl", "lib/erlang/messenger/src/utils.erl", "lib/erlang/messenger/tmp/templates/apache2.conf", "lib/erlang/messenger/tmp/templates/base.conf.erb", "lib/erlang/messenger/tmp/templates/browser_fixes.conf.erb", "lib/erlang/messenger/tmp/templates/mime-minimal.conf.erb", "lib/erlang/messenger/tmp/templates/virtual_host.conf.erb", "lib/poolparty.rb", "lib/poolparty/base_packages/haproxy.rb", "lib/poolparty/base_packages/heartbeat.rb", "lib/poolparty/base_packages/poolparty.rb", "lib/poolparty/base_packages/ruby.rb", "lib/poolparty/core/array.rb", "lib/poolparty/core/exception.rb", "lib/poolparty/core/float.rb", "lib/poolparty/core/hash.rb", "lib/poolparty/core/kernel.rb", "lib/poolparty/core/module.rb", "lib/poolparty/core/my_open_struct.rb", "lib/poolparty/core/object.rb", "lib/poolparty/core/proc.rb", "lib/poolparty/core/string.rb", "lib/poolparty/core/symbol.rb", "lib/poolparty/core/time.rb", "lib/poolparty/dependency_resolutions/base.rb", "lib/poolparty/dependency_resolutions/puppet.rb", "lib/poolparty/exceptions/RemoteException.rb", "lib/poolparty/exceptions/ResourceException.rb", "lib/poolparty/exceptions/RuntimeException.rb", "lib/poolparty/exceptions/SpecException.rb", "lib/poolparty/exceptions/TemplateNotFound.rb", "lib/poolparty/helpers/binary.rb", "lib/poolparty/helpers/console.rb", "lib/poolparty/helpers/display.rb", "lib/poolparty/helpers/optioner.rb", "lib/poolparty/helpers/provisioner_base.rb", "lib/poolparty/helpers/provisioners/master.rb", "lib/poolparty/helpers/provisioners/slave.rb", "lib/poolparty/modules/cloud_resourcer.rb", "lib/poolparty/modules/configurable.rb", "lib/poolparty/modules/definable_resource.rb", "lib/poolparty/modules/file_writer.rb", "lib/poolparty/modules/method_missing_sugar.rb", "lib/poolparty/modules/output.rb", "lib/poolparty/modules/pretty_printer.rb", "lib/poolparty/modules/resourcing_dsl.rb", "lib/poolparty/modules/s3_string.rb", "lib/poolparty/modules/safe_instance.rb", "lib/poolparty/monitors/base_monitor.rb", "lib/poolparty/monitors/monitors/cpu_monitor.rb", "lib/poolparty/monitors/monitors/memory_monitor.rb", "lib/poolparty/net/remote.rb", "lib/poolparty/net/remote_bases/ec2.rb", "lib/poolparty/net/remote_instance.rb", "lib/poolparty/net/remoter.rb", "lib/poolparty/net/remoter_base.rb", "lib/poolparty/plugins/git.rb", "lib/poolparty/plugins/line.rb", "lib/poolparty/plugins/svn.rb", "lib/poolparty/pool/base.rb", "lib/poolparty/pool/cloud.rb", "lib/poolparty/pool/custom_resource.rb", "lib/poolparty/pool/loggable.rb", "lib/poolparty/pool/plugin.rb", "lib/poolparty/pool/plugin_model.rb", "lib/poolparty/pool/pool.rb", "lib/poolparty/pool/resource.rb", "lib/poolparty/pool/resources/class_package.rb", "lib/poolparty/pool/resources/conditional.rb", "lib/poolparty/pool/resources/cron.rb", "lib/poolparty/pool/resources/directory.rb", "lib/poolparty/pool/resources/exec.rb", "lib/poolparty/pool/resources/file.rb", "lib/poolparty/pool/resources/gem.rb", "lib/poolparty/pool/resources/host.rb", "lib/poolparty/pool/resources/package.rb", "lib/poolparty/pool/resources/remote_file.rb", "lib/poolparty/pool/resources/service.rb", "lib/poolparty/pool/resources/sshkey.rb", "lib/poolparty/pool/resources/symlink.rb", "lib/poolparty/pool/resources/variable.rb", "lib/poolparty/pool/script.rb", "lib/poolparty/templates/authkeys", "lib/poolparty/templates/cib.xml", "lib/poolparty/templates/fileserver.conf", "lib/poolparty/templates/gem", "lib/poolparty/templates/ha.cf", "lib/poolparty/templates/haproxy.conf", "lib/poolparty/templates/haresources", "lib/poolparty/templates/namespaceauth.conf", "lib/poolparty/templates/poolparty.monitor", "lib/poolparty/templates/puppet.conf", "lib/poolparty/version.rb", "lib/poolpartycl.rb", "poolparty.gemspec", "script/destroy", "script/generate", "script/txt2html", "setup.rb", "spec/poolparty/base_packages/haproxy_spec.rb", "spec/poolparty/base_packages/heartbeat_spec.rb", "spec/poolparty/bin/console_spec.rb", "spec/poolparty/core/array_spec.rb", "spec/poolparty/core/float.rb", "spec/poolparty/core/hash_spec.rb", "spec/poolparty/core/kernel_spec.rb", "spec/poolparty/core/module_spec.rb", "spec/poolparty/core/object_spec.rb", "spec/poolparty/core/string_spec.rb", "spec/poolparty/core/time_spec.rb", "spec/poolparty/dependency_resolutions/base_spec.rb", "spec/poolparty/helpers/binary_spec.rb", "spec/poolparty/helpers/display_spec.rb", "spec/poolparty/helpers/optioner_spec.rb", "spec/poolparty/helpers/provisioner_base_spec.rb", "spec/poolparty/helpers/provisioners/master_spec.rb", "spec/poolparty/helpers/provisioners/slave_spec.rb", "spec/poolparty/modules/cloud_resourcer_spec.rb", "spec/poolparty/modules/configurable_spec.rb", "spec/poolparty/modules/definable_resource.rb", "spec/poolparty/modules/file_writer_spec.rb", "spec/poolparty/modules/s3_string_spec.rb", "spec/poolparty/monitors/base_monitor_spec.rb", "spec/poolparty/monitors/monitors/cpu_monitor_spec.rb", "spec/poolparty/net/remote_bases/ec2_spec.rb", "spec/poolparty/net/remote_instance_spec.rb", "spec/poolparty/net/remote_spec.rb", "spec/poolparty/net/remoter_base_spec.rb", "spec/poolparty/net/remoter_spec.rb", "spec/poolparty/plugins/git_spec.rb", "spec/poolparty/plugins/line_spec.rb", "spec/poolparty/plugins/svn_spec.rb", "spec/poolparty/pool/base_spec.rb", "spec/poolparty/pool/cloud_spec.rb", "spec/poolparty/pool/configurers/files/ruby_basic.rb", "spec/poolparty/pool/configurers/files/ruby_plugins.rb", "spec/poolparty/pool/configurers/ruby_spec.rb", "spec/poolparty/pool/custom_resource_spec.rb", "spec/poolparty/pool/example_spec.rb", "spec/poolparty/pool/plugin_model_spec.rb", "spec/poolparty/pool/plugin_spec.rb", "spec/poolparty/pool/pool_spec.rb", "spec/poolparty/pool/resource_spec.rb", "spec/poolparty/pool/resources/class_package_spec.rb", "spec/poolparty/pool/resources/conditional_spec.rb", "spec/poolparty/pool/resources/cron_spec.rb", "spec/poolparty/pool/resources/directory_spec.rb", "spec/poolparty/pool/resources/exec_spec.rb", "spec/poolparty/pool/resources/file_spec.rb", "spec/poolparty/pool/resources/gem_spec.rb", "spec/poolparty/pool/resources/host_spec.rb", "spec/poolparty/pool/resources/package_spec.rb", "spec/poolparty/pool/resources/remote_file_spec.rb", "spec/poolparty/pool/resources/service_spec.rb", "spec/poolparty/pool/resources/sshkey_spec.rb", "spec/poolparty/pool/resources/symlink_spec.rb", "spec/poolparty/pool/resources/variable_spec.rb", "spec/poolparty/pool/script_spec.rb", "spec/poolparty/pool/test_plugins/sshkey_test", "spec/poolparty/pool/test_plugins/virtual_host_template.erb", "spec/poolparty/pool/test_plugins/webserver.rb", "spec/poolparty/poolparty_spec.rb", "spec/poolparty/spec_helper.rb", "tasks/cloud.rake", "tasks/deployment.rake", "tasks/development.rake", "tasks/ec2.rake", "tasks/environment.rake", "tasks/instance.rake", "tasks/server.rake", "tasks/spec.rake", "tasks/website.rake", "test/test_generator_helper.rb", "test/test_helper.rb", "test/test_pool_spec_generator.rb", "test/test_poolparty.rb", "test_manifest.pp", "website/index.html", "website/index.txt", "website/javascripts/rounded_corners_lite.inc.js", "website/stylesheets/code.css", "website/stylesheets/screen.css", "website/template.html.erb"]
|
13
13
|
s.has_rdoc = true
|
14
14
|
s.homepage = %q{http://poolparty.rubyforge.org}
|
15
15
|
s.post_install_message = %q{Get ready to jump in the pool, you just installed poolpartyrb!
|
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../../../lib/poolparty/helpers/console'
|
|
3
3
|
|
4
4
|
describe "Console" do
|
5
5
|
before(:each) do
|
6
|
-
::File.stub!(:
|
6
|
+
::File.stub!(:readable?).with("pop").and_return true
|
7
7
|
end
|
8
8
|
describe "load_pool" do
|
9
9
|
before(:each) do
|
@@ -31,8 +31,9 @@ describe "Option Parser" do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
it "should be able to take a block and set some options on the block" do
|
34
|
-
o = PoolParty::Optioner.new(["-w"]
|
34
|
+
o = PoolParty::Optioner.new(["-w"]) do |opts, optioner|
|
35
35
|
opts.on('-w', '--wee') { optioner.wee "wee" }
|
36
|
+
opts.on('-t t', '--teatime tea') { optioner.tea "time" }
|
36
37
|
end
|
37
38
|
o.wee.should == "wee"
|
38
39
|
end
|
@@ -52,7 +52,7 @@ describe "ProvisionerBase" do
|
|
52
52
|
ProvisionerBase.installers[:ubuntu].should_not be_nil
|
53
53
|
end
|
54
54
|
it "should be able to fetch the ubuntu installer with the helper method installer" do
|
55
|
-
ProvisionerBase.new(@remote_instance,@cloud, "ubuntu").installer_for.should == "
|
55
|
+
ProvisionerBase.new(@remote_instance,@cloud, "ubuntu").installer_for.should == "aptitude install -y "
|
56
56
|
end
|
57
57
|
it "should be able to fetch the fedora installer with the helper method installer" do
|
58
58
|
ProvisionerBase.new(@remote_instance,@cloud, "fedora").installer_for.should == "yum install "
|
@@ -37,7 +37,7 @@ describe "Master provisioner" do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
it "should return install_puppet_master as apt-get install puppet factor" do
|
40
|
-
@master.install_puppet.should =~ /
|
40
|
+
@master.install_puppet.should =~ /install -y puppet puppetmaster/
|
41
41
|
end
|
42
42
|
it "should return setup basic structure" do
|
43
43
|
@master.setup_basic_structure.should =~ /puppetmasterd --mkusers/
|
@@ -190,51 +190,60 @@ describe "Remote" do
|
|
190
190
|
end
|
191
191
|
describe "should_contract_cloud?" do
|
192
192
|
end
|
193
|
-
describe "
|
193
|
+
describe "expansions" do
|
194
194
|
before(:each) do
|
195
|
-
|
196
|
-
@tc.stub!(:
|
197
|
-
|
198
|
-
@tc.stub!(:
|
199
|
-
@tc.stub!(:prepare_to_configuration).and_return true
|
200
|
-
@tc.stub!(:build_and_store_new_config_file).and_return true
|
195
|
+
@tc.stub!(:copy_ssh_app).and_return true
|
196
|
+
@tc.stub!(:prepare_reconfiguration).and_return "full"
|
197
|
+
PoolParty::Provisioner.stub!(:configure_master).and_return true
|
198
|
+
@tc.stub!(:wait).and_return true
|
201
199
|
end
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
it "should see if we should contract the cloud" do
|
230
|
-
@tc.should_receive(:should_contract_cloud?).once.and_return false
|
231
|
-
end
|
232
|
-
it "should call request_termination_of_non_master_instance if we should_contract_cloud?" do
|
233
|
-
@tc.should_receive(:should_contract_cloud?).once.and_return true
|
234
|
-
@tc.should_receive(:request_termination_of_non_master_instance).once.and_return true
|
200
|
+
describe "expand_cloud_if_necessary" do
|
201
|
+
before(:each) do
|
202
|
+
stub_list_from_remote_for(@tc)
|
203
|
+
@tc.stub!(:request_launch_new_instances).and_return true
|
204
|
+
@tc.stub!(:can_start_a_new_instance).and_return true
|
205
|
+
@tc.stub!(:list_of_pending_instances).and_return []
|
206
|
+
@tc.stub!(:prepare_to_configuration).and_return true
|
207
|
+
@tc.stub!(:build_and_store_new_config_file).and_return true
|
208
|
+
PoolParty::Provisioner.stub!(:provision_slaves).and_return true
|
209
|
+
end
|
210
|
+
it "should receive can_start_a_new_instance?" do
|
211
|
+
@tc.should_receive(:can_start_a_new_instance?).once
|
212
|
+
end
|
213
|
+
it "should see if we should expand the cloud" do
|
214
|
+
@tc.should_receive(:should_expand_cloud?).once.and_return false
|
215
|
+
end
|
216
|
+
it "should call request_launch_new_instances if we should_expand_cloud?" do
|
217
|
+
@tc.should_receive(:should_expand_cloud?).once.and_return true
|
218
|
+
@tc.should_receive(:request_launch_new_instances).once.and_return [{:ip => "127.0.0.5", :name => "node2"}]
|
219
|
+
end
|
220
|
+
it "should call a new slave provisioner" do
|
221
|
+
@tc.stub!(:should_expand_cloud?).once.and_return true
|
222
|
+
PoolParty::Provisioner.should_receive(:provision_slaves).and_return true
|
223
|
+
end
|
224
|
+
after(:each) do
|
225
|
+
@tc.expand_cloud_if_necessary
|
226
|
+
end
|
235
227
|
end
|
236
|
-
|
237
|
-
|
228
|
+
describe "contract_cloud_if_necessary" do
|
229
|
+
before(:each) do
|
230
|
+
@tc.stub!(:request_termination_of_non_master_instance).and_return true
|
231
|
+
@tc.stub!(:can_shutdown_an_instance?).and_return true
|
232
|
+
@tc.stub!(:wait).and_return true
|
233
|
+
end
|
234
|
+
it "should receive can_shutdown_an_instance?" do
|
235
|
+
@tc.should_receive(:can_shutdown_an_instance?).once
|
236
|
+
end
|
237
|
+
it "should see if we should contract the cloud" do
|
238
|
+
@tc.should_receive(:should_contract_cloud?).once.and_return false
|
239
|
+
end
|
240
|
+
it "should call request_termination_of_non_master_instance if we should_contract_cloud?" do
|
241
|
+
@tc.should_receive(:should_contract_cloud?).once.and_return true
|
242
|
+
@tc.should_receive(:request_termination_of_non_master_instance).once.and_return true
|
243
|
+
end
|
244
|
+
after(:each) do
|
245
|
+
@tc.contract_cloud_if_necessary
|
246
|
+
end
|
238
247
|
end
|
239
248
|
end
|
240
249
|
describe "rsync_storage_files_to" do
|
data/website/index.html
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
<h1>PoolParty</h1>
|
35
35
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/poolparty"; return false'>
|
36
36
|
<p>Get Version</p>
|
37
|
-
<a href="http://rubyforge.org/projects/poolparty" class="numbers">0.2.
|
37
|
+
<a href="http://rubyforge.org/projects/poolparty" class="numbers">0.2.16</a>
|
38
38
|
</div>
|
39
39
|
<h1>‘Easy cloud computing’</h1>
|
40
40
|
<h2>What</h2>
|