auser-poolparty 0.2.39 → 0.2.40
Sign up to get free protection for your applications and to get access to all the features.
- 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
|