auser-poolparty 0.2.15 → 0.2.16
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 +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>
|