auser-poolparty 0.2.85 → 0.2.88
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 +1 -0
- data/PostInstall.txt +1 -1
- data/bin/cloud-add-access +29 -0
- data/bin/server-start-client +1 -1
- data/bin/server-start-master +1 -1
- data/bin/server-start-node +1 -1
- data/lib/poolparty/base_packages/haproxy.rb +4 -5
- data/lib/poolparty/base_packages/poolparty.rb +7 -1
- data/lib/poolparty/capistrano.rb +1 -9
- data/lib/poolparty/core/hash.rb +3 -0
- data/lib/poolparty/helpers/display.rb +1 -1
- data/lib/poolparty/modules/cloud_resourcer.rb +1 -1
- data/lib/poolparty/monitors/monitors/cpu_monitor.rb +1 -1
- data/lib/poolparty/net/messenger.rb +1 -1
- data/lib/poolparty/net/remote_bases/ec2.rb +24 -30
- data/lib/poolparty/net/remoter.rb +6 -2
- data/lib/poolparty/net/remoter_base.rb +7 -5
- data/lib/poolparty/poolparty/cloud.rb +1 -1
- data/lib/poolparty/poolparty/resources/gem_package.rb +2 -2
- data/lib/poolparty/provisioners/capistrano/capistrano.rb +47 -20
- data/lib/poolparty/provisioners/capistrano/recipies/base.rb +58 -19
- data/lib/poolparty/provisioners/capistrano/recipies/master.rb +23 -49
- data/lib/poolparty/provisioners/capistrano/recipies/slave.rb +33 -5
- data/lib/poolparty/provisioners/provisioner_base.rb +9 -0
- data/lib/poolparty/version.rb +1 -1
- data/lib/poolparty.rb +1 -1
- data/lib/poolpartycl.rb +1 -1
- data/poolparty.gemspec +5 -3
- data/spec/poolparty/core/hash_spec.rb +8 -0
- data/spec/poolparty/poolparty/cloud_spec.rb +1 -1
- data/spec/poolparty/provisioners/capistrano/capistrano_spec.rb +6 -1
- data/website/index.html +1 -1
- metadata +5 -3
data/Manifest.txt
CHANGED
data/PostInstall.txt
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
3
|
+
require "poolparty"
|
4
|
+
require "poolpartycl"
|
5
|
+
|
6
|
+
o = PoolParty::Optioner.new(ARGV, {:extra_help => "\nUsage: cloud [options] add-access file\n\n"}) do |opts, optioner|
|
7
|
+
opts.on('-n name', '--name name', 'Listing for cloud name') { |c| optioner.cloudname c }
|
8
|
+
opts.on('-i num', '--id num', 'Instance num to ssh (default: 0)') { |i| optioner.num i }
|
9
|
+
end
|
10
|
+
|
11
|
+
@instance_number = (o.num || 0 ).to_i
|
12
|
+
|
13
|
+
if o.unflagged_args.length == 1
|
14
|
+
@file = o.unflagged_args.pop
|
15
|
+
else
|
16
|
+
puts header("Error")
|
17
|
+
puts "usage: \nUsage: cloud [options] add-access file\n\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
o.loaded_clouds.each do |cloud|
|
21
|
+
|
22
|
+
with_cloud(cloud, {:rsa_file=>@file }) do
|
23
|
+
# Add access here
|
24
|
+
cmd = "cat #{rsa_file} | #{ssh_command(master)} 'cat >> ~/.ssh/authorized_keys'"
|
25
|
+
vputs "Running #{cmd}"
|
26
|
+
Kernel.system cmd
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
data/bin/server-start-client
CHANGED
@@ -18,7 +18,7 @@ o.loaded_clouds.each do |cloud|
|
|
18
18
|
boot_file = "#{Messenger.append_dir}/pm_client_rel-0.1"
|
19
19
|
|
20
20
|
Kernel.system "cd #{Messenger.append_dir} && rake build_boot_scripts" unless ::File.file?("#{boot_file}.boot") || testing
|
21
|
-
command = Messenger.erl_command("client", "-
|
21
|
+
command = Messenger.erl_command("client", "-boot #{boot_file} #{noshell ? "" : "-detached -heart -noshell"}", 7049, 7050)
|
22
22
|
vputs "Running #{command}"
|
23
23
|
|
24
24
|
Kernel.system "export HOME=/root && #{command}" unless testing
|
data/bin/server-start-master
CHANGED
@@ -16,7 +16,7 @@ o.loaded_clouds.each do |cloud|
|
|
16
16
|
|
17
17
|
boot_file = "#{Messenger.append_dir}/pm_master_rel-0.1"
|
18
18
|
Kernel.system ". /etc/profile && server-build-messenger" unless ::File.file?("#{boot_file}.boot") || testing
|
19
|
-
command = Messenger.erl_command("master", "-
|
19
|
+
command = Messenger.erl_command("master", "-boot #{boot_file} #{noshell ? "" : "-noshell -detached -heart"}")
|
20
20
|
vputs "Running #{command}"
|
21
21
|
|
22
22
|
Kernel.system "export HOME=/root && #{command}" unless testing
|
data/bin/server-start-node
CHANGED
@@ -22,7 +22,7 @@ o.loaded_clouds.each do |cloud|
|
|
22
22
|
boot_file = "#{Messenger.append_dir}/pm_node_rel-0.1"
|
23
23
|
|
24
24
|
Kernel.system ". /etc/profile && server-build-messenger" unless ::File.file?("#{boot_file}.boot") || testing
|
25
|
-
command = Messenger.erl_command(hostname, "-
|
25
|
+
command = Messenger.erl_command(hostname, "-boot #{boot_file} #{noshell ? "" : "-noshell -detached -heart"} -- #{available_monitors.join(" ")}")
|
26
26
|
vputs "Running #{command}"
|
27
27
|
|
28
28
|
Kernel.system "export HOME=/root && #{command}" unless testing
|
@@ -5,9 +5,11 @@ module PoolParty
|
|
5
5
|
def enable
|
6
6
|
execute_on_master do
|
7
7
|
has_package({:name => "haproxy"})
|
8
|
-
|
8
|
+
|
9
|
+
# Service is required
|
10
|
+
has_service(:name => "haproxy", :ensures => "running")
|
9
11
|
# Restart sysklogd after we update the haproxy.log
|
10
|
-
has_service(:name => "sysklogd")
|
12
|
+
has_service(:name => "sysklogd", :notify => get_service("haproxy"))
|
11
13
|
|
12
14
|
# Template variables
|
13
15
|
has_variable(:name => "name_haproxy", :value => "#{cloud.name}")
|
@@ -22,9 +24,6 @@ module PoolParty
|
|
22
24
|
has_line_in_file("ENABLED=1", "/etc/default/haproxy")
|
23
25
|
has_line_in_file("SYSLOGD=\"-r\"", "/etc/default/syslogd")
|
24
26
|
has_line_in_file("local0.* /var/log/haproxy.log", "/etc/syslog.conf", {:notify => get_service("sysklogd")})
|
25
|
-
|
26
|
-
# Service is required
|
27
|
-
has_service(:name => "haproxy", :ensures => "running")
|
28
27
|
|
29
28
|
# has_exec(:name => "reloadhaproxy", :command => "/etc/init.d/haproxy reload", :requires => get_package("haproxy"))
|
30
29
|
|
@@ -27,7 +27,13 @@ module PoolParty
|
|
27
27
|
|
28
28
|
has_gempackage(:name => "sexp_processor", :download_url => "http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem")
|
29
29
|
|
30
|
-
|
30
|
+
# Capistrano
|
31
|
+
has_gempackage(:name => "net-ssh", :download_url => "http://rubyforge.org/frs/download.php/48041/net-ssh-2.0.6.gem")
|
32
|
+
has_gempackage(:name => "net-sftp", :download_url => "http://rubyforge.org/frs/download.php/37669/net-sftp-2.0.1.gem")
|
33
|
+
has_gempackage(:name => "net-scp", :download_url => "http://rubyforge.org/frs/download.php/37664/net-scp-1.0.1.gem")
|
34
|
+
has_gempackage(:name => "net-ssh-gateway", :download_url => "http://rubyforge.org/frs/download.php/36389/net-ssh-gateway-1.0.0.gem")
|
35
|
+
has_gempackage(:name => "highline", :download_url => "http://rubyforge.org/frs/download.php/46328/highline-1.5.0.gem")
|
36
|
+
has_gempackage(:name => "capistrano", :requires => get_gempackage("highline"))
|
31
37
|
|
32
38
|
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")])
|
33
39
|
|
data/lib/poolparty/capistrano.rb
CHANGED
@@ -5,14 +5,6 @@ module PoolParty
|
|
5
5
|
raise unless cld
|
6
6
|
@cloud = cld
|
7
7
|
end
|
8
|
-
|
9
|
-
def set_poolparty_roles
|
10
|
-
returning Array.new do |arr|
|
11
|
-
arr << "role 'master.#{@cloud.name}'.to_sym, '#{@cloud.master.ip}'"
|
12
|
-
arr << "role :master, '#{@cloud.master.ip}'"
|
13
|
-
arr << "role :slaves, '#{@cloud.nonmaster_nonterminated_instances.map{|a| a.ip}.join('", "')}'" if @cloud.nonmaster_nonterminated_instances.size > 0
|
14
|
-
end.join("\n")
|
15
|
-
end
|
16
|
-
|
8
|
+
|
17
9
|
end
|
18
10
|
end
|
data/lib/poolparty/core/hash.rb
CHANGED
@@ -39,7 +39,7 @@ module PoolParty
|
|
39
39
|
|
40
40
|
def setup_dev
|
41
41
|
unless ::File.exists?("#{full_keypair_basename_path}.pub")
|
42
|
-
cmd = "scp #{
|
42
|
+
cmd = "scp #{scp_array.join(" ")} #{Base.user}@#{master.ip}:.ssh/authorized_keys #{full_keypair_basename_path}.pub"
|
43
43
|
vputs "Running #{cmd}"
|
44
44
|
Kernel.system(cmd)
|
45
45
|
end
|
@@ -16,7 +16,7 @@ module PoolParty
|
|
16
16
|
end
|
17
17
|
# TODO: Fix cookie setting
|
18
18
|
def self.erl_command(hostname, extra="", min_ports=7000, max_ports=7050)
|
19
|
-
command_line_opts = "-pa #{append_dir}/ebin -kernel inet_dist_listen_min #{min_ports} inet_dist_listen_max #{max_ports} -sname #{hostname}"
|
19
|
+
command_line_opts = "-cookie -pa #{append_dir}/ebin -kernel inet_dist_listen_min #{min_ports} inet_dist_listen_max #{max_ports} -sname #{hostname}"
|
20
20
|
|
21
21
|
"erl #{command_line_opts} #{extra}"
|
22
22
|
end
|
@@ -9,6 +9,20 @@ require "#{::File.dirname(__FILE__)}/ec2/ec2_response_object"
|
|
9
9
|
|
10
10
|
begin
|
11
11
|
require 'EC2'
|
12
|
+
rescue LoadError
|
13
|
+
puts <<-EOM
|
14
|
+
Error: In order to use ec2, you need to install the amazon-ec2 gem
|
15
|
+
|
16
|
+
Ec2 is the default remoter base for PoolParty. If you intend on using
|
17
|
+
a different remoter base, specify it with:
|
18
|
+
|
19
|
+
using :remoter_name
|
20
|
+
|
21
|
+
in your config file, otherwise, to continue install amazon-ec2 with
|
22
|
+
|
23
|
+
gem install amazon-ec2
|
24
|
+
EOM
|
25
|
+
end
|
12
26
|
|
13
27
|
class String
|
14
28
|
def convert_from_ec2_to_ip
|
@@ -141,26 +155,20 @@ begin
|
|
141
155
|
|
142
156
|
# Hook
|
143
157
|
#TODO#: Change this so they match with the cap tasks
|
144
|
-
def custom_install_tasks_for(o)
|
145
|
-
|
146
|
-
[
|
147
|
-
# "mv #{::File.basename(pub_key)} #{Base.base_config_directory}/ssl/public_keys/#{o.name}.pem",
|
148
|
-
# "mv #{::File.basename(private_key)} #{Base.base_config_directory}/ssl/private_keys/#{o.name}.pem"
|
149
|
-
]
|
150
|
-
else
|
151
|
-
[]
|
152
|
-
end
|
153
|
-
arr << [
|
154
|
-
"# ec2 installation tasks",
|
155
|
-
"# Set hostname",
|
158
|
+
def custom_install_tasks_for(o)
|
159
|
+
[
|
156
160
|
# "if [ -z $(grep -v '#' /etc/hosts | grep '#{o.name}') ]; then echo \"$(curl http://169.254.169.254/latest/meta-data/public-ipv4) #{o.name}\" >> /etc/hosts; fi",
|
157
161
|
"if [ -z \"$(grep -v '#' /etc/hosts | grep '#{o.name}')\" ]; then echo '127.0.0.1 #{o.name}' >> /etc/hosts; fi",
|
158
162
|
"hostname #{o.name}",
|
159
|
-
"echo #{o.name} > /etc/hostname"
|
163
|
+
"echo #{o.name} > /etc/hostname"
|
164
|
+
]
|
165
|
+
end
|
166
|
+
|
167
|
+
def after_install_tasks_for(o)
|
168
|
+
[
|
160
169
|
"cd /var/poolparty && wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon-ec2.gem 2>&1",
|
161
|
-
"/usr/bin/gem install
|
170
|
+
"/usr/bin/gem install --no-ri --no-rdoc amazon-ec2.gem 2>&1"
|
162
171
|
]
|
163
|
-
[]
|
164
172
|
end
|
165
173
|
|
166
174
|
def custom_configure_tasks_for(o)
|
@@ -173,18 +181,4 @@ begin
|
|
173
181
|
end
|
174
182
|
end
|
175
183
|
register_remote_base :Ec2
|
176
|
-
end
|
177
|
-
rescue LoadError
|
178
|
-
puts <<-EOM
|
179
|
-
Error: In order to use ec2, you need to install the amazon-ec2 gem
|
180
|
-
|
181
|
-
Ec2 is the default remoter base for PoolParty. If you intend on using
|
182
|
-
a different remoter base, specify it with:
|
183
|
-
|
184
|
-
using :remoter_name
|
185
|
-
|
186
|
-
in your config file, otherwise, to continue install amazon-ec2 with
|
187
|
-
|
188
|
-
gem install amazon-ec2
|
189
|
-
EOM
|
190
|
-
end
|
184
|
+
end
|
@@ -15,7 +15,7 @@ module PoolParty
|
|
15
15
|
end
|
16
16
|
def run_command_on_command(cmd="ls -l", remote_instance=nil)
|
17
17
|
vputs "Running #{cmd} on #{remote_instance.name == %x[hostname].chomp ? "self (master)" : "#{remote_instance.name}"}"
|
18
|
-
remote_instance.name == %x[hostname].chomp ? %x[#{cmd}] : "#{ssh_command(remote_instance)} '#{cmd}'"
|
18
|
+
(remote_instance.nil? || remote_instance.name == %x[hostname].chomp) ? %x[#{cmd}] : "#{ssh_command(remote_instance)} '#{cmd}'"
|
19
19
|
end
|
20
20
|
def ssh_command(remote_instance)
|
21
21
|
"#{ssh_string} #{remote_instance.ip}"
|
@@ -32,6 +32,9 @@ module PoolParty
|
|
32
32
|
def ssh_array
|
33
33
|
["-o StrictHostKeyChecking=no", "-l #{Base.user}", '-i "'+full_keypair_path+'"']
|
34
34
|
end
|
35
|
+
def scp_array
|
36
|
+
["-o StrictHostKeyChecking=no", '-i "'+full_keypair_path+'"']
|
37
|
+
end
|
35
38
|
def rsync_command
|
36
39
|
"rsync -azP --exclude cache -e '#{ssh_string} -l #{Base.user}'"
|
37
40
|
end
|
@@ -144,6 +147,7 @@ module PoolParty
|
|
144
147
|
def when_no_pending_instances(&block)
|
145
148
|
reset!
|
146
149
|
if list_of_pending_instances.size == 0
|
150
|
+
vputs ""
|
147
151
|
block.call if block
|
148
152
|
else
|
149
153
|
vprint "."
|
@@ -303,7 +307,7 @@ module PoolParty
|
|
303
307
|
# Take the rsync command and execute it on the system
|
304
308
|
# if there is an instance given
|
305
309
|
def run_command_on(cmd, instance=nil)
|
306
|
-
Kernel.system "#{run_command_on_command(cmd, instance)}"
|
310
|
+
Kernel.system "#{run_command_on_command(cmd, instance)}"
|
307
311
|
end
|
308
312
|
|
309
313
|
# Ssh into the instance given
|
@@ -20,7 +20,8 @@ module PoolParty
|
|
20
20
|
|
21
21
|
def register_remote_base(*args)
|
22
22
|
args.each do |arg|
|
23
|
-
|
23
|
+
base_name = "#{arg}".downcase.to_sym
|
24
|
+
(remote_bases << base_name) unless remote_bases.include?(base_name)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -85,7 +86,7 @@ module PoolParty
|
|
85
86
|
end
|
86
87
|
# Get instance by number
|
87
88
|
def get_instance_by_number(i=0, list = remote_instances_list)
|
88
|
-
name = (i.zero? ? "master" : "node#{i}")
|
89
|
+
name = ((i.nil? || i.zero?) ? "master" : "node#{i}")
|
89
90
|
list.select {|i| i.name == name }.first
|
90
91
|
end
|
91
92
|
# A callback before the configuration task takes place
|
@@ -99,9 +100,10 @@ module PoolParty
|
|
99
100
|
# List the instances for the current key pair, regardless of their states
|
100
101
|
# If no keypair is passed, select them all
|
101
102
|
def list_of_instances(keyp=nil)
|
102
|
-
tmp_key = (keyp ? keyp :
|
103
|
+
tmp_key = (keyp ? keyp : nil)
|
104
|
+
|
103
105
|
unless @describe_instances
|
104
|
-
tmpInstanceList = describe_instances.select {|a| a if tmp_key ? a[:keypair] == tmp_key
|
106
|
+
tmpInstanceList = describe_instances.select {|a| a if (tmp_key.nil? || tmp_key.empty? ? true : a[:keypair] == tmp_key) }
|
105
107
|
has_master = !tmpInstanceList.select {|a| a[:name] == "master" }.empty?
|
106
108
|
if has_master
|
107
109
|
@describe_instances = tmpInstanceList
|
@@ -134,7 +136,7 @@ module PoolParty
|
|
134
136
|
@describe_instances = nil
|
135
137
|
end
|
136
138
|
def self.included(other)
|
137
|
-
PoolParty.register_remote_base(self.class.to_s.downcase.to_sym)
|
139
|
+
# PoolParty.register_remote_base(self.class.to_s.downcase.to_sym)
|
138
140
|
end
|
139
141
|
|
140
142
|
# Callback after loaded
|
@@ -127,7 +127,7 @@ module PoolParty
|
|
127
127
|
# talk to each other safely. This is based off the keypair
|
128
128
|
# and the name of the cloud
|
129
129
|
def generate_unique_cookie_string
|
130
|
-
Digest::SHA256.hexdigest("#{full_keypair_name}#{name}")
|
130
|
+
Digest::SHA256.hexdigest("#{full_keypair_name}#{name}")[0..12]
|
131
131
|
end
|
132
132
|
|
133
133
|
# Build the new poolparty manifest
|
@@ -22,14 +22,14 @@ module PoolParty
|
|
22
22
|
})
|
23
23
|
|
24
24
|
has_exec(opts.merge({:name => "#{name}", :cwd =>"#{Base.remote_storage_path}"})) do
|
25
|
-
command "gem install
|
25
|
+
command "gem install --no-ri --no-rdoc #{Base.remote_storage_path}/#{name}.gem"
|
26
26
|
ifnot "gem list --local #{name} | grep #{name} #{"| grep #{version}" if version}"
|
27
27
|
requires get_file("#{Base.remote_storage_path}/#{name}.gem")
|
28
28
|
end
|
29
29
|
|
30
30
|
else
|
31
31
|
has_exec(opts.merge({:name => "#{name}", :cwd => "/tmp", :path => "/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/var/lib/gems/1.8/bin"})) do
|
32
|
-
command "gem install
|
32
|
+
command "gem install --no-ri --no-rdoc #{"--version #{version}" if version} #{"--source #{source}" if source} #{name} <<heredoc
|
33
33
|
1
|
34
34
|
heredoc"
|
35
35
|
ifnot "gem list --local #{name} | grep #{name} #{"| grep #{version}" if version}"
|
@@ -4,7 +4,6 @@ module PoolParty
|
|
4
4
|
module Provisioner
|
5
5
|
class Capistrano < ProvisionerBase
|
6
6
|
|
7
|
-
include PoolParty::Capistrano
|
8
7
|
include ::Capistrano::Configuration::Actions::Invocation
|
9
8
|
|
10
9
|
def process_install!(testing=false)
|
@@ -31,33 +30,48 @@ module PoolParty
|
|
31
30
|
|
32
31
|
def master_install_tasks
|
33
32
|
[
|
34
|
-
"
|
35
|
-
|
33
|
+
"custom_install_tasks",
|
34
|
+
"master_provision_master_task",
|
35
|
+
"after_install_tasks",
|
36
|
+
"custom_configure_tasks",
|
37
|
+
"run_provisioner_twice",
|
38
|
+
"master_configure_master_task"
|
39
|
+
]#.map {|a| a.to_sym }
|
36
40
|
end
|
37
41
|
def master_configure_tasks
|
38
42
|
[
|
39
|
-
"
|
40
|
-
|
41
|
-
].push(custom_configure_tasks).flatten#.map {|a| a.to_sym }
|
43
|
+
"master_configure_master_task"
|
44
|
+
]#.map {|a| a.to_sym }
|
42
45
|
end
|
43
46
|
|
44
47
|
def slave_install_tasks
|
45
48
|
[
|
46
|
-
"
|
47
|
-
"
|
48
|
-
"
|
49
|
-
|
49
|
+
"custom_install_tasks",
|
50
|
+
"slave_provision_slave_task",
|
51
|
+
"after_install_tasks",
|
52
|
+
"custom_configure_tasks",
|
53
|
+
"slave_configure_slave_task"
|
54
|
+
]
|
50
55
|
end
|
51
56
|
def slave_configure_tasks
|
52
57
|
[
|
53
|
-
"
|
54
|
-
|
58
|
+
"custom_configure_tasks",
|
59
|
+
"slave_configure_slave_task"
|
60
|
+
]#.flatten.map {|a| a.to_sym }
|
55
61
|
end
|
56
62
|
# Run tasks after the initialized
|
57
63
|
def loaded
|
58
64
|
create_config
|
59
65
|
end
|
60
66
|
|
67
|
+
def set_poolparty_roles
|
68
|
+
returning Array.new do |arr|
|
69
|
+
arr << "role 'master.#{@cloud.name}'.to_sym, '#{@cloud.master.ip}'"
|
70
|
+
arr << "role :master, '#{@cloud.master.ip}'"
|
71
|
+
arr << "role :slaves, '#{@cloud.nonmaster_nonterminated_instances.map{|a| a.ip}.join('", "')}'" if @cloud.nonmaster_nonterminated_instances.size > 0
|
72
|
+
end.join("\n")
|
73
|
+
end
|
74
|
+
|
61
75
|
# Create the config for capistrano
|
62
76
|
# This is a dynamic capistrano configuration file
|
63
77
|
def create_config
|
@@ -86,18 +100,31 @@ module PoolParty
|
|
86
100
|
# Prerun
|
87
101
|
def prerun_setup
|
88
102
|
end
|
89
|
-
|
103
|
+
|
104
|
+
# In run_capistrano, we are going to run the entire capistrano process
|
105
|
+
# First,
|
90
106
|
def run_capistrano(roles=[:master], meth=:install)
|
91
107
|
prerun_setup
|
92
108
|
|
93
109
|
commands = meth == :install ? install_tasks : configure_tasks
|
94
|
-
name = "
|
95
|
-
|
110
|
+
name = "#{roles.first}_provisioner_#{meth}"
|
111
|
+
|
96
112
|
__define_task(name, roles) do
|
97
|
-
commands.map {|command|
|
98
|
-
task = find_task(command)
|
99
|
-
|
100
|
-
|
113
|
+
commands.map {|command|
|
114
|
+
task = find_task(command.to_sym)
|
115
|
+
|
116
|
+
if task
|
117
|
+
task.options.merge!(:roles => roles)
|
118
|
+
execute_task task
|
119
|
+
else
|
120
|
+
if provisioner.respond_to?(command.to_sym)
|
121
|
+
cmd = provisioner.send(command.to_sym)
|
122
|
+
cmd = cmd.join(" && ") if cmd.is_a?(Array)
|
123
|
+
run(cmd)
|
124
|
+
else
|
125
|
+
self.send(command.to_sym)
|
126
|
+
end
|
127
|
+
end
|
101
128
|
}
|
102
129
|
end
|
103
130
|
|
@@ -106,7 +133,7 @@ module PoolParty
|
|
106
133
|
return true
|
107
134
|
rescue ::Capistrano::CommandError => e
|
108
135
|
return false unless verbose
|
109
|
-
raise ProvisionerException.new("Error: #{e}")
|
136
|
+
puts "Error: #{e} " and raise ProvisionerException.new("Error: #{e}")
|
110
137
|
end
|
111
138
|
end
|
112
139
|
|
@@ -4,68 +4,74 @@
|
|
4
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
5
5
|
# namespace(:base) do
|
6
6
|
desc "Install rubygems"
|
7
|
-
|
7
|
+
def install_rubygems
|
8
8
|
run "#{installer_for} ruby rubygems"
|
9
9
|
end
|
10
10
|
desc "Setup for poolparty"
|
11
|
-
|
11
|
+
def setup_for_poolparty
|
12
12
|
run "mkdir -p /etc/poolparty"
|
13
13
|
end
|
14
14
|
desc "Install provisioner"
|
15
|
-
|
15
|
+
def install_provisioner
|
16
16
|
run "#{installer_for} #{puppet_packages}"
|
17
17
|
end
|
18
18
|
desc "Create poolparty commands"
|
19
|
-
|
19
|
+
def create_poolparty_commands
|
20
20
|
end
|
21
21
|
desc "Create poolparty runner command"
|
22
|
-
|
22
|
+
def create_puppetrunner_command
|
23
23
|
run <<-EOR
|
24
24
|
cp #{remote_storage_path}/templates/puppetrunner /usr/bin/puppetrunner &&
|
25
25
|
chmod +x /usr/bin/puppetrunner
|
26
26
|
EOR
|
27
27
|
end
|
28
28
|
desc "Create poolparty rerun command"
|
29
|
-
|
29
|
+
def create_puppetrerun_command
|
30
30
|
run <<-EOR
|
31
31
|
cp #{remote_storage_path}/templates/puppetrerun /usr/bin/puppetrerun &&
|
32
32
|
chmod +x /usr/bin/puppetrerun
|
33
33
|
EOR
|
34
34
|
end
|
35
35
|
desc "Add the proper configs for provisioner"
|
36
|
-
|
36
|
+
def add_provisioner_configs
|
37
37
|
run "cp #{remote_storage_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf"
|
38
38
|
end
|
39
39
|
desc "Setup config file for provisioner"
|
40
|
-
|
40
|
+
def setup_provisioner_config
|
41
41
|
run "mv #{remote_storage_path}/puppet.conf /etc/puppet/puppet.conf"
|
42
42
|
end
|
43
|
+
desc "Run the provisioner twice (usually on install)"
|
44
|
+
def run_provisioner_twice
|
45
|
+
run "/usr/sbin/puppetd --test --server master 2>1 > /dev/null && /usr/sbin/puppetd --onetime --daemonize --logdest syslog --server master"
|
46
|
+
end
|
43
47
|
desc "Run the provisioner"
|
44
|
-
|
48
|
+
def run_provisioner
|
45
49
|
run "/usr/sbin/puppetd --onetime --daemonize --logdest syslog --server master"
|
46
50
|
end
|
47
51
|
desc "Rerun the provisioner"
|
48
|
-
|
52
|
+
def rerun_provisioner
|
49
53
|
run "/usr/bin/puppetrerun"
|
50
54
|
end
|
51
55
|
desc "Remove the certs"
|
52
|
-
|
56
|
+
def remove_certs
|
53
57
|
run "rm -rf /etc/puppet/ssl"
|
54
58
|
end
|
55
59
|
desc "Update rubygems"
|
56
|
-
|
60
|
+
def update_rubygems
|
57
61
|
run "/usr/bin/gem update --system 2>1 > /dev/null && /usr/bin/gem update --system"
|
58
62
|
end
|
59
63
|
desc "Fix rubygems"
|
60
|
-
|
64
|
+
def fix_rubygems
|
61
65
|
# echo '#{open(::File.join(template_directory, "gem")).read}' > /usr/bin/gem &&
|
66
|
+
# cp #{remote_storage_path}/gem /usr/bin/gem
|
62
67
|
run <<-EOR
|
68
|
+
if gem -v; then echo "gem is working"; else cp #{remote_storage_path}/gem /usr/bin/gem; fi &&
|
63
69
|
/usr/bin/gem update --system 2>&1 > /dev/null;/usr/bin/gem update --system &&
|
64
|
-
|
70
|
+
if gem -v; then echo "gem is working"; else cp #{remote_storage_path}/gem /usr/bin/gem; fi
|
65
71
|
EOR
|
66
72
|
end
|
67
73
|
desc "Upgrade system"
|
68
|
-
|
74
|
+
def upgrade_system
|
69
75
|
str = case os
|
70
76
|
when :ubuntu
|
71
77
|
"
|
@@ -78,15 +84,15 @@ aptitude update -y
|
|
78
84
|
run str
|
79
85
|
end
|
80
86
|
desc "Upgrade rubygems"
|
81
|
-
|
87
|
+
def upgrade_rubygems
|
82
88
|
|
83
89
|
end
|
84
90
|
desc "Make log directory"
|
85
|
-
|
91
|
+
def make_log_directory
|
86
92
|
run "mkdir -p /var/log/poolparty"
|
87
93
|
end
|
88
94
|
desc "Create ssl storage directories for poolparty"
|
89
|
-
|
95
|
+
def create_poolparty_ssl_store
|
90
96
|
run <<-EOR
|
91
97
|
mkdir -p #{poolparty_config_directory}/ssl/private_keys &&
|
92
98
|
mkdir -p #{poolparty_config_directory}/ssl/certs &&
|
@@ -94,11 +100,44 @@ aptitude update -y
|
|
94
100
|
EOR
|
95
101
|
end
|
96
102
|
desc "Add erlang cookie"
|
97
|
-
|
103
|
+
def write_erlang_cookie
|
98
104
|
run <<-EOR
|
99
105
|
mv #{remote_storage_path}/cookie ~/.erlang.cookie &&
|
100
106
|
chmod 400 ~/.erlang.cookie
|
101
107
|
EOR
|
102
108
|
end
|
109
|
+
desc "Setup basic poolparty structure"
|
110
|
+
def setup_basic_poolparty_structure
|
111
|
+
run <<-EOR
|
112
|
+
echo "Creating basic structure for poolparty" &&
|
113
|
+
mkdir -p /etc/puppet/manifests/nodes &&
|
114
|
+
mkdir -p /etc/puppet/manifests/classes &&
|
115
|
+
echo "import 'nodes/*.pp'" > /etc/puppet/manifests/site.pp &&
|
116
|
+
echo "import 'classes/*.pp'" >> /etc/puppet/manifests/site.pp
|
117
|
+
EOR
|
118
|
+
end
|
119
|
+
desc "Setup shareable file system for provisioner"
|
120
|
+
def setup_provisioner_filestore
|
121
|
+
run <<-EOR
|
122
|
+
echo '[files]' > /etc/puppet/fileserver.conf &&
|
123
|
+
echo ' path #{remote_storage_path}' >> /etc/puppet/fileserver.conf &&
|
124
|
+
echo ' allow *' >> /etc/puppet/fileserver.conf &&
|
125
|
+
mkdir -p /var/poolparty/facts &&
|
126
|
+
mkdir -p /var/poolparty/files &&
|
127
|
+
mkdir -p #{base_config_directory}
|
128
|
+
EOR
|
129
|
+
end
|
130
|
+
desc "Setup autosigning for provisioner"
|
131
|
+
def setup_provisioner_autosigning
|
132
|
+
run "echo \"*\" > /etc/puppet/autosign.conf"
|
133
|
+
end
|
134
|
+
desc "Setup poolparty structure"
|
135
|
+
def setup_poolparty_base_structure
|
136
|
+
run <<-EOR
|
137
|
+
cp #{remote_storage_path}/#{key_file_locations.first} "#{base_config_directory}/.ppkeys" &&
|
138
|
+
mv #{remote_storage_path}/#{default_specfile_name} #{base_config_directory}/
|
139
|
+
EOR
|
140
|
+
end
|
141
|
+
|
103
142
|
# end
|
104
143
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# Cloud tasks
|
2
2
|
Capistrano::Configuration.instance(:must_exist).load do
|
3
|
-
namespace(:master) do
|
3
|
+
# namespace(:master) do
|
4
4
|
desc "Provision master"
|
5
|
-
|
5
|
+
def master_provision_master_task
|
6
6
|
upgrade_system
|
7
7
|
set_hostname_to_master
|
8
8
|
create_local_hosts_entry
|
@@ -23,54 +23,24 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
23
23
|
write_erlang_cookie
|
24
24
|
end
|
25
25
|
desc "Configure master"
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
def master_configure_master_task
|
27
|
+
create_local_node_entry_for_puppet
|
28
|
+
move_provisioner_manifest
|
29
|
+
move_template_files
|
30
|
+
setup_poolparty_base_structure
|
31
|
+
ensure_provisioner_is_running
|
30
32
|
run_provisioner
|
31
33
|
end
|
32
34
|
desc "Set hostname to master"
|
33
|
-
|
35
|
+
def set_hostname_to_master
|
34
36
|
run "hostname master"
|
35
37
|
end
|
36
38
|
desc "Add host entry into the master instance"
|
37
|
-
|
39
|
+
def create_local_hosts_entry
|
38
40
|
run "if [ -z \"$(grep -v '#' /etc/hosts | grep 'puppet')\" ]; then echo '#{cloud.master.ip} master puppet localhost' >> /etc/hosts; fi"
|
39
41
|
end
|
40
|
-
desc "Setup basic poolparty structure"
|
41
|
-
task :setup_basic_poolparty_structure do
|
42
|
-
run <<-EOR
|
43
|
-
echo "Creating basic structure for poolparty" &&
|
44
|
-
mkdir -p /etc/puppet/manifests/nodes &&
|
45
|
-
mkdir -p /etc/puppet/manifests/classes &&
|
46
|
-
echo "import 'nodes/*.pp'" > /etc/puppet/manifests/site.pp &&
|
47
|
-
echo "import 'classes/*.pp'" >> /etc/puppet/manifests/site.pp
|
48
|
-
EOR
|
49
|
-
end
|
50
|
-
desc "Setup shareable file system for provisioner"
|
51
|
-
task :setup_provisioner_filestore do
|
52
|
-
run <<-EOR
|
53
|
-
echo '[files]' > /etc/puppet/fileserver.conf &&
|
54
|
-
echo ' path #{remote_storage_path}' >> /etc/puppet/fileserver.conf &&
|
55
|
-
echo ' allow *' >> /etc/puppet/fileserver.conf &&
|
56
|
-
mkdir -p /var/poolparty/facts &&
|
57
|
-
mkdir -p /var/poolparty/files &&
|
58
|
-
mkdir -p #{base_config_directory}
|
59
|
-
EOR
|
60
|
-
end
|
61
|
-
desc "Setup autosigning for provisioner"
|
62
|
-
task :setup_provisioner_autosigning do
|
63
|
-
run "echo \"*\" > /etc/puppet/autosign.conf"
|
64
|
-
end
|
65
|
-
desc "Setup poolparty structure"
|
66
|
-
task :setup_poolparty_base_structure do
|
67
|
-
run <<-EOR
|
68
|
-
cp #{remote_storage_path}/#{key_file_locations.first} "#{base_config_directory}/.ppkeys" &&
|
69
|
-
mv #{remote_storage_path}/#{default_specfile_name} #{base_config_directory}/
|
70
|
-
EOR
|
71
|
-
end
|
72
42
|
desc "Download base gems"
|
73
|
-
|
43
|
+
def download_base_gems
|
74
44
|
run(returning(Array.new) do |arr|
|
75
45
|
base_gems.each do |name, url|
|
76
46
|
arr << "wget #{url} -O #{Base.remote_storage_path}/#{name}.gem 2>&1"
|
@@ -78,7 +48,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
78
48
|
end.join(" && "))
|
79
49
|
end
|
80
50
|
desc "Install base gems"
|
81
|
-
|
51
|
+
def install_base_gems
|
82
52
|
run(returning(Array.new) do |arr|
|
83
53
|
base_gems.each do |name, url|
|
84
54
|
if url.empty?
|
@@ -90,15 +60,19 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
90
60
|
end.join(" && "))
|
91
61
|
end
|
92
62
|
desc "Start provisioner base"
|
93
|
-
|
63
|
+
def start_provisioner_base
|
94
64
|
run "/etc/init.d/puppetmaster start"
|
95
65
|
end
|
96
66
|
desc "Restart provisioner base"
|
97
|
-
|
67
|
+
def restart_provisioner_base
|
98
68
|
run "/etc/init.d/puppetmaster stop;rm -rf /etc/poolparty/ssl;puppetmasterd --verbose;/etc/init.d/puppetmaster start"
|
99
69
|
end
|
70
|
+
desc "Ensure provisioner is running"
|
71
|
+
def ensure_provisioner_is_running
|
72
|
+
run "/usr/sbin/puppetmasterd --verbose 2>1 > /dev/null;echo ''"
|
73
|
+
end
|
100
74
|
desc "Create local node for puppet manifest"
|
101
|
-
|
75
|
+
def create_local_node_entry_for_puppet
|
102
76
|
# run ". /etc/profile && server-write-new-nodes"
|
103
77
|
str = returning Array.new do |arr|
|
104
78
|
arr << "node default { include poolparty }"
|
@@ -109,21 +83,21 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
109
83
|
run "echo #{str} > #{manifest_path}/nodes/nodes.pp"
|
110
84
|
end
|
111
85
|
desc "Move template files into place"
|
112
|
-
|
86
|
+
def move_template_files
|
113
87
|
run <<-EOR
|
114
88
|
mkdir -p #{template_path} &&
|
115
89
|
cp -R #{remote_storage_path}/templates/* #{template_path}
|
116
90
|
EOR
|
117
91
|
end
|
118
92
|
desc "Move manifest into place"
|
119
|
-
|
93
|
+
def move_provisioner_manifest
|
120
94
|
run <<-EOR
|
121
95
|
cp #{remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes/poolparty.pp
|
122
96
|
EOR
|
123
97
|
end
|
124
98
|
desc "Move poolparty keys"
|
125
|
-
|
99
|
+
def move_poolparty_keys
|
126
100
|
run "cp #{remote_storage_path}/#{@full_keypair_name} #{@remote_keypair_path}"
|
127
101
|
end
|
128
|
-
end
|
102
|
+
# end
|
129
103
|
end
|
@@ -1,12 +1,40 @@
|
|
1
1
|
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
-
namespace(:slave) do
|
2
|
+
# namespace(:slave) do
|
3
|
+
desc "Provision a slave"
|
4
|
+
def slave_provision_slave_task
|
5
|
+
upgrade_system
|
6
|
+
add_master_to_hosts_file
|
7
|
+
setup_for_poolparty
|
8
|
+
install_provisioner
|
9
|
+
stop_provisioner_daemon
|
10
|
+
setup_basic_poolparty_structure
|
11
|
+
setup_provisioner_filestore
|
12
|
+
setup_provisioner_autosigning
|
13
|
+
install_rubygems
|
14
|
+
fix_rubygems
|
15
|
+
add_provisioner_configs
|
16
|
+
setup_provisioner_config
|
17
|
+
create_puppetrunner_command
|
18
|
+
create_puppetrerun_command
|
19
|
+
download_base_gems
|
20
|
+
install_base_gems
|
21
|
+
write_erlang_cookie
|
22
|
+
end
|
23
|
+
desc "Configure a slave"
|
24
|
+
def slave_configure_slave_task
|
25
|
+
create_local_node_entry_for_puppet
|
26
|
+
move_provisioner_manifest
|
27
|
+
move_template_files
|
28
|
+
setup_poolparty_base_structure
|
29
|
+
run_provisioner
|
30
|
+
end
|
3
31
|
desc "Add master ip to hosts file"
|
4
|
-
|
5
|
-
run "if [ -z \"$(grep -v '#' /etc/hosts | grep 'master')\" ]; then echo '#{
|
32
|
+
def add_master_to_hosts_file
|
33
|
+
run "if [ -z \"$(grep -v '#' /etc/hosts | grep 'master')\" ]; then echo '#{cloud.master.ip} puppet master' >> /etc/hosts; else echo 'host already set'; fi"
|
6
34
|
end
|
7
35
|
desc "Stop provisioner daemon"
|
8
|
-
|
36
|
+
def stop_provisioner_daemon
|
9
37
|
run "/etc/init.d/puppetmaster stop"
|
10
38
|
end
|
11
|
-
end
|
39
|
+
# end
|
12
40
|
end
|
@@ -115,6 +115,11 @@ module PoolParty
|
|
115
115
|
@cloud.custom_configure_tasks_for(@instance) || []
|
116
116
|
end
|
117
117
|
|
118
|
+
# Last install tasks, if need to install after everything else
|
119
|
+
def after_install_tasks
|
120
|
+
@cloud.after_install_tasks_for(@instance)
|
121
|
+
end
|
122
|
+
|
118
123
|
# Get the packages associated with each os
|
119
124
|
def puppet_packages
|
120
125
|
case @os
|
@@ -159,6 +164,10 @@ module PoolParty
|
|
159
164
|
:rake => "http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem",
|
160
165
|
:sexp_processor => "http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem",
|
161
166
|
"net-ssh" => "http://rubyforge.org/frs/download.php/48041/net-ssh-2.0.6.gem",
|
167
|
+
"net-sftp" => "http://rubyforge.org/frs/download.php/37669/net-sftp-2.0.1.gem",
|
168
|
+
"net-scp" => "http://rubyforge.org/frs/download.php/37664/net-scp-1.0.1.gem",
|
169
|
+
"net-ssh-gateway" => "http://rubyforge.org/frs/download.php/36389/net-ssh-gateway-1.0.0.gem",
|
170
|
+
:highline => "http://rubyforge.org/frs/download.php/46328/highline-1.5.0.gem",
|
162
171
|
:capistrano => "http://rubyforge.org/frs/download.php/48031/capistrano-2.5.3.gem",
|
163
172
|
:poolparty => "http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true",
|
164
173
|
"ec2" => "http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem"
|
data/lib/poolparty/version.rb
CHANGED
data/lib/poolparty.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
# Load required gems
|
4
4
|
@required_software = Array.new
|
5
|
-
%w(activesupport ftools logging resolv ruby2ruby digest/sha2 open3
|
5
|
+
%w(activesupport ftools logging resolv ruby2ruby digest/sha2 open3).each do |lib|
|
6
6
|
begin
|
7
7
|
require lib
|
8
8
|
rescue Exception => e
|
data/lib/poolpartycl.rb
CHANGED
data/poolparty.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poolparty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.88
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Lerner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-16 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -57,6 +57,7 @@ email:
|
|
57
57
|
- ari.lerner@citrusbyte.com
|
58
58
|
executables:
|
59
59
|
- cloud
|
60
|
+
- cloud-add-access
|
60
61
|
- cloud-add-keypair
|
61
62
|
- cloud-configure
|
62
63
|
- cloud-contract
|
@@ -121,6 +122,7 @@ files:
|
|
121
122
|
- README.txt
|
122
123
|
- Rakefile
|
123
124
|
- bin/cloud
|
125
|
+
- bin/cloud-add-access
|
124
126
|
- bin/cloud-add-keypair
|
125
127
|
- bin/cloud-configure
|
126
128
|
- bin/cloud-contract
|
@@ -530,7 +532,7 @@ files:
|
|
530
532
|
has_rdoc: true
|
531
533
|
homepage: http://poolparty.rubyforge.org
|
532
534
|
post_install_message: |-
|
533
|
-
Get ready to jump in the pool, you just installed PoolParty! (Updated at
|
535
|
+
Get ready to jump in the pool, you just installed PoolParty! (Updated at 02:30 12/16/08)
|
534
536
|
|
535
537
|
To get started, run the generator:
|
536
538
|
|
@@ -33,6 +33,14 @@ describe "Hash" do
|
|
33
33
|
it "should be able to flush out with pre and posts" do
|
34
34
|
@a.flush_out("hi", "ho").sort.should == ["hia => '10'ho","hib => '20'ho","hic => '30'ho"]
|
35
35
|
end
|
36
|
+
describe "method_missing" do
|
37
|
+
it "should be able to call a key on the hash as a method" do
|
38
|
+
{:first_name => "bob", :last_name => "frank"}.first_name.should == "bob"
|
39
|
+
end
|
40
|
+
it "should return nil if there is no key set in the hash" do
|
41
|
+
{:first_name => "bob", :last_name => "frank"}.neighbor.should == nil
|
42
|
+
end
|
43
|
+
end
|
36
44
|
describe "select" do
|
37
45
|
before(:each) do
|
38
46
|
@selected_hash = @a.select {|k,v| k if k == :a}
|
@@ -389,7 +389,7 @@ describe "Cloud" do
|
|
389
389
|
@cloud.respond_to?(:generate_unique_cookie_string).should == true
|
390
390
|
end
|
391
391
|
it "should call hexdigest to digest/sha" do
|
392
|
-
Digest::SHA256.should_receive(:hexdigest).with("#{@cloud.full_keypair_name}#{@cloud.name}")
|
392
|
+
Digest::SHA256.should_receive(:hexdigest).with("#{@cloud.full_keypair_name}#{@cloud.name}").and_return "blaaaaah"
|
393
393
|
@cloud.generate_unique_cookie_string
|
394
394
|
end
|
395
395
|
it "should generate the same cookie string every time" do
|
@@ -21,7 +21,12 @@ describe "Capistrano provisioner" do
|
|
21
21
|
it "should create the config at ::Capistrano::Logger::IMPORTANT if the cloud is not verbose" do
|
22
22
|
@cloud.stub!(:verbose).and_return false
|
23
23
|
PoolParty::Provisioner::Capistrano.new(nil, @cloud).config.logger.level.should == ::Capistrano::Logger::IMPORTANT
|
24
|
-
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
describe "install tasks" do
|
27
|
+
it "should have the configure tasks included" do
|
28
|
+
@pb.master_install_tasks.include?("custom_configure_tasks").should == true
|
29
|
+
end
|
25
30
|
end
|
26
31
|
end
|
27
32
|
end
|
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.88</a>
|
38
38
|
</div>
|
39
39
|
<h1>‘Easy cloud computing’</h1>
|
40
40
|
<h2>What</h2>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auser-poolparty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.88
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Lerner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-16 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -57,6 +57,7 @@ email:
|
|
57
57
|
- ari.lerner@citrusbyte.com
|
58
58
|
executables:
|
59
59
|
- cloud
|
60
|
+
- cloud-add-access
|
60
61
|
- cloud-add-keypair
|
61
62
|
- cloud-configure
|
62
63
|
- cloud-contract
|
@@ -121,6 +122,7 @@ files:
|
|
121
122
|
- README.txt
|
122
123
|
- Rakefile
|
123
124
|
- bin/cloud
|
125
|
+
- bin/cloud-add-access
|
124
126
|
- bin/cloud-add-keypair
|
125
127
|
- bin/cloud-configure
|
126
128
|
- bin/cloud-contract
|
@@ -530,7 +532,7 @@ files:
|
|
530
532
|
has_rdoc: true
|
531
533
|
homepage: http://poolparty.rubyforge.org
|
532
534
|
post_install_message: |-
|
533
|
-
Get ready to jump in the pool, you just installed PoolParty! (Updated at
|
535
|
+
Get ready to jump in the pool, you just installed PoolParty! (Updated at 02:30 12/16/08)
|
534
536
|
|
535
537
|
To get started, run the generator:
|
536
538
|
|