poolparty 0.2.6 → 0.2.18
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 +123 -4
- data/PostInstall.txt +2 -1
- data/bin/cloud +16 -7
- data/bin/cloud-provision +9 -5
- data/bin/cloud-run +19 -0
- data/bin/cloud-ssh +2 -7
- data/bin/cloud-start +2 -1
- data/bin/pool +3 -3
- data/bin/server-build-messenger +20 -0
- data/bin/server-fire-cmd +14 -0
- data/bin/server-get-load +29 -0
- data/bin/server-list-active +25 -0
- data/bin/server-list-responding +24 -0
- data/bin/server-rerun +24 -0
- data/bin/server-start-master +27 -0
- data/bin/server-start-node +33 -0
- data/config/requirements.rb +1 -1
- data/erl_crash.dump +8409 -0
- data/lib/erlang/messenger/Emakefile +1 -0
- data/lib/erlang/messenger/Makefile +15 -0
- data/lib/erlang/messenger/README +5 -0
- data/lib/erlang/messenger/Rakefile +60 -0
- data/lib/erlang/messenger/control +11 -0
- data/lib/erlang/messenger/ebin/master.app +19 -0
- data/lib/erlang/messenger/ebin/master_app.beam +0 -0
- data/lib/erlang/messenger/ebin/node.app +19 -0
- data/lib/erlang/messenger/ebin/node_app.beam +0 -0
- data/lib/erlang/messenger/ebin/packager.app +19 -0
- data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_event_handler.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +1 -0
- data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +1 -0
- data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
- data/lib/erlang/messenger/ebin/utils.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/AUTHORS +2 -0
- data/lib/erlang/messenger/lib/eunit/CHANGELOG +14 -0
- data/lib/erlang/messenger/lib/eunit/COPYING +504 -0
- data/lib/erlang/messenger/lib/eunit/Makefile +28 -0
- data/lib/erlang/messenger/lib/eunit/NOTES +276 -0
- data/lib/erlang/messenger/lib/eunit/README +3 -0
- data/lib/erlang/messenger/lib/eunit/doc/edoc-info +3 -0
- data/lib/erlang/messenger/lib/eunit/doc/erlang.png +0 -0
- data/lib/erlang/messenger/lib/eunit/doc/eunit.html +172 -0
- data/lib/erlang/messenger/lib/eunit/doc/index.html +17 -0
- data/lib/erlang/messenger/lib/eunit/doc/modules-frame.html +12 -0
- data/lib/erlang/messenger/lib/eunit/doc/overview-summary.html +984 -0
- data/lib/erlang/messenger/lib/eunit/doc/overview.edoc +980 -0
- data/lib/erlang/messenger/lib/eunit/doc/packages-frame.html +11 -0
- data/lib/erlang/messenger/lib/eunit/doc/stylesheet.css +55 -0
- data/lib/erlang/messenger/lib/eunit/ebin/autoload.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.app +21 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.appup +1 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/examples/eunit_examples.erl +339 -0
- data/lib/erlang/messenger/lib/eunit/examples/fib.erl +19 -0
- data/lib/erlang/messenger/lib/eunit/examples/tests.txt +1 -0
- data/lib/erlang/messenger/lib/eunit/include/eunit.hrl +313 -0
- data/lib/erlang/messenger/lib/eunit/src/Makefile +46 -0
- data/lib/erlang/messenger/lib/eunit/src/autoload.erl +388 -0
- data/lib/erlang/messenger/lib/eunit/src/code_monitor.erl +243 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit.app.src +21 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit.appup.src +1 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit.erl +196 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_autoexport.erl +102 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_data.erl +798 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_internal.hrl +48 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_lib.erl +682 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_proc.erl +552 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_serial.erl +157 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_server.erl +340 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_striptests.erl +64 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_test.erl +334 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_tests.erl +45 -0
- data/lib/erlang/messenger/lib/eunit/src/eunit_tty.erl +272 -0
- data/lib/erlang/messenger/lib/eunit/src/file_monitor.erl +409 -0
- data/lib/erlang/messenger/lib/eunit/sys.config +9 -0
- data/lib/erlang/messenger/lib/eunit/vsn.mk +1 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.script +242 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.script +242 -0
- data/lib/erlang/messenger/src/master_app.erl +39 -0
- data/lib/erlang/messenger/src/node_app.erl +39 -0
- data/lib/erlang/messenger/src/pm_client.erl +19 -0
- data/lib/erlang/messenger/src/pm_cluster.erl +57 -0
- data/lib/erlang/messenger/src/pm_event_handler.erl +21 -0
- data/lib/erlang/messenger/src/pm_master.erl +118 -0
- data/lib/erlang/messenger/src/pm_master_supervisor.erl +40 -0
- data/lib/erlang/messenger/src/pm_node.erl +124 -0
- data/lib/erlang/messenger/src/pm_node_supervisor.erl +40 -0
- data/lib/erlang/messenger/src/pm_packager.erl +73 -0
- data/lib/erlang/messenger/src/utils.erl +38 -0
- data/lib/poolparty/base_packages/haproxy.rb +9 -2
- data/lib/poolparty/base_packages/heartbeat.rb +40 -28
- data/lib/poolparty/base_packages/poolparty.rb +39 -16
- data/lib/poolparty/base_packages/ruby.rb +2 -3
- data/lib/poolparty/config/allowed_commands.yml +1 -0
- data/lib/poolparty/core/array.rb +5 -2
- data/lib/poolparty/core/hash.rb +16 -2
- data/lib/poolparty/core/string.rb +9 -2
- data/lib/poolparty/core/symbol.rb +2 -2
- data/lib/poolparty/dependency_resolutions/base.rb +12 -0
- data/lib/poolparty/dependency_resolutions/puppet.rb +49 -0
- data/lib/poolparty/exceptions/UnacceptableCommand.rb +5 -0
- data/lib/poolparty/helpers/console.rb +3 -2
- data/lib/poolparty/helpers/display.rb +3 -3
- data/lib/poolparty/helpers/messenger.rb +29 -0
- data/lib/poolparty/helpers/optioner.rb +6 -2
- data/lib/poolparty/helpers/provisioner_base.rb +18 -11
- data/lib/poolparty/helpers/provisioners/master.rb +24 -22
- data/lib/poolparty/helpers/provisioners/slave.rb +8 -4
- data/lib/poolparty/modules/definable_resource.rb +1 -0
- data/lib/poolparty/modules/file_writer.rb +11 -10
- data/lib/poolparty/modules/method_missing_sugar.rb +1 -1
- data/lib/poolparty/modules/pretty_printer.rb +11 -11
- data/lib/poolparty/modules/resourcing_dsl.rb +61 -0
- data/lib/poolparty/monitors/base_monitor.rb +17 -3
- data/lib/poolparty/monitors/monitors/cpu_monitor.rb +15 -0
- data/lib/poolparty/monitors/monitors/memory_monitor.rb +23 -0
- data/lib/poolparty/net/remote_instance.rb +6 -1
- data/lib/poolparty/net/remoter.rb +23 -5
- data/lib/poolparty/net/remoter_base.rb +5 -1
- data/lib/poolparty/plugins/git.rb +22 -24
- data/lib/poolparty/pool/base.rb +22 -6
- data/lib/poolparty/pool/cloud.rb +28 -4
- data/lib/poolparty/pool/custom_resource.rb +6 -6
- data/lib/poolparty/pool/loggable.rb +3 -0
- data/lib/poolparty/pool/pool.rb +1 -1
- data/lib/poolparty/pool/resource.rb +58 -94
- data/lib/poolparty/pool/resources/class_package.rb +6 -6
- data/lib/poolparty/pool/resources/conditional.rb +5 -1
- data/lib/poolparty/pool/resources/exec.rb +6 -2
- data/lib/poolparty/pool/resources/gem.rb +22 -8
- data/lib/poolparty/pool/resources/remote_file.rb +5 -1
- data/lib/poolparty/pool/resources/symlink.rb +25 -0
- data/lib/poolparty/pool/resources/variable.rb +8 -7
- data/lib/poolparty/pool/tmp/.ppkeys +3 -0
- data/lib/poolparty/pool/tmp/happydayz +1 -0
- data/lib/poolparty/pool/tmp/install_master.sh +33 -0
- data/lib/poolparty/pool/tmp/pool.spec +11 -0
- data/lib/poolparty/pool/tmp/poolparty.pp +600 -0
- data/lib/poolparty/pool/tmp/tc-instances.list +1 -0
- data/lib/poolparty/templates/cib.xml +54 -0
- data/lib/poolparty/templates/ha.cf +12 -3
- data/lib/poolparty/templates/haproxy.conf +3 -3
- data/lib/poolparty/templates/haresources +3 -0
- data/lib/poolparty/templates/poolparty.monitor +14 -0
- data/lib/poolparty/templates/puppet.conf +3 -4
- data/lib/poolparty/version.rb +1 -1
- data/lib/poolparty.rb +9 -6
- data/poolparty.gemspec +7 -6
- data/setup.rb +3 -3
- data/spec/poolparty/bin/console_spec.rb +1 -1
- data/spec/poolparty/core/array_spec.rb +5 -0
- data/spec/poolparty/core/hash_spec.rb +19 -1
- data/spec/poolparty/core/string_spec.rb +13 -0
- data/spec/poolparty/dependency_resolutions/base_spec.rb +11 -0
- data/spec/poolparty/helpers/messenger_spec.rb +14 -0
- data/spec/poolparty/helpers/optioner_spec.rb +2 -1
- data/spec/poolparty/helpers/provisioner_base_spec.rb +1 -1
- data/spec/poolparty/helpers/provisioners/master_spec.rb +2 -2
- data/spec/poolparty/helpers/provisioners/slave_spec.rb +3 -3
- data/spec/poolparty/modules/file_writer_spec.rb +9 -0
- data/spec/poolparty/monitors/base_monitor_spec.rb +19 -0
- data/spec/poolparty/monitors/monitors/cpu_monitor_spec.rb +17 -0
- data/spec/poolparty/net/remote_instance_spec.rb +6 -1
- data/spec/poolparty/net/remote_spec.rb +51 -42
- data/spec/poolparty/net/remoter_spec.rb +2 -1
- data/spec/poolparty/plugins/git_spec.rb +2 -2
- data/spec/poolparty/pool/base_spec.rb +20 -2
- data/spec/poolparty/pool/cloud_spec.rb +30 -1
- data/spec/poolparty/pool/custom_resource_spec.rb +2 -2
- data/spec/poolparty/pool/plugin_spec.rb +4 -4
- data/spec/poolparty/pool/pool_spec.rb +1 -1
- data/spec/poolparty/pool/resource_spec.rb +66 -0
- data/spec/poolparty/pool/resources/gem_spec.rb +29 -3
- data/spec/poolparty/pool/resources/symlink_spec.rb +22 -0
- data/spec/poolparty/pool/resources/variable_spec.rb +4 -0
- data/spec/poolparty/spec_helper.rb +5 -0
- data/tasks/cloud.rake +0 -54
- data/tasks/development.rake +0 -12
- data/tasks/ec2.rake +1 -16
- data/tasks/instance.rake +0 -61
- data/test_manifest.pp +286 -166
- data/website/index.html +5 -5
- data/website/index.txt +3 -3
- metadata +137 -8
- data/bin/pool-start-monitor +0 -1
- data/lib/erlang/eb_server.erl +0 -27
- data/lib/poolparty/plugins/gem_package.rb +0 -17
- data/spec/poolparty/modules/tmp/willy/nilly.rb +0 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module PoolParty
|
|
2
|
+
module Messenger
|
|
3
|
+
|
|
4
|
+
# TODO: Fix cookie setting
|
|
5
|
+
def self.erl_command(hostname, extra="")
|
|
6
|
+
command_line_opts = "-pa #{append_dir}/ebin -sname #{hostname} -setcookie poolparty"
|
|
7
|
+
|
|
8
|
+
"erl #{command_line_opts} #{extra}"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.append_dir
|
|
12
|
+
::File.join( ::File.dirname(__FILE__), "..", "..", "erlang/messenger" )
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def messenger_send!(cmd="", testing=false)
|
|
16
|
+
cmd = Messenger.erl_command("client", "-rsh ssh -noshell -run pm_client #{cmd} -s erlang halt")
|
|
17
|
+
testing ? cmd : Kernel.system(cmd)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module PoolParty
|
|
24
|
+
module Cloud
|
|
25
|
+
class Cloud
|
|
26
|
+
include PoolParty::Messenger
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -9,7 +9,7 @@ module PoolParty
|
|
|
9
9
|
include MethodMissingSugar
|
|
10
10
|
|
|
11
11
|
def initialize(args=[], opts={}, &block)
|
|
12
|
-
@arguments = args
|
|
12
|
+
@arguments = parse_args(args)
|
|
13
13
|
@parse_options = opts[:parse_options] ? opts[:parse_options] : true
|
|
14
14
|
|
|
15
15
|
set_default_options
|
|
@@ -17,6 +17,10 @@ module PoolParty
|
|
|
17
17
|
self
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
def parse_args(argv, safe=[])
|
|
21
|
+
argv
|
|
22
|
+
end
|
|
23
|
+
|
|
20
24
|
def parent
|
|
21
25
|
self
|
|
22
26
|
end
|
|
@@ -47,7 +51,7 @@ module PoolParty
|
|
|
47
51
|
exit
|
|
48
52
|
end
|
|
49
53
|
|
|
50
|
-
opts.parse
|
|
54
|
+
opts.parse(@arguments.dup)
|
|
51
55
|
|
|
52
56
|
process_options
|
|
53
57
|
output_options if verbose
|
|
@@ -17,7 +17,7 @@ module PoolParty
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def self.provision_slaves(cloud, testing=false)
|
|
20
|
-
cloud.nonmaster_nonterminated_instances.each do |sl|
|
|
20
|
+
cloud.nonmaster_nonterminated_instances.each do |sl|
|
|
21
21
|
provision_slave(sl, cloud, testing)
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -53,7 +53,7 @@ module PoolParty
|
|
|
53
53
|
loaded
|
|
54
54
|
end
|
|
55
55
|
# Callback after initialized
|
|
56
|
-
def loaded
|
|
56
|
+
def loaded(opts={}, parent=self)
|
|
57
57
|
end
|
|
58
58
|
# This is the actual runner for the installation
|
|
59
59
|
def install
|
|
@@ -71,10 +71,11 @@ module PoolParty
|
|
|
71
71
|
setup_runner(@cloud)
|
|
72
72
|
|
|
73
73
|
unless testing
|
|
74
|
-
puts "Logging on to #{@instance.ip}"
|
|
74
|
+
puts "Logging on to #{@instance.ip}" if verbose
|
|
75
|
+
@cloud.prepare_reconfiguration
|
|
75
76
|
@cloud.rsync_storage_files_to(@instance)
|
|
76
77
|
|
|
77
|
-
cmd = "cd #{Base.remote_storage_path}
|
|
78
|
+
cmd = "cd #{Base.remote_storage_path} && chmod +x install_#{name}.sh && /bin/sh install_#{name}.sh && rm install_#{name}.sh"
|
|
78
79
|
hide_output do
|
|
79
80
|
@cloud.run_command_on(cmd, @instance)
|
|
80
81
|
end
|
|
@@ -94,9 +95,10 @@ module PoolParty
|
|
|
94
95
|
setup_runner(@cloud)
|
|
95
96
|
|
|
96
97
|
unless testing
|
|
98
|
+
puts "Logging on to #{@instance.ip}" if verbose
|
|
97
99
|
@cloud.rsync_storage_files_to(@instance)
|
|
98
100
|
|
|
99
|
-
cmd = "cd #{Base.remote_storage_path}
|
|
101
|
+
cmd = "cd #{Base.remote_storage_path} && chmod +x configure_#{name}.sh && /bin/sh configure_#{name}.sh && rm configure_#{name}.sh"
|
|
100
102
|
@cloud.run_command_on(cmd, @instance)
|
|
101
103
|
end
|
|
102
104
|
end
|
|
@@ -136,7 +138,8 @@ module PoolParty
|
|
|
136
138
|
def default_install_tasks
|
|
137
139
|
[
|
|
138
140
|
upgrade_system,
|
|
139
|
-
|
|
141
|
+
fix_rubygems,
|
|
142
|
+
install_puppet,
|
|
140
143
|
custom_install_tasks
|
|
141
144
|
] << install_tasks
|
|
142
145
|
end
|
|
@@ -179,7 +182,7 @@ module PoolParty
|
|
|
179
182
|
# Package installers for general *nix operating systems
|
|
180
183
|
def self.installers
|
|
181
184
|
@installers ||= {
|
|
182
|
-
:ubuntu => "
|
|
185
|
+
:ubuntu => "aptitude install -y",
|
|
183
186
|
:fedora => "yum install",
|
|
184
187
|
:gentoo => "emerge"
|
|
185
188
|
}
|
|
@@ -203,6 +206,10 @@ module PoolParty
|
|
|
203
206
|
def template_directory
|
|
204
207
|
File.join(File.dirname(__FILE__), "..", "templates")
|
|
205
208
|
end
|
|
209
|
+
|
|
210
|
+
def fix_rubygems
|
|
211
|
+
"echo '#{open(::File.join(template_directory, "gem")).read}' > /usr/bin/gem"
|
|
212
|
+
end
|
|
206
213
|
|
|
207
214
|
def create_local_node
|
|
208
215
|
str = <<-EOS
|
|
@@ -224,21 +231,21 @@ module PoolParty
|
|
|
224
231
|
"
|
|
225
232
|
touch /etc/apt/sources.list
|
|
226
233
|
echo 'deb http://mirrors.kernel.org/ubuntu hardy main universe' >> /etc/apt/sources.list
|
|
227
|
-
|
|
228
|
-
|
|
234
|
+
aptitude update -y
|
|
235
|
+
aptitude autoclean
|
|
229
236
|
"
|
|
230
237
|
else
|
|
231
238
|
"# No system upgrade needed"
|
|
232
239
|
end
|
|
233
240
|
end
|
|
234
241
|
|
|
235
|
-
def
|
|
242
|
+
def install_puppet
|
|
236
243
|
"#{installer_for( puppet_packages )}"
|
|
237
244
|
end
|
|
238
245
|
|
|
239
246
|
def create_poolparty_manifest
|
|
240
247
|
<<-EOS
|
|
241
|
-
|
|
248
|
+
cp #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes
|
|
242
249
|
EOS
|
|
243
250
|
end
|
|
244
251
|
end
|
|
@@ -29,7 +29,7 @@ module PoolParty
|
|
|
29
29
|
|
|
30
30
|
def configure_tasks
|
|
31
31
|
[
|
|
32
|
-
start_puppetmaster,
|
|
32
|
+
# start_puppetmaster,
|
|
33
33
|
create_local_node,
|
|
34
34
|
move_templates,
|
|
35
35
|
create_poolparty_manifest,
|
|
@@ -37,14 +37,7 @@ module PoolParty
|
|
|
37
37
|
]
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
#
|
|
41
|
-
# "#{installer_for( "haproxy" )}"
|
|
42
|
-
# end
|
|
43
|
-
#
|
|
44
|
-
# def install_heartbeat
|
|
45
|
-
# "#{installer_for( "heartbeat-2" )}"
|
|
46
|
-
# end
|
|
47
|
-
|
|
40
|
+
# If the master is not in the hosts file, then add it to the hosts file
|
|
48
41
|
def create_local_hosts_entry
|
|
49
42
|
<<-EOS
|
|
50
43
|
if [ -z \"$(grep -v '#' /etc/hosts | grep 'master')" ]; then echo '#{@master_ip} puppet master' >> /etc/hosts; fi
|
|
@@ -59,7 +52,7 @@ echo "import 'nodes/*.pp'" > /etc/puppet/manifests/site.pp
|
|
|
59
52
|
echo "import 'classes/*.pp'" >> /etc/puppet/manifests/site.pp
|
|
60
53
|
mkdir -p /etc/puppet/manifests/nodes
|
|
61
54
|
mkdir -p /etc/puppet/manifests/classes
|
|
62
|
-
|
|
55
|
+
cp #{Base.remote_storage_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
|
|
63
56
|
EOS
|
|
64
57
|
end
|
|
65
58
|
|
|
@@ -73,7 +66,7 @@ echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/
|
|
|
73
66
|
<<-EOS
|
|
74
67
|
echo "
|
|
75
68
|
[files]
|
|
76
|
-
path #{Base.remote_storage_path}
|
|
69
|
+
path #{Base.remote_storage_path}
|
|
77
70
|
allow *" > /etc/puppet/fileserver.conf
|
|
78
71
|
mkdir -p /var/poolparty/facts
|
|
79
72
|
mkdir -p /var/poolparty/files
|
|
@@ -104,31 +97,40 @@ node "#{ri.name}" inherits default {}
|
|
|
104
97
|
def move_templates
|
|
105
98
|
<<-EOS
|
|
106
99
|
mkdir -p #{Base.template_path}
|
|
107
|
-
|
|
100
|
+
cp #{Base.remote_storage_path}/#{Base.template_directory}/* #{Base.template_path}
|
|
108
101
|
EOS
|
|
109
102
|
end
|
|
110
|
-
|
|
103
|
+
|
|
111
104
|
def create_poolparty_manifest
|
|
112
105
|
<<-EOS
|
|
113
|
-
mv #{Base.remote_storage_path}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
106
|
+
mv #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes/poolparty.pp
|
|
107
|
+
cp #{Base.remote_storage_path}/#{Base.key_file_locations.first} "#{Base.base_config_directory}/.ppkeys"
|
|
108
|
+
cp #{Base.remote_storage_path}/#{Base.default_specfile_name} #{Base.base_config_directory}/#{Base.default_specfile_name}
|
|
109
|
+
#{copy_ssh_app}
|
|
117
110
|
EOS
|
|
118
111
|
end
|
|
112
|
+
|
|
113
|
+
def copy_ssh_app
|
|
114
|
+
if @cloud.remote_keypair_path != "#{Base.remote_storage_path}/#{@cloud.full_keypair_name}"
|
|
115
|
+
"cp #{Base.remote_storage_path}/#{@cloud.full_keypair_name} #{@cloud.remote_keypair_path}"
|
|
116
|
+
end
|
|
117
|
+
end
|
|
119
118
|
|
|
119
|
+
# ps aux | grep puppetmasterd | awk '{print $2}' | xargs kill
|
|
120
|
+
# rm -rf /etc/puppet/ssl
|
|
121
|
+
# puppetmasterd --verbose
|
|
120
122
|
def start_puppetmaster
|
|
121
123
|
<<-EOS
|
|
122
|
-
ps aux | grep puppetmasterd | awk '{print $2}' | xargs kill
|
|
123
|
-
rm -rf /etc/puppet/ssl
|
|
124
|
-
puppetmasterd
|
|
125
124
|
EOS
|
|
126
125
|
end
|
|
127
126
|
|
|
127
|
+
# puppetd --listen --fqdn #{@instance.name}
|
|
128
128
|
def restart_puppetd
|
|
129
129
|
<<-EOS
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
killall ruby
|
|
131
|
+
rm -rf /etc/puppet/ssl/*
|
|
132
|
+
puppetmasterd --verbose
|
|
133
|
+
. /etc/profile && #{@instance.puppet_runner_command}
|
|
132
134
|
EOS
|
|
133
135
|
end
|
|
134
136
|
end
|
|
@@ -17,21 +17,25 @@ module PoolParty
|
|
|
17
17
|
|
|
18
18
|
def setup_puppet
|
|
19
19
|
<<-EOE
|
|
20
|
-
puppetd --mkusers
|
|
21
20
|
if [ -z "$(grep -v '#' /etc/hosts | grep 'master')" ]; then echo "#{master_ip} puppet master" >> /etc/hosts; else echo "host already set"; fi
|
|
22
|
-
|
|
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
23
|
EOE
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def setup_configs
|
|
27
|
-
<<-EOS
|
|
27
|
+
<<-EOS
|
|
28
28
|
echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
|
|
29
29
|
EOS
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
# /etc/init.d/puppetmasterd stop
|
|
33
|
+
# puppetd --listen --fqdn #{@instance.name}
|
|
32
34
|
def start_puppet
|
|
33
35
|
<<-EOS
|
|
34
|
-
|
|
36
|
+
ps aux | grep "puppetmasterd" | awk '{print $2}' | xargs kill
|
|
37
|
+
rm -rf /etc/puppet/ssl*
|
|
38
|
+
puppetd --test 2>&1 &
|
|
35
39
|
EOS
|
|
36
40
|
end
|
|
37
41
|
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
module PoolParty
|
|
2
2
|
module FileWriter
|
|
3
|
-
def copy_file_to_storage_directory(file)
|
|
3
|
+
def copy_file_to_storage_directory(file, preceded="")
|
|
4
4
|
make_base_directory
|
|
5
|
-
path = ::File.join( Base.storage_directory, ::File.basename(file) )
|
|
6
|
-
FileUtils.cp file, path
|
|
5
|
+
path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
|
|
6
|
+
FileUtils.cp file, path unless file == path || ::File.exists?(path)
|
|
7
7
|
end
|
|
8
8
|
def copy_template_to_storage_directory(file)
|
|
9
9
|
make_template_directory
|
|
10
|
-
path = ::File.join( Base.template_directory, ::File.basename(file) )
|
|
11
|
-
FileUtils.cp file, path
|
|
10
|
+
path = ::File.join( Base.tmp_path, Base.template_directory, ::File.basename(file) )
|
|
11
|
+
FileUtils.cp file, path unless file == path || ::File.exists?(path)
|
|
12
12
|
end
|
|
13
|
-
def write_to_file_in_storage_directory(file, str, &block)
|
|
14
|
-
path = ::File.join( Base.storage_directory, ::File.basename(file) )
|
|
13
|
+
def write_to_file_in_storage_directory(file, str, preceded="", &block)
|
|
14
|
+
path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
|
|
15
15
|
write_to_file(path, str, &block)
|
|
16
16
|
end
|
|
17
|
-
def write_to_file(file, str, &block)
|
|
18
|
-
path = ::File.join( Base.storage_directory, ::File.basename(file) )
|
|
17
|
+
def write_to_file(file, str, preceded="", &block)
|
|
18
|
+
path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
|
|
19
19
|
make_base_path( Base.storage_directory )
|
|
20
20
|
::File.open(path, "w+") do |f|
|
|
21
21
|
f.print str
|
|
@@ -46,7 +46,8 @@ module PoolParty
|
|
|
46
46
|
FileUtils.mkdir_p Base.storage_directory unless ::File.directory?(Base.storage_directory)
|
|
47
47
|
end
|
|
48
48
|
def make_template_directory
|
|
49
|
-
|
|
49
|
+
path = ::File.join(Base.tmp_path, Base.template_directory)
|
|
50
|
+
FileUtils.mkdir_p path unless ::File.directory?(path)
|
|
50
51
|
end
|
|
51
52
|
def clear_base_directory
|
|
52
53
|
FileUtils::rm_rf "#{Base.storage_directory}"
|
|
@@ -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)) ? nil : parent.send(m, *args, &block)
|
|
45
|
+
(parent.nil? || parent.class == self.class || !parent.respond_to?(:options) || parent.options.has_key?(m)) ? nil : parent.send(m, *args, &block)
|
|
46
46
|
end
|
|
47
47
|
else
|
|
48
48
|
options[m] = (args.is_a?(Array) && args.size > 1) ? args : args[0]
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
module PoolParty
|
|
2
2
|
module PrettyPrinter
|
|
3
3
|
|
|
4
|
-
def pretty_print(
|
|
4
|
+
def pretty_print(pre="\t")
|
|
5
5
|
returning Array.new do |out|
|
|
6
|
-
out << pretty_name(
|
|
7
|
-
out << pretty_options(
|
|
6
|
+
out << pretty_name(pre, self)
|
|
7
|
+
out << pretty_options(pre, self)
|
|
8
8
|
|
|
9
9
|
if self.respond_to?(:clouds)
|
|
10
10
|
clouds.each do |name, cl|
|
|
11
|
-
out << pretty_name(
|
|
12
|
-
out << pretty_options(
|
|
11
|
+
out << pretty_name(pre*2, cl)
|
|
12
|
+
out << pretty_options(pre*2, cl) #cl.pretty_print("#{pre}\t")
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
if self.respond_to?(:plugins)
|
|
16
|
-
out << "#{
|
|
17
|
-
out << "#{
|
|
16
|
+
out << "#{pre}\t\tPlugins"
|
|
17
|
+
out << "#{pre}\t\t" + plugins.map {|a| a}.join("\n")
|
|
18
18
|
end
|
|
19
19
|
end.join("\n")
|
|
20
20
|
end
|
|
@@ -22,17 +22,17 @@ module PoolParty
|
|
|
22
22
|
# Gather options on the object
|
|
23
23
|
# Do not print if the option is nil or empty.
|
|
24
24
|
# Also, don't show the option if the option is empty or the default option on the cloud
|
|
25
|
-
def pretty_options(
|
|
25
|
+
def pretty_options(pre, o)
|
|
26
26
|
return "" unless o.respond_to?(:options)
|
|
27
27
|
print_options = (o.respond_to?(:parent) && o.parent && o.parent.respond_to?(:options)) ?
|
|
28
28
|
(o.options.delete_if {|k,v| o.parent.options.has_key?(k) && o.parent.options[k] == o.options[k] && !o.options[k].nil? } ) :
|
|
29
29
|
o.options
|
|
30
30
|
print_options = print_options.map {|k,v| [k, o.send(k.to_sym).to_s] }.inject({}) { |r,e| r[e[0]] = e[1] unless o.class.default_options[e[0]] == e[1] || e[1].nil? || e[1].empty?; r }
|
|
31
|
-
print_options.flush_out("#{
|
|
31
|
+
print_options.flush_out("#{pre}\t")
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
def pretty_name(
|
|
35
|
-
"#{
|
|
34
|
+
def pretty_name(pre, o)
|
|
35
|
+
"#{pre}#{o.class.to_s.top_level_class.capitalize}: #{o.name if o.respond_to?(:name)}"
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module PoolParty
|
|
2
|
+
module ResourcingDsl
|
|
3
|
+
# Overrides for syntax
|
|
4
|
+
# Allows us to send require to require a resource
|
|
5
|
+
def require(str="")
|
|
6
|
+
str ? options.merge!(:require => str) : options[:require]
|
|
7
|
+
end
|
|
8
|
+
def requires(str=nil)
|
|
9
|
+
str ? options.append!(:require => str) : options[:require]
|
|
10
|
+
end
|
|
11
|
+
def ensures(str="running")
|
|
12
|
+
if %w(absent running).map {|a| self.send a.to_sym}.include?(str)
|
|
13
|
+
str == "absent" ? is_absent : is_present
|
|
14
|
+
else
|
|
15
|
+
options.append!(:ensure => str)
|
|
16
|
+
end
|
|
17
|
+
str
|
|
18
|
+
end
|
|
19
|
+
# Allows us to send an ensure to ensure the presence of a resource
|
|
20
|
+
def is_present(*args)
|
|
21
|
+
options.merge!(:ensure => present)
|
|
22
|
+
end
|
|
23
|
+
# Ensures that what we are sending is absent
|
|
24
|
+
def is_absent(*args)
|
|
25
|
+
options.merge!(:ensure => absent)
|
|
26
|
+
end
|
|
27
|
+
# Alias for unless
|
|
28
|
+
def ifnot(str="")
|
|
29
|
+
options.merge!(:unless => str)
|
|
30
|
+
end
|
|
31
|
+
def present
|
|
32
|
+
"present"
|
|
33
|
+
end
|
|
34
|
+
def absent
|
|
35
|
+
"absent"
|
|
36
|
+
end
|
|
37
|
+
def cancel(*args)
|
|
38
|
+
options[:cancelled] = args.empty? ? true : args[0]
|
|
39
|
+
end
|
|
40
|
+
def cancelled?
|
|
41
|
+
options[:cancelled] || false
|
|
42
|
+
end
|
|
43
|
+
# Give us a template to work with on the resource
|
|
44
|
+
# Make sure this template is moved to the tmp directory as well
|
|
45
|
+
#
|
|
46
|
+
# TODO: Change this method to store the template files for later
|
|
47
|
+
# copying to prevent unnecessary copying and tons of directories
|
|
48
|
+
# everywhere
|
|
49
|
+
def template(file, opts={})
|
|
50
|
+
raise TemplateNotFound.new("no template given") unless file
|
|
51
|
+
raise TemplateNotFound.new("template cannot be found #{file}") unless ::File.file?(file)
|
|
52
|
+
unless opts[:just_copy]
|
|
53
|
+
options.merge!({:content => "template(\"#{::File.basename(file)}\")"})
|
|
54
|
+
options.delete(:source) if options.has_key?(:source)
|
|
55
|
+
copy_template_to_storage_directory(file)
|
|
56
|
+
else
|
|
57
|
+
copy_file_to_storage_directory(file)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -6,11 +6,25 @@
|
|
|
6
6
|
module PoolParty
|
|
7
7
|
module Monitors
|
|
8
8
|
|
|
9
|
+
def self.register_monitor(*args)
|
|
10
|
+
args.each do |arg|
|
|
11
|
+
(available_monitors << "#{arg}".downcase.to_sym)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.available_monitors
|
|
16
|
+
$available_monitors ||= []
|
|
17
|
+
end
|
|
18
|
+
|
|
9
19
|
class BaseMonitor
|
|
10
20
|
|
|
11
|
-
|
|
12
|
-
|
|
21
|
+
def self.run
|
|
22
|
+
new.run
|
|
23
|
+
end
|
|
24
|
+
|
|
13
25
|
end
|
|
14
26
|
|
|
15
27
|
end
|
|
16
|
-
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Dir["#{File.dirname(__FILE__)}/monitors/*.rb"].each {|f| require f}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module PoolParty
|
|
2
|
+
module Monitors
|
|
3
|
+
|
|
4
|
+
class MemoryMonitor < BaseMonitor
|
|
5
|
+
|
|
6
|
+
def run
|
|
7
|
+
str = %x[free -m | grep -i mem]
|
|
8
|
+
begin
|
|
9
|
+
total_memory = str.split[1].to_f
|
|
10
|
+
used_memory = str.split[2].to_f
|
|
11
|
+
|
|
12
|
+
used_memory / total_memory
|
|
13
|
+
rescue Exception => e
|
|
14
|
+
0.0
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
register_monitor :memory
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -61,7 +61,12 @@ module PoolParty
|
|
|
61
61
|
# Printing. This is how we extract the instances into the listing on the
|
|
62
62
|
# local side into the local listing file
|
|
63
63
|
def to_s
|
|
64
|
-
"#{name}
|
|
64
|
+
"#{name}\t#{ip}"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Commands for the servers
|
|
68
|
+
def puppet_runner_command
|
|
69
|
+
". /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1"
|
|
65
70
|
end
|
|
66
71
|
end
|
|
67
72
|
|
|
@@ -9,7 +9,7 @@ module PoolParty
|
|
|
9
9
|
module Remoter
|
|
10
10
|
def rsync_storage_files_to_command(remote_instance)
|
|
11
11
|
if remote_instance
|
|
12
|
-
"#{rsync_command} #{Base.storage_directory} #{remote_instance.ip}:#{Base.remote_storage_path}"
|
|
12
|
+
"#{rsync_command} #{Base.storage_directory}/ #{remote_instance.ip}:#{Base.remote_storage_path}"
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
def run_command_on_command(cmd="ls -l", remote_instance=nil)
|
|
@@ -152,7 +152,7 @@ module PoolParty
|
|
|
152
152
|
request_launch_new_instances(1) if list_of_pending_instances.size.zero? && can_start_a_new_instance? && !is_master_running?
|
|
153
153
|
|
|
154
154
|
when_no_pending_instances do
|
|
155
|
-
wait "
|
|
155
|
+
wait "20.seconds"
|
|
156
156
|
hide_output { Provisioner.provision_master(self, testing) }
|
|
157
157
|
end
|
|
158
158
|
|
|
@@ -180,8 +180,10 @@ module PoolParty
|
|
|
180
180
|
|
|
181
181
|
reset!
|
|
182
182
|
when_no_pending_instances do
|
|
183
|
-
|
|
184
|
-
PoolParty::Provisioner.
|
|
183
|
+
wait "20.seconds" # Give some time for ssh to startup
|
|
184
|
+
PoolParty::Provisioner.provision_slaves(self)
|
|
185
|
+
PoolParty::Provisioner.configure_master(self, testing)
|
|
186
|
+
# prepare_reconfiguration
|
|
185
187
|
end
|
|
186
188
|
end
|
|
187
189
|
end
|
|
@@ -195,7 +197,7 @@ module PoolParty
|
|
|
195
197
|
end
|
|
196
198
|
|
|
197
199
|
# Rsync command to the instance
|
|
198
|
-
def rsync_storage_files_to(instance=nil)
|
|
200
|
+
def rsync_storage_files_to(instance=nil)
|
|
199
201
|
hide_output do
|
|
200
202
|
Kernel.system "#{rsync_storage_files_to_command(instance)}" if instance
|
|
201
203
|
end
|
|
@@ -215,6 +217,22 @@ module PoolParty
|
|
|
215
217
|
def ssh_into_instance_number(num=0)
|
|
216
218
|
ssh_into( get_instance_by_number( num || 0 ) )
|
|
217
219
|
end
|
|
220
|
+
|
|
221
|
+
# Run command on the instance by the number
|
|
222
|
+
def run_command_on_instance_number(cmd="ls -l", num=0)
|
|
223
|
+
run_command_on(cmd, get_instance_by_number( num || 0 ) )
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Prepare reconfiguration on the master
|
|
227
|
+
# TODO: Fix the killall
|
|
228
|
+
# TODO: Curious about the puppet/ssl problems...
|
|
229
|
+
def prepare_reconfiguration
|
|
230
|
+
unless @prepared
|
|
231
|
+
cmd = "killall ruby && rm -rf /etc/puppet/ssl/*; puppetmasterd --verbose; puppetd --test --no-daemonize 2>&1 &"
|
|
232
|
+
run_command_on(cmd, master)
|
|
233
|
+
@prepared = true
|
|
234
|
+
end
|
|
235
|
+
end
|
|
218
236
|
|
|
219
237
|
def self.included(receiver)
|
|
220
238
|
receiver.extend self
|
|
@@ -8,7 +8,7 @@ module PoolParty
|
|
|
8
8
|
|
|
9
9
|
def remote_bases
|
|
10
10
|
$remote_bases ||= []
|
|
11
|
-
end
|
|
11
|
+
end
|
|
12
12
|
|
|
13
13
|
module Remote
|
|
14
14
|
# This class is the base class for all remote types
|
|
@@ -61,6 +61,10 @@ module PoolParty
|
|
|
61
61
|
def list_of_nonterminated_instances(list = remote_instances_list)
|
|
62
62
|
list.reject {|i| i.terminating? || i.terminated? }
|
|
63
63
|
end
|
|
64
|
+
# get the master instance
|
|
65
|
+
def master
|
|
66
|
+
get_instance_by_number(0)
|
|
67
|
+
end
|
|
64
68
|
# Get instance by number
|
|
65
69
|
def get_instance_by_number(i=0, list = remote_instances_list)
|
|
66
70
|
name = (i.zero? ? "master" : "node#{i}")
|