poolparty 0.2.6 → 0.2.18
Sign up to get free protection for your applications and to get access to all the features.
- 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}")
|