auser-poolparty 0.2.39 → 0.2.40
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 +117 -0
- data/bin/cloud-configure +3 -3
- data/bin/cloud-expand +10 -6
- data/bin/cloud-handle-load +32 -0
- data/bin/cloud-maintain +3 -9
- data/bin/cloud-provision +1 -1
- data/bin/cloud-start +2 -1
- data/bin/server-show-stats +1 -0
- data/lib/erlang/cloudpanel/EMakefile +1 -0
- data/lib/erlang/cloudpanel/Makefile +3 -0
- data/lib/erlang/cloudpanel/cloudpanel.rb +15 -0
- data/lib/erlang/cloudpanel/doc/cloudpanel_web.html +1 -1
- data/lib/erlang/cloudpanel/doc/string.html +222 -0
- data/lib/erlang/cloudpanel/priv/www/index.html +2 -1
- data/lib/erlang/cloudpanel/priv/www/javascripts/site.js +2 -0
- data/lib/erlang/cloudpanel/priv/www/pages/index.html +1 -0
- data/lib/erlang/cloudpanel/priv/www/pages/tail.html +1 -0
- data/lib/erlang/cloudpanel/priv/www/partials/error.html +3 -0
- data/lib/erlang/cloudpanel/priv/www/partials/footer.html +6 -0
- data/lib/erlang/cloudpanel/priv/www/partials/header.html +13 -0
- data/lib/erlang/cloudpanel/priv/www/partials/menu.html +13 -0
- data/lib/erlang/cloudpanel/src/cloudpanel.hrl +1 -0
- data/lib/erlang/cloudpanel/src/cloudpanel_web.erl +18 -24
- data/lib/erlang/cloudpanel/src/string.erl +387 -0
- data/lib/erlang/cloudpanel/src/tail_log.erl +66 -0
- data/lib/erlang/cloudpanel/src/tailor.erl +31 -0
- data/lib/erlang/cloudpanel/src/utils.erl +9 -0
- data/lib/erlang/cloudpanel/src/views.erl +44 -0
- data/lib/erlang/cloudpanel/yaws.conf +20 -0
- data/lib/erlang/messenger/useful_snippets +1 -1
- data/lib/poolparty/aska/aska.rb +29 -4
- data/lib/poolparty/base_packages/poolparty.rb +14 -6
- data/lib/poolparty/config/postlaunchmessage.txt +5 -0
- data/lib/poolparty/exceptions/LoadRulesException.rb +7 -0
- data/lib/poolparty/helpers/provisioner_base.rb +24 -8
- data/lib/poolparty/helpers/provisioners/master.rb +8 -2
- data/lib/poolparty/helpers/provisioners/slave.rb +4 -3
- data/lib/poolparty/modules/method_missing_sugar.rb +1 -1
- data/lib/poolparty/monitors/base_monitor.rb +1 -1
- data/lib/poolparty/net/remoter.rb +8 -5
- data/lib/poolparty/plugins/git.rb +1 -1
- data/lib/poolparty/pool/base.rb +6 -3
- data/lib/poolparty/pool/cloud.rb +4 -2
- data/lib/poolparty/pool/loggable.rb +2 -5
- data/lib/poolparty/templates/yaws.conf +19 -0
- data/lib/poolparty/version.rb +1 -1
- data/lib/poolparty.rb +2 -2
- data/poolparty.gemspec +121 -2
- data/spec/poolparty/aska/aska_spec.rb +33 -0
- data/spec/poolparty/core/hash_spec.rb +3 -3
- data/spec/poolparty/net/remote_spec.rb +4 -3
- data/spec/poolparty/net/remoter_spec.rb +1 -0
- data/spec/poolparty/pool/base_spec.rb +11 -2
- data/spec/poolparty/pool/cloud_spec.rb +2 -2
- data/website/index.html +1 -1
- metadata +121 -2
|
@@ -12,6 +12,7 @@ module PoolParty
|
|
|
12
12
|
has_package(:name => "erlang")
|
|
13
13
|
has_package(:name => "erlang-dev")
|
|
14
14
|
has_package(:name => "erlang-src")
|
|
15
|
+
# has_package(:name => "yaws")
|
|
15
16
|
|
|
16
17
|
has_package(:name => "rubygems") do |g|
|
|
17
18
|
# These should be installed automagically by poolparty, but just in case
|
|
@@ -24,10 +25,9 @@ module PoolParty
|
|
|
24
25
|
g.has_gempackage(:name => "hoe", :download_url => "http://rubyforge.org/frs/download.php/45685/hoe-1.8.2.gem", :version => "1.8", :requires => get_gempackage("rubyforge"))
|
|
25
26
|
g.has_gempackage(:name => "ZenTest", :download_url => "http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem", :requires => [get_gempackage("hoe"), get_gempackage("rubyforge")])
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
end
|
|
28
|
+
has_gempackage(:name => "rake", :download_url => "http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem")
|
|
29
|
+
has_gempackage(:name => "xml-simple", :download_url => "http://rubyforge.org/frs/download.php/18366/xml-simple-1.0.11.gem")
|
|
30
|
+
has_gempackage(:name => "grempe-amazon-ec2", :download_url => "http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem", :requires => get_gempackage("xml-simple"))
|
|
31
31
|
|
|
32
32
|
has_gempackage(:name => "sexp_processor", :download_url => "http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem")
|
|
33
33
|
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")])
|
|
@@ -45,10 +45,18 @@ module PoolParty
|
|
|
45
45
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
# Cloud panel setup
|
|
49
|
+
|
|
50
|
+
has_directory(:name => "/var/www/cloudpanel")
|
|
51
|
+
|
|
52
|
+
# has_file(:name => "/etc/yaws/conf.d/localhost.conf") do
|
|
53
|
+
# template File.join(File.dirname(__FILE__), "..", "templates/yaws.conf")
|
|
54
|
+
# end
|
|
55
|
+
|
|
48
56
|
# Custom run puppet to minimize footprint
|
|
49
57
|
# TODO: Update the offsetted times
|
|
50
58
|
execute_on_master do
|
|
51
|
-
has_cron(:name => "puppetd runner", :user => Base.user, :minute => "*/
|
|
59
|
+
has_cron(:name => "puppetd runner", :user => Base.user, :minute => "*/15") do
|
|
52
60
|
command(PoolParty::Remote::RemoteInstance.puppet_master_rerun_command)
|
|
53
61
|
end
|
|
54
62
|
end
|
|
@@ -62,7 +70,7 @@ module PoolParty
|
|
|
62
70
|
execute_on_master do
|
|
63
71
|
has_cron({:name => "maintain script", :command => ". /etc/profile && which cloud-maintain | /bin/sh", :minute => "*/3"})
|
|
64
72
|
# TODO: Update this so it only runs when needed
|
|
65
|
-
has_exec(:name => "start master messenger", :command => ". /etc/profile && server-start-master", :requires => [get_gempackage("poolparty-latest"), get_exec("build_messenger")], :
|
|
73
|
+
has_exec(:name => "start master messenger", :command => ". /etc/profile && server-start-master", :requires => [get_gempackage("poolparty-latest"), get_exec("build_messenger")], :onlyif => "ps aux | grep beam | grep master")
|
|
66
74
|
|
|
67
75
|
has_remotefile(:name => "/usr/bin/puppetcleaner") do
|
|
68
76
|
mode 744
|
|
@@ -44,6 +44,10 @@ module PoolParty
|
|
|
44
44
|
Provisioner::Master.new(cloud).process_clean_reconfigure_for!(instance, testing)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
+
def self.clear_master_ssl_certs(cloud, testing=false)
|
|
48
|
+
Provisioner::Master.new(cloud).clear_master_ssl_certs
|
|
49
|
+
end
|
|
50
|
+
|
|
47
51
|
class ProvisionerBase
|
|
48
52
|
|
|
49
53
|
include Configurable
|
|
@@ -138,12 +142,24 @@ module PoolParty
|
|
|
138
142
|
vputs "Cleaning certs from master: #{instance.name}"
|
|
139
143
|
# puppetca --clean #{instance.name}.compute-1.internal; puppetca --clean #{instance.name}.ec2.internal
|
|
140
144
|
# find /etc/puppet/ssl -type f -exec rm {} \;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
145
|
+
unless testing
|
|
146
|
+
# @cloud.run_command_on("rm -rf /etc/puppet/ssl", instance) unless instance.master?
|
|
147
|
+
str = returning String.new do |s|
|
|
148
|
+
s << "puppetca --clean #{instance.name}.compute-1.internal 2>&1 > /dev/null;"
|
|
149
|
+
s << "puppetca --clean #{instance.name}.ec2.internal 2>&1 > /dev/null"
|
|
150
|
+
end
|
|
151
|
+
@cloud.run_command_on(str, @cloud.master)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
def clear_master_ssl_certs
|
|
155
|
+
str = returning String.new do |s|
|
|
156
|
+
s << "puppetca --clean master.compute-1.internal 2>&1 > /dev/null;"
|
|
157
|
+
s << "puppetca --clean master.ec2.internal 2>&1 > /dev/null"
|
|
158
|
+
end
|
|
159
|
+
@cloud.run_command_on("if [ -f '/usr/bin/puppetcleaner' ]; then /usr/bin/env puppetcleaner; else #{str}; fi", @cloud.master)
|
|
144
160
|
end
|
|
145
|
-
def process_reconfigure!(testing=false)
|
|
146
|
-
@cloud.run_command_on(RemoteInstance.puppet_runner_command, @instance) unless testing
|
|
161
|
+
def process_reconfigure!(testing=false)
|
|
162
|
+
@cloud.run_command_on(PoolParty::Remote::RemoteInstance.puppet_runner_command, @instance) unless testing
|
|
147
163
|
end
|
|
148
164
|
# Tasks that need to be performed everytime we do any
|
|
149
165
|
# remote ssh'ing into any instance
|
|
@@ -282,10 +298,10 @@ echo 'Updated already'
|
|
|
282
298
|
else
|
|
283
299
|
touch /etc/apt/sources.list
|
|
284
300
|
echo 'deb http://mirrors.kernel.org/ubuntu hardy main universe' >> /etc/apt/sources.list
|
|
285
|
-
aptitude update -y <<heredoc
|
|
301
|
+
aptitude update -y #{unix_hide_string} <<heredoc
|
|
286
302
|
Y
|
|
287
303
|
heredoc
|
|
288
|
-
aptitude autoclean #{unix_hide_string}
|
|
304
|
+
aptitude autoclean #{unix_hide_string}
|
|
289
305
|
fi
|
|
290
306
|
"
|
|
291
307
|
else
|
|
@@ -298,7 +314,7 @@ fi
|
|
|
298
314
|
end
|
|
299
315
|
|
|
300
316
|
def make_logger_directory
|
|
301
|
-
"mkdir -p /var/
|
|
317
|
+
"mkdir -p /var/log/poolparty"
|
|
302
318
|
end
|
|
303
319
|
|
|
304
320
|
def create_poolparty_manifest
|
|
@@ -34,7 +34,8 @@ module PoolParty
|
|
|
34
34
|
create_local_node,
|
|
35
35
|
move_templates,
|
|
36
36
|
create_poolparty_manifest,
|
|
37
|
-
restart_puppetd
|
|
37
|
+
restart_puppetd,
|
|
38
|
+
start_puppetmaster
|
|
38
39
|
]
|
|
39
40
|
end
|
|
40
41
|
|
|
@@ -125,7 +126,12 @@ wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O grempe-
|
|
|
125
126
|
# rm -rf /etc/puppet/ssl
|
|
126
127
|
def start_puppetmaster
|
|
127
128
|
<<-EOS
|
|
128
|
-
|
|
129
|
+
. /etc/profile
|
|
130
|
+
ps aux | grep puppetmaster | awk '{print $2}' | xargs kill
|
|
131
|
+
/etc/init.d/puppetmaster stop
|
|
132
|
+
rm -rf /etc/puppet/ssl
|
|
133
|
+
puppetmasterd --verbose
|
|
134
|
+
/etc/init.d/puppetmaster start
|
|
129
135
|
EOS
|
|
130
136
|
end
|
|
131
137
|
|
|
@@ -19,14 +19,14 @@ 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
|
|
23
22
|
EOE
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
def setup_configs
|
|
27
26
|
<<-EOS
|
|
28
27
|
echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
|
|
29
|
-
/
|
|
28
|
+
/etc/init.d/puppetmaster stop
|
|
29
|
+
# /usr/bin/puppetrerun
|
|
30
30
|
EOS
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -34,7 +34,8 @@ module PoolParty
|
|
|
34
34
|
# puppetd --listen --fqdn #{@instance.name}
|
|
35
35
|
def start_puppet
|
|
36
36
|
<<-EOS
|
|
37
|
-
|
|
37
|
+
. /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1 > /dev/null
|
|
38
|
+
. /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1 > /dev/null &
|
|
38
39
|
EOS
|
|
39
40
|
end
|
|
40
41
|
|
|
@@ -42,7 +42,7 @@ module PoolParty
|
|
|
42
42
|
if options.has_key?(m)
|
|
43
43
|
options[m]
|
|
44
44
|
else
|
|
45
|
-
(parent.nil? || parent.class == self.class || !parent.respond_to?(:options) || parent.options.has_key?(m)) ? nil : parent.send(m, *args, &block)
|
|
45
|
+
(parent.nil? || parent.class == self.class || !parent.respond_to?(:options) || parent.options.has_key?(m) || !parent.respond_to?(m)) ? nil : parent.send(m, *args, &block)
|
|
46
46
|
end
|
|
47
47
|
else
|
|
48
48
|
options[m] =
|
|
@@ -23,7 +23,7 @@ module PoolParty
|
|
|
23
23
|
args.each do |arg|
|
|
24
24
|
(available_monitors << "#{arg}".downcase.to_sym)
|
|
25
25
|
|
|
26
|
-
InstanceMethods.module_eval "def #{arg}; PoolParty::Messenger.messenger_send!(\"get_load #{arg}\").to_f rescue -1; end"
|
|
26
|
+
InstanceMethods.module_eval "def #{arg}; @#{arg} ||= PoolParty::Messenger.messenger_send!(\"get_load #{arg}\").to_f rescue -1; end"
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -161,7 +161,8 @@ module PoolParty
|
|
|
161
161
|
vputs ""
|
|
162
162
|
vputs "Provisioning master..."
|
|
163
163
|
hide_output { Provisioner.provision_master(self, testing) }
|
|
164
|
-
PoolParty::Provisioner.
|
|
164
|
+
PoolParty::Provisioner.clear_master_ssl_certs(self)
|
|
165
|
+
PoolParty::Provisioner.reconfigure_master(self, testing)
|
|
165
166
|
after_launched
|
|
166
167
|
end
|
|
167
168
|
end
|
|
@@ -186,16 +187,18 @@ module PoolParty
|
|
|
186
187
|
if can_start_a_new_instance? && should_expand_cloud?(force)
|
|
187
188
|
logger.debug "Expanding the cloud based on load"
|
|
188
189
|
@num = 1
|
|
189
|
-
|
|
190
|
+
request_launch_new_instances(@num)
|
|
190
191
|
|
|
191
192
|
reset!
|
|
192
193
|
when_no_pending_instances do
|
|
194
|
+
reset!
|
|
193
195
|
wait "20.seconds" # Give some time for ssh to startup
|
|
194
196
|
@num_instances = nonmaster_nonterminated_instances.size
|
|
195
|
-
last_instances = nonmaster_nonterminated_instances[(@num_instances - @num)
|
|
197
|
+
last_instances = nonmaster_nonterminated_instances[(@num_instances - @num)...(@num_instances)]
|
|
196
198
|
last_instances.each do |inst|
|
|
197
|
-
vputs "Provisioning #{inst.name}
|
|
198
|
-
|
|
199
|
+
vputs "Provisioning #{inst.name}"
|
|
200
|
+
cmd = ". /etc/profile && cloud-provision -i #{inst.name.gsub(/node/, '')} #{unix_hide_string} &"
|
|
201
|
+
Kernel.system cmd
|
|
199
202
|
end
|
|
200
203
|
PoolParty::Provisioner.reconfigure_master(self, force)
|
|
201
204
|
after_launched
|
|
@@ -11,7 +11,7 @@ module PoolParty
|
|
|
11
11
|
has_package(:name => "git-core")
|
|
12
12
|
has_directory(:name => "#{cwd}")
|
|
13
13
|
|
|
14
|
-
has_exec({:name => "git-#{name}", :requires => get_package("git-core"), :requires => get_directory("#{cwd}")}) do
|
|
14
|
+
has_exec({:name => "git-#{name}", :requires => get_package("git-core"), :requires => [get_directory("#{cwd}"), get_package("git-core")]}) do
|
|
15
15
|
command parent.user ? "git clone #{parent.user}@#{parent.source} #{parent.path}" : "git clone #{parent.source} #{parent.to ? parent.to : ""}"
|
|
16
16
|
cwd "#{parent.cwd if parent.cwd}"
|
|
17
17
|
creates "#{::File.join( (parent.cwd ? parent.cwd : cwd), ::File.basename(parent.source, ::File.extname(parent.source)) )}/.git"
|
data/lib/poolparty/pool/base.rb
CHANGED
|
@@ -41,8 +41,11 @@ module PoolParty
|
|
|
41
41
|
def secret_access_key
|
|
42
42
|
ENV["AWS_SECRET_ACCESS_ID"] ? ENV["AWS_SECRET_ACCESS_ID"] : load_keys_from_file[:secret_access_key]
|
|
43
43
|
end
|
|
44
|
+
def read_keyfile
|
|
45
|
+
open(get_working_key_file_locations).read
|
|
46
|
+
end
|
|
44
47
|
def load_keys_from_file
|
|
45
|
-
@keys ||= get_working_key_file_locations ? YAML::load(
|
|
48
|
+
@keys ||= get_working_key_file_locations ? YAML::load( read_keyfile ) : {}
|
|
46
49
|
end
|
|
47
50
|
# Store the keys in a yaml format to give the master access
|
|
48
51
|
# So that the master has access to the files
|
|
@@ -80,10 +83,10 @@ module PoolParty
|
|
|
80
83
|
|
|
81
84
|
def logger_location
|
|
82
85
|
[
|
|
83
|
-
"/var/
|
|
86
|
+
"/var/log/poolparty"
|
|
84
87
|
].select do |dir|
|
|
85
88
|
dir if ::File.directory?(dir) && ::File.readable?(dir)
|
|
86
|
-
end.first || ::File.join(Dir.pwd, "
|
|
89
|
+
end.first || ::File.join(Dir.pwd, "log")
|
|
87
90
|
end
|
|
88
91
|
|
|
89
92
|
def pool_logger_location
|
data/lib/poolparty/pool/cloud.rb
CHANGED
|
@@ -30,7 +30,9 @@ module PoolParty
|
|
|
30
30
|
|
|
31
31
|
default_options({
|
|
32
32
|
:minimum_instances => 2,
|
|
33
|
-
:maximum_instances =>
|
|
33
|
+
:maximum_instances => 5,
|
|
34
|
+
:contract_when => "cpu < 0.15",
|
|
35
|
+
:expand_when => "cpu > 0.9",
|
|
34
36
|
:access_key => Base.access_key,
|
|
35
37
|
:secret_access_key => Base.secret_access_key,
|
|
36
38
|
:ec2_dir => ENV["EC2_HOME"],
|
|
@@ -104,7 +106,7 @@ module PoolParty
|
|
|
104
106
|
end
|
|
105
107
|
|
|
106
108
|
def copy_misc_templates
|
|
107
|
-
["namespaceauth.conf"].each do |f|
|
|
109
|
+
["namespaceauth.conf", "yaws.conf"].each do |f|
|
|
108
110
|
copy_file_to_storage_directory(::File.join(::File.dirname(__FILE__), "..", "templates", f))
|
|
109
111
|
end
|
|
110
112
|
end
|
|
@@ -6,13 +6,10 @@ class Loggable
|
|
|
6
6
|
Logging.init :debug, :info, :warn, :error, :fatal
|
|
7
7
|
|
|
8
8
|
self.class.loggers << file_logger
|
|
9
|
-
file_logger.level = :
|
|
10
|
-
|
|
11
|
-
self.class.loggers << stdout_logger
|
|
12
|
-
stdout_logger.level = :info
|
|
9
|
+
file_logger.level = :info
|
|
13
10
|
end
|
|
14
11
|
def file_logger
|
|
15
|
-
@file_logger ||= Logging.logger(
|
|
12
|
+
@file_logger ||= Logging.logger( Base.pool_logger_location, logging_opts )
|
|
16
13
|
end
|
|
17
14
|
def stdout_logger
|
|
18
15
|
@stdout_logger ||= Logging.logger(STDOUT, logging_opts.merge({:pattern => "%m\n"}))
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Configuration file for Yaws HTTP daemon
|
|
2
|
+
|
|
3
|
+
# This config defines virtual server localhost. It is
|
|
4
|
+
# enabled by default. If you want to disable it, remove
|
|
5
|
+
# symlink from /etc/yaws/conf.d/.
|
|
6
|
+
|
|
7
|
+
# Instead you may edit this file and after that reload
|
|
8
|
+
# yaws configureation using invoke-rc.d yaws reload
|
|
9
|
+
|
|
10
|
+
# (If you want to use privileged port, run yaws as root,
|
|
11
|
+
# setting YAWS_USER in /etc/default/yaws, or use port
|
|
12
|
+
# redirection, e.g. via iptables.)
|
|
13
|
+
|
|
14
|
+
<server localhost>
|
|
15
|
+
port = 8000
|
|
16
|
+
listen = 0.0.0.0
|
|
17
|
+
docroot = /var/www/cloudpanel
|
|
18
|
+
# dir_listings = true
|
|
19
|
+
</server>
|
data/lib/poolparty/version.rb
CHANGED
data/lib/poolparty.rb
CHANGED
|
@@ -28,13 +28,13 @@ module PoolParty
|
|
|
28
28
|
include FileWriter
|
|
29
29
|
|
|
30
30
|
def logger
|
|
31
|
-
@
|
|
31
|
+
@logger ||= make_new_logger
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
private
|
|
35
35
|
#:nodoc:#
|
|
36
36
|
def make_new_logger
|
|
37
|
-
FileUtils.mkdir_p Base.pool_logger_location unless ::File.directory?(Base.pool_logger_location)
|
|
37
|
+
FileUtils.mkdir_p ::File.dirname(Base.pool_logger_location) unless ::File.directory?(::File.dirname(Base.pool_logger_location))
|
|
38
38
|
Loggable.new
|
|
39
39
|
end
|
|
40
40
|
end
|
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.40
|
|
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-11-
|
|
12
|
+
date: 2008-11-04 00:00:00 -08:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
@@ -62,6 +62,7 @@ executables:
|
|
|
62
62
|
- cloud-contract
|
|
63
63
|
- cloud-ensure-provisioning
|
|
64
64
|
- cloud-expand
|
|
65
|
+
- cloud-handle-load
|
|
65
66
|
- cloud-list
|
|
66
67
|
- cloud-maintain
|
|
67
68
|
- cloud-osxcopy
|
|
@@ -97,6 +98,7 @@ extra_rdoc_files:
|
|
|
97
98
|
- PostInstall.txt
|
|
98
99
|
- README.txt
|
|
99
100
|
- lib/erlang/messenger/lib/eunit/examples/tests.txt
|
|
101
|
+
- lib/poolparty/config/postlaunchmessage.txt
|
|
100
102
|
- website/index.txt
|
|
101
103
|
files:
|
|
102
104
|
- History.txt
|
|
@@ -111,6 +113,7 @@ files:
|
|
|
111
113
|
- bin/cloud-contract
|
|
112
114
|
- bin/cloud-ensure-provisioning
|
|
113
115
|
- bin/cloud-expand
|
|
116
|
+
- bin/cloud-handle-load
|
|
114
117
|
- bin/cloud-list
|
|
115
118
|
- bin/cloud-maintain
|
|
116
119
|
- bin/cloud-osxcopy
|
|
@@ -146,21 +149,127 @@ files:
|
|
|
146
149
|
- generators/poolspec/USAGE
|
|
147
150
|
- generators/poolspec/poolspec_generator.rb
|
|
148
151
|
- generators/poolspec/templates/pool_spec_template.erb
|
|
152
|
+
- lib/erlang/cloudpanel/EMakefile
|
|
149
153
|
- lib/erlang/cloudpanel/Makefile
|
|
154
|
+
- lib/erlang/cloudpanel/cloudpanel.rb
|
|
155
|
+
- lib/erlang/cloudpanel/deps/mochiweb/LICENSE
|
|
156
|
+
- lib/erlang/cloudpanel/deps/mochiweb/Makefile
|
|
157
|
+
- lib/erlang/cloudpanel/deps/mochiweb/README
|
|
158
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochifmt.html
|
|
159
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochifmt_records.html
|
|
160
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochifmt_std.html
|
|
161
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochihex.html
|
|
162
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochijson.html
|
|
163
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochijson2.html
|
|
164
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochinum.html
|
|
165
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb.html
|
|
166
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_app.html
|
|
167
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_charref.html
|
|
168
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_cookies.html
|
|
169
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_echo.html
|
|
170
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_headers.html
|
|
171
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_html.html
|
|
172
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_http.html
|
|
173
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_multipart.html
|
|
174
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_request.html
|
|
175
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_response.html
|
|
176
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_skel.html
|
|
177
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_socket_server.html
|
|
178
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_sup.html
|
|
179
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_util.html
|
|
180
|
+
- lib/erlang/cloudpanel/deps/mochiweb/doc/reloader.html
|
|
181
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochifmt.beam
|
|
182
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochifmt_records.beam
|
|
183
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochifmt_std.beam
|
|
184
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochihex.beam
|
|
185
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochijson.beam
|
|
186
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochijson2.beam
|
|
187
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochinum.beam
|
|
188
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb.app
|
|
189
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb.beam
|
|
190
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_app.beam
|
|
191
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_charref.beam
|
|
192
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_cookies.beam
|
|
193
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_echo.beam
|
|
194
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_headers.beam
|
|
195
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_html.beam
|
|
196
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_http.beam
|
|
197
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_multipart.beam
|
|
198
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_request.beam
|
|
199
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_response.beam
|
|
200
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_skel.beam
|
|
201
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_socket_server.beam
|
|
202
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_sup.beam
|
|
203
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_util.beam
|
|
204
|
+
- lib/erlang/cloudpanel/deps/mochiweb/ebin/reloader.beam
|
|
205
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/Makefile
|
|
206
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/priv/www/index.html
|
|
207
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/Makefile
|
|
208
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel.app
|
|
209
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel.erl
|
|
210
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel.hrl
|
|
211
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel_app.erl
|
|
212
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel_deps.erl
|
|
213
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel_sup.erl
|
|
214
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel_web.erl
|
|
215
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/start-dev.sh
|
|
216
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/start.sh
|
|
217
|
+
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/support/include.mk
|
|
218
|
+
- lib/erlang/cloudpanel/deps/mochiweb/scripts/new_mochiweb.erl
|
|
219
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/Makefile
|
|
220
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochifmt.erl
|
|
221
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochifmt_records.erl
|
|
222
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochifmt_std.erl
|
|
223
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochihex.erl
|
|
224
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochijson.erl
|
|
225
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochijson2.erl
|
|
226
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochinum.erl
|
|
227
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb.app
|
|
228
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb.erl
|
|
229
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_app.erl
|
|
230
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_charref.erl
|
|
231
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_cookies.erl
|
|
232
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_echo.erl
|
|
233
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_headers.erl
|
|
234
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_html.erl
|
|
235
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_http.erl
|
|
236
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_multipart.erl
|
|
237
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_request.erl
|
|
238
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_response.erl
|
|
239
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_skel.erl
|
|
240
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_socket_server.erl
|
|
241
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_sup.erl
|
|
242
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_util.erl
|
|
243
|
+
- lib/erlang/cloudpanel/deps/mochiweb/src/reloader.erl
|
|
244
|
+
- lib/erlang/cloudpanel/deps/mochiweb/support/include.mk
|
|
150
245
|
- lib/erlang/cloudpanel/doc/cloudpanel.html
|
|
151
246
|
- lib/erlang/cloudpanel/doc/cloudpanel_app.html
|
|
152
247
|
- lib/erlang/cloudpanel/doc/cloudpanel_deps.html
|
|
153
248
|
- lib/erlang/cloudpanel/doc/cloudpanel_sup.html
|
|
154
249
|
- lib/erlang/cloudpanel/doc/cloudpanel_web.html
|
|
250
|
+
- lib/erlang/cloudpanel/doc/string.html
|
|
155
251
|
- lib/erlang/cloudpanel/ebin/cloudpanel.app
|
|
156
252
|
- lib/erlang/cloudpanel/ebin/cloudpanel.beam
|
|
157
253
|
- lib/erlang/cloudpanel/ebin/cloudpanel_app.beam
|
|
158
254
|
- lib/erlang/cloudpanel/ebin/cloudpanel_deps.beam
|
|
159
255
|
- lib/erlang/cloudpanel/ebin/cloudpanel_sup.beam
|
|
160
256
|
- lib/erlang/cloudpanel/ebin/cloudpanel_web.beam
|
|
257
|
+
- lib/erlang/cloudpanel/ebin/string.beam
|
|
258
|
+
- lib/erlang/cloudpanel/ebin/tail_log.beam
|
|
259
|
+
- lib/erlang/cloudpanel/ebin/tailor.beam
|
|
260
|
+
- lib/erlang/cloudpanel/ebin/utils.beam
|
|
261
|
+
- lib/erlang/cloudpanel/ebin/views.beam
|
|
262
|
+
- lib/erlang/cloudpanel/ebin/web_utils.beam
|
|
161
263
|
- lib/erlang/cloudpanel/priv/www/images/bg_content.gif
|
|
162
264
|
- lib/erlang/cloudpanel/priv/www/index.html
|
|
163
265
|
- lib/erlang/cloudpanel/priv/www/javascripts/jquery.js
|
|
266
|
+
- lib/erlang/cloudpanel/priv/www/javascripts/site.js
|
|
267
|
+
- lib/erlang/cloudpanel/priv/www/pages/index.html
|
|
268
|
+
- lib/erlang/cloudpanel/priv/www/pages/tail.html
|
|
269
|
+
- lib/erlang/cloudpanel/priv/www/partials/error.html
|
|
270
|
+
- lib/erlang/cloudpanel/priv/www/partials/footer.html
|
|
271
|
+
- lib/erlang/cloudpanel/priv/www/partials/header.html
|
|
272
|
+
- lib/erlang/cloudpanel/priv/www/partials/menu.html
|
|
164
273
|
- lib/erlang/cloudpanel/priv/www/stylesheets/application.css
|
|
165
274
|
- lib/erlang/cloudpanel/priv/www/stylesheets/classes.css
|
|
166
275
|
- lib/erlang/cloudpanel/priv/www/stylesheets/colors.css
|
|
@@ -173,9 +282,15 @@ files:
|
|
|
173
282
|
- lib/erlang/cloudpanel/src/cloudpanel_deps.erl
|
|
174
283
|
- lib/erlang/cloudpanel/src/cloudpanel_sup.erl
|
|
175
284
|
- lib/erlang/cloudpanel/src/cloudpanel_web.erl
|
|
285
|
+
- lib/erlang/cloudpanel/src/string.erl
|
|
286
|
+
- lib/erlang/cloudpanel/src/tail_log.erl
|
|
287
|
+
- lib/erlang/cloudpanel/src/tailor.erl
|
|
288
|
+
- lib/erlang/cloudpanel/src/utils.erl
|
|
289
|
+
- lib/erlang/cloudpanel/src/views.erl
|
|
176
290
|
- lib/erlang/cloudpanel/start-dev.sh
|
|
177
291
|
- lib/erlang/cloudpanel/start.sh
|
|
178
292
|
- lib/erlang/cloudpanel/support/include.mk
|
|
293
|
+
- lib/erlang/cloudpanel/yaws.conf
|
|
179
294
|
- lib/erlang/messenger/Emakefile
|
|
180
295
|
- lib/erlang/messenger/Makefile
|
|
181
296
|
- lib/erlang/messenger/README
|
|
@@ -282,6 +397,7 @@ files:
|
|
|
282
397
|
- lib/poolparty/base_packages/poolparty.rb
|
|
283
398
|
- lib/poolparty/base_packages/ruby.rb
|
|
284
399
|
- lib/poolparty/config/allowed_commands.yml
|
|
400
|
+
- lib/poolparty/config/postlaunchmessage.txt
|
|
285
401
|
- lib/poolparty/core/array.rb
|
|
286
402
|
- lib/poolparty/core/class.rb
|
|
287
403
|
- lib/poolparty/core/exception.rb
|
|
@@ -298,6 +414,7 @@ files:
|
|
|
298
414
|
- lib/poolparty/core/time.rb
|
|
299
415
|
- lib/poolparty/dependency_resolutions/base.rb
|
|
300
416
|
- lib/poolparty/dependency_resolutions/puppet.rb
|
|
417
|
+
- lib/poolparty/exceptions/LoadRulesException.rb
|
|
301
418
|
- lib/poolparty/exceptions/MasterException.rb
|
|
302
419
|
- lib/poolparty/exceptions/RemoteException.rb
|
|
303
420
|
- lib/poolparty/exceptions/ResourceException.rb
|
|
@@ -368,8 +485,10 @@ files:
|
|
|
368
485
|
- lib/poolparty/templates/puppet.conf
|
|
369
486
|
- lib/poolparty/templates/puppetcleaner
|
|
370
487
|
- lib/poolparty/templates/puppetrerun
|
|
488
|
+
- lib/poolparty/templates/yaws.conf
|
|
371
489
|
- lib/poolparty/version.rb
|
|
372
490
|
- lib/poolpartycl.rb
|
|
491
|
+
- log/pool.logs
|
|
373
492
|
- poolparty.gemspec
|
|
374
493
|
- script/destroy
|
|
375
494
|
- script/generate
|
|
@@ -12,6 +12,39 @@ describe "Rules" do
|
|
|
12
12
|
before(:each) do
|
|
13
13
|
@car = Car.new
|
|
14
14
|
end
|
|
15
|
+
describe "malformed rules" do
|
|
16
|
+
it "should not put a malformed rule in the rules" do
|
|
17
|
+
lambda {
|
|
18
|
+
@plaster = Class.new do
|
|
19
|
+
include Aska
|
|
20
|
+
rules :names, "x runs b"
|
|
21
|
+
end
|
|
22
|
+
}.should raise_error()
|
|
23
|
+
end
|
|
24
|
+
[
|
|
25
|
+
"k > 10",
|
|
26
|
+
"x == 2",
|
|
27
|
+
"x >= 2",
|
|
28
|
+
"x <= 4",
|
|
29
|
+
"y < 10"
|
|
30
|
+
].each do |str|
|
|
31
|
+
eval <<-EOE
|
|
32
|
+
it "should have the rule #{str} be valid" do
|
|
33
|
+
(str =~ /(.+)[=\\\<\>](.*)/).nil?.should == false
|
|
34
|
+
end
|
|
35
|
+
EOE
|
|
36
|
+
end
|
|
37
|
+
[
|
|
38
|
+
"k running 10",
|
|
39
|
+
"10 is larger than 2"
|
|
40
|
+
].each do |str|
|
|
41
|
+
eval <<-EOE
|
|
42
|
+
it "should have the rule #{str} not be valid" do
|
|
43
|
+
(str =~ /(.+)[=\\\<\>](.*)/).nil?.should == true
|
|
44
|
+
end
|
|
45
|
+
EOE
|
|
46
|
+
end
|
|
47
|
+
end
|
|
15
48
|
it "should be able to define rules as an array and they should be set as the rules on the class" do
|
|
16
49
|
@car.rules.class.should == Hash
|
|
17
50
|
end
|
|
@@ -25,13 +25,13 @@ describe "Hash" do
|
|
|
25
25
|
@a.to_os.to_hash.should == @a
|
|
26
26
|
end
|
|
27
27
|
it "should not put quotes around integers" do
|
|
28
|
-
{:a => 10, :b => "q"}.flush_out.should == ["a => 10", "b => 'q'"]
|
|
28
|
+
{:a => 10, :b => "q"}.flush_out.sort.should == ["a => 10", "b => 'q'"]
|
|
29
29
|
end
|
|
30
30
|
it "should be able to flush out into a string into an array" do
|
|
31
|
-
@a.flush_out.should == ["a => '10'","b => '20'","c => '30'"]
|
|
31
|
+
@a.flush_out.sort.should == ["a => '10'","b => '20'","c => '30'"]
|
|
32
32
|
end
|
|
33
33
|
it "should be able to flush out with pre and posts" do
|
|
34
|
-
@a.flush_out("hi", "ho").should == ["hia => '10'ho","hib => '20'ho","hic => '30'ho"]
|
|
34
|
+
@a.flush_out("hi", "ho").sort.should == ["hia => '10'ho","hib => '20'ho","hic => '30'ho"]
|
|
35
35
|
end
|
|
36
36
|
describe "select" do
|
|
37
37
|
before(:each) do
|