auser-poolparty 0.2.37 → 0.2.38
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +1 -0
- data/bin/cloud-add-keypair +2 -2
- data/bin/cloud-maintain +10 -11
- data/bin/cloud-provision +5 -4
- data/bin/messenger-get-load +3 -2
- data/bin/server-show-stats +22 -0
- data/lib/erlang/messenger/ebin/master_app.beam +0 -0
- data/lib/erlang/messenger/ebin/node_app.beam +0 -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_manager.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_event_handler.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -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/src/utils.erl +1 -1
- data/lib/erlang/messenger/useful_snippets +8 -0
- data/lib/poolparty/aska/aska.rb +13 -0
- data/lib/poolparty/base_packages/haproxy.rb +17 -24
- data/lib/poolparty/base_packages/poolparty.rb +26 -18
- data/lib/poolparty/core/object.rb +1 -1
- data/lib/poolparty/helpers/provisioner_base.rb +15 -12
- data/lib/poolparty/helpers/provisioners/master.rb +39 -35
- data/lib/poolparty/helpers/provisioners/slave.rb +2 -3
- data/lib/poolparty/net/remote_instance.rb +6 -0
- data/lib/poolparty/plugins/git.rb +2 -2
- data/lib/poolparty/pool/resource.rb +1 -1
- data/lib/poolparty/pool/resources/conditional.rb +15 -3
- data/lib/poolparty/pool/resources/gem_package.rb +12 -7
- data/lib/poolparty/templates/puppetcleaner +1 -1
- data/lib/poolparty/version.rb +1 -1
- data/poolparty.gemspec +4 -2
- data/spec/poolparty/pool/resources/conditional_spec.rb +2 -2
- data/website/index.html +1 -1
- metadata +4 -2
data/Manifest.txt
CHANGED
data/bin/cloud-add-keypair
CHANGED
@@ -15,8 +15,8 @@ include Remote
|
|
15
15
|
|
16
16
|
@clouds.each do |name, cloud|
|
17
17
|
|
18
|
-
with_cloud(cloud, {:location => @location}) do
|
19
|
-
|
18
|
+
with_cloud(cloud, {:location => @location, :verbose => o.verbose}) do
|
19
|
+
vputs header("Creating keypair for #{name}")
|
20
20
|
create_keypair unless testing
|
21
21
|
end
|
22
22
|
|
data/bin/cloud-maintain
CHANGED
@@ -18,19 +18,18 @@ include Remote
|
|
18
18
|
|
19
19
|
@clouds.each do |name, cloud|
|
20
20
|
|
21
|
-
with_cloud(cloud, {:location => @location, :testing => o.testing}) do
|
22
|
-
|
21
|
+
with_cloud(cloud, {:location => @location, :testing => o.testing, :verbose => o.verbose}) do
|
22
|
+
vputs header("Maintaining cloud #{name}")
|
23
23
|
if !minimum_number_of_instances_are_running?
|
24
|
-
|
25
|
-
|
26
|
-
expand_cloud_if_necessary( !testing )
|
24
|
+
vputs "#{list_of_running_instances.size} running instances of between #{minimum_instances} and #{maximum_instances}"
|
25
|
+
vputs "Launching new instance"
|
27
26
|
elsif !maximum_number_of_instances_are_not_running?
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
vputs "#{list_of_running_instances.size} running instances of between #{minimum_instances} and #{maximum_instances}"
|
28
|
+
vputs "Shutting down non-master instance"
|
29
|
+
end
|
30
|
+
vputs "Cloud is maintained"
|
31
|
+
expand_cloud_if_necessary( !testing )
|
32
|
+
contract_cloud_if_necessary( !testing )
|
34
33
|
end
|
35
34
|
|
36
35
|
end
|
data/bin/cloud-provision
CHANGED
@@ -4,7 +4,7 @@ require "poolparty"
|
|
4
4
|
require "poolpartycl"
|
5
5
|
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
6
6
|
opts.on('-s', '--slave', 'Provision slave (default: false)') { optioner.provision_slave true }
|
7
|
-
opts.on('-i num', '--id num', 'Instance num to provision') { |i| optioner.
|
7
|
+
opts.on('-i num', '--id num', 'Instance num to provision') { |i| optioner.instance_num i }
|
8
8
|
end
|
9
9
|
|
10
10
|
load_pool(o.spec || Binary.get_existing_spec_location)
|
@@ -12,13 +12,14 @@ load_pool(o.spec || Binary.get_existing_spec_location)
|
|
12
12
|
include Remote
|
13
13
|
|
14
14
|
@clouds = extract_cloud_from_options o
|
15
|
-
@instance_num = o.num.to_i || nil
|
16
15
|
|
17
16
|
@clouds.each do |cloud|
|
18
17
|
|
19
|
-
with_cloud(cloud, {:verbose => o.verbose, :testing => o.testing, :provision_slave => (o.provision_slave || false), :
|
18
|
+
with_cloud(cloud, {:verbose => o.verbose, :testing => o.testing, :provision_slave => (o.provision_slave || false), :instance_number => o.instance_num}) do
|
19
|
+
|
20
|
+
instance_num = instance_number.to_i if instance_number
|
20
21
|
|
21
|
-
if instance_num
|
22
|
+
if instance_num
|
22
23
|
@instance = get_instance_by_number( instance_num )
|
23
24
|
vputs "Provisioning instance: #{@instance.name} (#{instance_num})"
|
24
25
|
Provisioner.provision_slave(@instance, self, testing)
|
data/bin/messenger-get-load
CHANGED
@@ -18,9 +18,10 @@ include Remote
|
|
18
18
|
|
19
19
|
@clouds.each do |cl|
|
20
20
|
|
21
|
-
with_cloud(cl, {:testing => o.testing, :monitorname => @monitor }) do
|
21
|
+
with_cloud(cl, {:testing => o.testing, :monitorname => @monitor, :verbose => o.verbose }) do
|
22
22
|
vputs "Getting #{monitorname} load through the messenger"
|
23
|
-
|
23
|
+
load = PoolParty::Messenger.messenger_send!("get_load #{monitorname}", testing)
|
24
|
+
load =~ /[0-9\.]+/ ? print load : vputs "-1"
|
24
25
|
end
|
25
26
|
|
26
27
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
3
|
+
require "poolparty"
|
4
|
+
require "poolpartycl"
|
5
|
+
|
6
|
+
available_monitors = PoolParty::Monitors.available_monitors
|
7
|
+
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
8
|
+
end
|
9
|
+
|
10
|
+
load_pool(o.spec || Binary.get_existing_spec_location)
|
11
|
+
|
12
|
+
include Remote
|
13
|
+
|
14
|
+
@clouds = extract_cloud_from_options o
|
15
|
+
|
16
|
+
@clouds.each do |cloud|
|
17
|
+
|
18
|
+
with_cloud(cloud, {:testing => o.testing }) do
|
19
|
+
puts rules_values
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -4,3 +4,11 @@
|
|
4
4
|
% Start test nodes, defining testing
|
5
5
|
% erl -pa ./ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -setcookie poolparty -boot pm_node_rel-0.1 -sname node0
|
6
6
|
% erl -pa ./ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -setcookie poolparty -boot pm_node_rel-0.1 -sname node1
|
7
|
+
|
8
|
+
% Starting the client on the master
|
9
|
+
% erl -pa /var/lib/gems/1.8/gems/poolparty-0.2.37/lib/erlang/messenger/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname client -setcookie poolparty -run pm_client start
|
10
|
+
|
11
|
+
% Get the load
|
12
|
+
% erl -pa /var/lib/gems/1.8/gems/poolparty-0.2.38/lib/erlang/messenger/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname client -setcookie poolparty -run pm_client start -run pm_client get_load cpu -run erlang init stop
|
13
|
+
|
14
|
+
% cd /var/poolparty && gem uninstall poolparty && wget http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true -O poolparty-latest.gem 2>&1 && gem install --no-ri --no-rdoc poolparty-latest.gem
|
data/lib/poolparty/aska/aska.rb
CHANGED
@@ -14,6 +14,7 @@ module Aska
|
|
14
14
|
|
15
15
|
create_instance_variable(k)
|
16
16
|
rs << {k => [m, v]}
|
17
|
+
rs << {k => [">", "0"]} unless rs.reject {|a| a.to_s == "#{k}>0" }
|
17
18
|
end
|
18
19
|
self.send(:define_method, name) do
|
19
20
|
look_up_rules(name)
|
@@ -66,6 +67,18 @@ module Aska
|
|
66
67
|
end
|
67
68
|
end
|
68
69
|
end
|
70
|
+
def rules_values
|
71
|
+
returning Array.new do |arr|
|
72
|
+
self.class.defined_rules.each do |name,rule_array|
|
73
|
+
arr << name
|
74
|
+
rule_array.each do |rule|
|
75
|
+
rule.map do |k,v|
|
76
|
+
arr << "#{k} -> #{__aska_aska_stuff(k)} (#{v[0]} #{v[1]})"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end.join("\n")
|
81
|
+
end
|
69
82
|
# Get the variable from the class
|
70
83
|
# If it's defined as an attr_accessor, we know it has been defined as a rule
|
71
84
|
# Otherwise, if we are passing it as a
|
@@ -3,43 +3,36 @@ module PoolParty
|
|
3
3
|
plugin :haproxy do
|
4
4
|
|
5
5
|
def enable
|
6
|
-
|
6
|
+
execute_on_master do
|
7
7
|
package({:name => "haproxy"})
|
8
8
|
|
9
|
-
# Startup haproxy and enable it
|
10
|
-
has_line_in_file("ENABLED=1", "/etc/default/haproxy")
|
11
|
-
has_line_in_file("SYSLOGD=\"-r\"", "/etc/default/syslogd")
|
12
|
-
has_line_in_file("local0.* /var/log/haproxy.log", "/etc/syslog.conf", {:notify => 'Service["sysklogd"]'})
|
13
|
-
|
14
9
|
# Restart sysklogd after we update the haproxy.log
|
15
10
|
has_service(:name => "sysklogd") do
|
16
11
|
ensures "running"
|
17
12
|
end
|
13
|
+
|
14
|
+
# Template variables
|
15
|
+
has_variable(:name => "name_haproxy", :value => "#{cloud.name}")
|
16
|
+
has_variable(:name => "nodenames_haproxy", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'name')")
|
17
|
+
has_variable(:name => "node_ips_haproxy", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'ip')")
|
18
|
+
|
19
|
+
has_variable(:name => "ports_haproxy", :value => ([(self.respond_to?(:port) ? port : Base.port)].flatten))
|
20
|
+
has_variable(:name => "forwarding_port", :value => (respond_to?(:forwarding_port) ? forwarding_port : Base.forwarding_port))
|
21
|
+
has_variable(:name => "proxy_mode", :value => (respond_to?(:proxy_mode) ? proxy_mode : Base.proxy_mode))
|
22
|
+
|
23
|
+
# Startup haproxy and enable it
|
24
|
+
has_line_in_file("ENABLED=1", "/etc/default/haproxy")
|
25
|
+
has_line_in_file("SYSLOGD=\"-r\"", "/etc/default/syslogd")
|
26
|
+
has_line_in_file("local0.* /var/log/haproxy.log", "/etc/syslog.conf", {:notify => get_service("sysklogd")})
|
18
27
|
|
19
28
|
# Service is required
|
20
29
|
has_service(:name => "haproxy", :ensures => "running")
|
21
30
|
|
22
|
-
# Tempalte variables
|
23
|
-
variable(:name => "name_haproxy", :value => "#{cloud.name}")
|
24
|
-
|
25
|
-
# if cloud.provisioning?
|
26
|
-
# variable(:name => "nodenames_haproxy", :value => "#{list_of_running_instances.map{|a| "#{a.send :name}" }.join("\t")}")
|
27
|
-
# variable(:name => "node_ips_haproxy", :value => "#{list_of_running_instances.map{|a| "#{a.send :ip}" }.join("\t")}")
|
28
|
-
# else
|
29
|
-
variable(:name => "nodenames_haproxy", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'name')")
|
30
|
-
variable(:name => "node_ips_haproxy", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'ip')")
|
31
|
-
# end
|
32
|
-
|
33
|
-
variable(:name => "ports_haproxy", :value => ([(self.respond_to?(:port) ? port : Base.port)].flatten))
|
34
|
-
variable(:name => "forwarding_port", :value => (respond_to?(:forwarding_port) ? forwarding_port : Base.forwarding_port))
|
35
|
-
variable(:name => "proxy_mode", :value => (respond_to?(:proxy_mode) ? proxy_mode : Base.proxy_mode))
|
36
|
-
|
37
31
|
# These can also be passed in via hash
|
38
32
|
has_remotefile(:name => "/etc/haproxy.cfg") do
|
39
33
|
mode 644
|
40
|
-
|
41
|
-
|
42
|
-
notify 'Service["haproxy"]'
|
34
|
+
requires get_package("haproxy")
|
35
|
+
notify get_service("haproxy")
|
43
36
|
template File.join(File.dirname(__FILE__), "..", "templates/haproxy.conf")
|
44
37
|
end
|
45
38
|
end
|
@@ -3,6 +3,12 @@ module PoolParty
|
|
3
3
|
plugin :poolparty do
|
4
4
|
|
5
5
|
def enable
|
6
|
+
# Build hostsfile
|
7
|
+
# TODO: COME BACK AND CLEAN THIS UP
|
8
|
+
(self.respond_to?(:list_of_running_instances) ? self : parent).list_of_running_instances.each do |ri|
|
9
|
+
has_host({:name => "#{ri.name}", :ip => ri.ip })
|
10
|
+
end
|
11
|
+
|
6
12
|
has_package(:name => "erlang")
|
7
13
|
has_package(:name => "erlang-dev")
|
8
14
|
has_package(:name => "erlang-src")
|
@@ -32,39 +38,41 @@ module PoolParty
|
|
32
38
|
|
33
39
|
has_gempackage(:name => "RubyInline", :download_url => "http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem")
|
34
40
|
|
35
|
-
has_gempackage(:name => "poolparty", :download_url => "http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true", :requires => [get_gempackage("ruby2ruby"), get_gempackage("RubyInline"), get_gempackage("ParseTree")])
|
41
|
+
has_gempackage(:name => "poolparty-latest", :download_url => "http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true", :requires => [get_gempackage("ruby2ruby"), get_gempackage("RubyInline"), get_gempackage("ParseTree")])
|
36
42
|
|
37
|
-
has_exec(:name => "build_messenger", :command => ". /etc/profile && server-build-messenger", :requires => get_gempackage("poolparty"))
|
38
|
-
has_exec(:name => "start_node", :command => ". /etc/profile && server-start-node", :requires => get_exec("build_messenger"))
|
43
|
+
has_exec(:name => "build_messenger", :command => ". /etc/profile && server-build-messenger", :requires => get_gempackage("poolparty-latest"), :ifnot => "ps aux | grep beam | grep node")
|
44
|
+
has_exec(:name => "start_node", :command => ". /etc/profile && server-start-node", :requires => get_exec("build_messenger"), :ifnot => "ps aux | grep beam | grep node")
|
39
45
|
|
40
46
|
end
|
41
|
-
|
42
|
-
# Build hostsfile
|
43
|
-
# TODO: COME BACK AND CLEAN THIS UP
|
44
|
-
(self.respond_to?(:list_of_running_instances) ? self : parent).list_of_running_instances.each do |ri|
|
45
|
-
has_host({:name => "#{ri.name}", :ip => ri.ip })
|
46
|
-
end
|
47
47
|
|
48
48
|
# Custom run puppet to minimize footprint
|
49
49
|
# TODO: Update the offsetted times
|
50
|
-
|
51
|
-
|
50
|
+
execute_on_master do
|
51
|
+
has_cron(:name => "puppetd runner", :user => Base.user, :minute => "*/5") do
|
52
|
+
command(PoolParty::Remote::RemoteInstance.puppet_master_rerun_command)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
execute_on_node do
|
56
|
+
has_cron(:name => "puppetd runner", :user => Base.user, :minute => "*/5") do
|
57
|
+
command(PoolParty::Remote::RemoteInstance.puppet_rerun_commad)
|
58
|
+
end
|
52
59
|
end
|
53
60
|
|
54
61
|
# These are all requirements on the master
|
55
|
-
|
56
|
-
has_cron({:name => "maintain script
|
62
|
+
execute_on_master do
|
63
|
+
has_cron({:name => "maintain script", :command => ". /etc/profile && which cloud-maintain | /bin/sh", :minute => "*/3"})
|
57
64
|
# TODO: Update this so it only runs when needed
|
58
|
-
has_exec(:name => "start master messenger", :command => ". /etc/profile && server-start-master", :requires => [get_gempackage("poolparty"), get_exec("build_messenger")])
|
65
|
+
has_exec(:name => "start master messenger", :command => ". /etc/profile && server-start-master", :requires => [get_gempackage("poolparty-latest"), get_exec("build_messenger")], :ifnot => "ps aux | grep beam | grep node")
|
59
66
|
|
60
67
|
has_remotefile(:name => "/usr/bin/puppetcleaner") do
|
61
68
|
mode 744
|
62
69
|
template File.join(File.dirname(__FILE__), "..", "templates/puppetcleaner")
|
63
70
|
end
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
71
|
+
end
|
72
|
+
|
73
|
+
has_remotefile(:name => "/usr/bin/puppetrerun") do
|
74
|
+
mode 744
|
75
|
+
template File.join(File.dirname(__FILE__), "..", "templates/puppetrerun")
|
68
76
|
end
|
69
77
|
|
70
78
|
# has_host(:name => "puppet", :ip => (self.respond_to?(:master) ? self : parent).master.ip)
|
@@ -10,7 +10,6 @@ module PoolParty
|
|
10
10
|
# Convenience method to clean
|
11
11
|
def self.provision_master(cloud, testing=false)
|
12
12
|
Provisioner::Master.new(cloud).process_install!(testing)
|
13
|
-
process_clean_reconfigure_for!(cloud.master, cloud, testing)
|
14
13
|
end
|
15
14
|
|
16
15
|
def self.configure_master(cloud, testing=false)
|
@@ -29,7 +28,6 @@ module PoolParty
|
|
29
28
|
|
30
29
|
def self.configure_slaves(cloud, testing=false)
|
31
30
|
cloud.nonmaster_nonterminated_instances.each do |sl|
|
32
|
-
puts "Slave: #{sl.name} (#{sl.ip})"
|
33
31
|
configure_slave(sl, cloud, testing)
|
34
32
|
end
|
35
33
|
end
|
@@ -65,10 +63,14 @@ module PoolParty
|
|
65
63
|
# Callback after initialized
|
66
64
|
def loaded(opts={}, parent=self)
|
67
65
|
end
|
66
|
+
|
67
|
+
### Installation tasks
|
68
|
+
|
68
69
|
# This is the actual runner for the installation
|
69
70
|
def install
|
70
71
|
valid? ? install_string : error
|
71
72
|
end
|
73
|
+
# Write the installation tasks to a file in the storage directory
|
72
74
|
def write_install_file
|
73
75
|
error unless valid?
|
74
76
|
::FileUtils.mkdir_p Base.storage_directory unless ::File.exists?(Base.storage_directory)
|
@@ -88,16 +90,16 @@ module PoolParty
|
|
88
90
|
vputs "Logging on to #{@instance.ip} (#{@instance.name})"
|
89
91
|
@cloud.rsync_storage_files_to(@instance)
|
90
92
|
vputs "Preparing configuration on the master"
|
91
|
-
process_clean_reconfigure_for!(@instance)
|
92
93
|
|
93
94
|
before_install(@instance)
|
94
95
|
|
95
96
|
vputs "Logging in and running provisioning on #{@instance.name}"
|
96
|
-
cmd = "cd #{Base.remote_storage_path} && chmod +x install_#{name}.sh && /bin/sh install_#{name}.sh
|
97
|
+
cmd = "cd #{Base.remote_storage_path} && chmod +x install_#{name}.sh && /bin/sh install_#{name}.sh; rm install_#{name}.sh"
|
97
98
|
verbose ? @cloud.run_command_on(cmd, @instance) : hide_output {@cloud.run_command_on(cmd, @instance)}
|
98
99
|
|
99
|
-
process_clean_reconfigure_for!(@instance)
|
100
|
-
|
100
|
+
process_clean_reconfigure_for!(@instance, testing)
|
101
|
+
|
102
|
+
after_install(@instance)
|
101
103
|
end
|
102
104
|
end
|
103
105
|
# Install callbacks
|
@@ -106,6 +108,9 @@ module PoolParty
|
|
106
108
|
end
|
107
109
|
def after_install(instance)
|
108
110
|
end
|
111
|
+
|
112
|
+
### Configuraton tasks
|
113
|
+
|
109
114
|
def configure
|
110
115
|
valid? ? configure_string : error
|
111
116
|
end
|
@@ -122,25 +127,23 @@ module PoolParty
|
|
122
127
|
unless testing
|
123
128
|
vputs "Logging on to #{@instance.ip}"
|
124
129
|
@cloud.rsync_storage_files_to(@instance)
|
125
|
-
process_clean_reconfigure_for!(@instance)
|
126
130
|
|
127
131
|
cmd = "cd #{Base.remote_storage_path} && chmod +x configure_#{name}.sh && /bin/sh configure_#{name}.sh && rm configure_#{name}.sh"
|
128
132
|
verbose ? @cloud.run_command_on(cmd, @instance) : hide_output {@cloud.run_command_on(cmd, @instance)}
|
129
|
-
process_clean_reconfigure_for!(@instance)
|
130
133
|
end
|
131
134
|
end
|
132
135
|
def process_clean_reconfigure_for!(instance, testing=false)
|
133
136
|
vputs "Cleaning certs from master: #{instance.name}"
|
134
137
|
# puppetca --clean #{instance.name}.compute-1.internal; puppetca --clean #{instance.name}.ec2.internal
|
135
138
|
# find /etc/puppet/ssl -type f -exec rm {} \;
|
136
|
-
command =
|
137
|
-
|
138
|
-
EOE
|
139
|
-
@cloud.run_command_on(command, @cloud.master) unless testing
|
139
|
+
command = instance.master? ? "if [ -f '/usr/bin/puppetcleaner' ]; then /usr/bin/env puppetcleaner; fi" : "rm -rf /etc/puppet/ssl"
|
140
|
+
@cloud.run_command_on(command, instance) unless testing
|
140
141
|
end
|
141
142
|
def process_reconfigure!(testing=false)
|
142
143
|
@cloud.run_command_on(RemoteInstance.puppet_runner_command, @instance) unless testing
|
143
144
|
end
|
145
|
+
# Tasks that need to be performed everytime we do any
|
146
|
+
# remote ssh'ing into any instance
|
144
147
|
def setup_runner(force=false)
|
145
148
|
@cloud.prepare_to_configuration
|
146
149
|
@cloud.build_and_store_new_config_file(force)
|
@@ -24,6 +24,7 @@ module PoolParty
|
|
24
24
|
setup_fileserver,
|
25
25
|
setup_autosigning,
|
26
26
|
install_poolparty,
|
27
|
+
setup_poolparty,
|
27
28
|
start_puppetmaster
|
28
29
|
] << configure_tasks
|
29
30
|
end
|
@@ -77,48 +78,23 @@ mkdir -p /etc/poolparty
|
|
77
78
|
echo "*" > /etc/puppet/autosign.conf
|
78
79
|
EOS
|
79
80
|
end
|
80
|
-
|
81
|
-
def create_local_node
|
82
|
-
str = <<-EOS
|
83
|
-
node default {
|
84
|
-
include poolparty
|
85
|
-
}
|
86
|
-
EOS
|
87
|
-
@cloud.list_of_running_instances.each do |ri|
|
88
|
-
str << <<-EOS
|
89
|
-
node "#{ri.name}" inherits default {}
|
90
|
-
EOS
|
91
|
-
end
|
92
|
-
"echo '#{str}' > /etc/puppet/manifests/nodes/nodes.pp"
|
93
|
-
end
|
94
|
-
|
95
|
-
def move_templates
|
96
|
-
<<-EOS
|
97
|
-
mkdir -p #{Base.template_path}
|
98
|
-
cp #{Base.remote_storage_path}/#{Base.template_directory}/* #{Base.template_path}
|
99
|
-
EOS
|
100
|
-
end
|
101
81
|
|
102
|
-
def
|
82
|
+
def setup_poolparty
|
103
83
|
<<-EOS
|
104
|
-
cp #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes/poolparty.pp
|
105
84
|
cp #{Base.remote_storage_path}/#{Base.key_file_locations.first} "#{Base.base_config_directory}/.ppkeys"
|
106
85
|
cp #{Base.remote_storage_path}/#{Base.default_specfile_name} #{Base.base_config_directory}/#{Base.default_specfile_name}
|
107
|
-
#{copy_ssh_app}
|
108
86
|
EOS
|
109
87
|
end
|
110
|
-
|
88
|
+
|
111
89
|
def copy_ssh_app
|
112
|
-
if @cloud.remote_keypair_path != "#{Base.remote_storage_path}/#{@cloud.full_keypair_name}"
|
113
|
-
"cp #{Base.remote_storage_path}/#{@cloud.full_keypair_name} #{@cloud.remote_keypair_path}"
|
114
|
-
end
|
90
|
+
"cp #{Base.remote_storage_path}/#{@cloud.full_keypair_name} #{@cloud.remote_keypair_path}" if @cloud.remote_keypair_path != "#{Base.remote_storage_path}/#{@cloud.full_keypair_name}"
|
115
91
|
end
|
116
92
|
|
117
93
|
def install_poolparty
|
118
94
|
<<-EOE
|
119
95
|
cd /var/poolparty
|
120
96
|
wget http://rubyforge.org/frs/download.php/44731/logging-0.9.4.gem -O logging.gem 2>&1
|
121
|
-
wget http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem -O
|
97
|
+
wget http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem -O ZenTest.gem 2>&1
|
122
98
|
wget http://rubyforge.org/frs/download.php/45600/ParseTree-3.0.1.gem -O ParseTree.gem 2>&1
|
123
99
|
wget http://rubyforge.org/frs/download.php/45587/ruby2ruby-1.2.0.gem -O ruby2ruby.gem 2>&1
|
124
100
|
wget http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem -O activesupport.gem 2>&1
|
@@ -131,11 +107,11 @@ wget http://rubyforge.org/frs/download.php/45546/rubyforge-1.0.1.gem -O rubyforg
|
|
131
107
|
wget http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem -O rake.gem 2>&1
|
132
108
|
wget http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem -O sexp_processor.gem 2>&1
|
133
109
|
wget http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true -O poolparty-latest.gem 2>&1
|
134
|
-
wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon-ec2.gem 2>&1
|
110
|
+
wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O grempe-amazon-ec2.gem 2>&1
|
135
111
|
|
136
112
|
#{
|
137
|
-
%w(rake lockfile rubyforge hoe
|
138
|
-
RubyInline ParseTree ruby2ruby xml-simple poolparty-latest amazon-ec2).map do |dep|
|
113
|
+
%w(rake lockfile rubyforge hoe ZenTest sexp_processor flexmock logging activesupport
|
114
|
+
RubyInline ParseTree ruby2ruby xml-simple poolparty-latest grempe-amazon-ec2).map do |dep|
|
139
115
|
"gem install --ignore-dependencies -y --no-ri --no-rdoc #{dep}.gem"
|
140
116
|
end.join("\n")
|
141
117
|
}
|
@@ -144,17 +120,45 @@ wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon-
|
|
144
120
|
# gem install -y --no-ri --no-rdoc --source http://gems.github.com auser-poolparty
|
145
121
|
EOE
|
146
122
|
end
|
147
|
-
|
123
|
+
|
148
124
|
# ps aux | grep puppetmasterd | awk '{print $2}' | xargs kill
|
149
125
|
# rm -rf /etc/puppet/ssl
|
150
126
|
def start_puppetmaster
|
151
127
|
<<-EOS
|
152
|
-
/usr/bin/env puppetcleaner 2>&1 > /dev/null
|
153
128
|
puppetmasterd --verbose 2>&1 > /dev/null
|
154
129
|
EOS
|
155
130
|
end
|
156
131
|
|
157
|
-
#
|
132
|
+
# TODO:
|
133
|
+
# Consider this method in the manifest
|
134
|
+
def create_local_node
|
135
|
+
str = <<-EOS
|
136
|
+
node default {
|
137
|
+
include poolparty
|
138
|
+
}
|
139
|
+
EOS
|
140
|
+
@cloud.list_of_running_instances.each do |ri|
|
141
|
+
str << <<-EOS
|
142
|
+
node "#{ri.name}" inherits default {}
|
143
|
+
EOS
|
144
|
+
end
|
145
|
+
"echo '#{str}' > /etc/puppet/manifests/nodes/nodes.pp"
|
146
|
+
end
|
147
|
+
|
148
|
+
def move_templates
|
149
|
+
<<-EOS
|
150
|
+
mkdir -p #{Base.template_path}
|
151
|
+
cp #{Base.remote_storage_path}/#{Base.template_directory}/* #{Base.template_path}
|
152
|
+
EOS
|
153
|
+
end
|
154
|
+
|
155
|
+
def create_poolparty_manifest
|
156
|
+
<<-EOS
|
157
|
+
cp #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes/poolparty.pp
|
158
|
+
#{copy_ssh_app}
|
159
|
+
EOS
|
160
|
+
end
|
161
|
+
|
158
162
|
def restart_puppetd
|
159
163
|
<<-EOS
|
160
164
|
. /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1 > /dev/null
|
@@ -26,7 +26,7 @@ module PoolParty
|
|
26
26
|
def setup_configs
|
27
27
|
<<-EOS
|
28
28
|
echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
|
29
|
-
|
29
|
+
/usr/bin/puppetrerun
|
30
30
|
EOS
|
31
31
|
end
|
32
32
|
|
@@ -34,8 +34,7 @@ module PoolParty
|
|
34
34
|
# puppetd --listen --fqdn #{@instance.name}
|
35
35
|
def start_puppet
|
36
36
|
<<-EOS
|
37
|
-
|
38
|
-
/usr/bin/puppetrerun
|
37
|
+
. /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1
|
39
38
|
EOS
|
40
39
|
end
|
41
40
|
|
@@ -69,6 +69,12 @@ module PoolParty
|
|
69
69
|
end
|
70
70
|
# Commands for the servers
|
71
71
|
def self.puppet_runner_command
|
72
|
+
". /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1"
|
73
|
+
end
|
74
|
+
def self.puppet_master_rerun_command
|
75
|
+
"/usr/bin/puppetcleaner; #{puppet_runner_command}"
|
76
|
+
end
|
77
|
+
def self.puppet_rerun_commad
|
72
78
|
"/usr/bin/puppetrerun 2>&1 > /dev/null"
|
73
79
|
end
|
74
80
|
end
|
@@ -11,12 +11,12 @@ module PoolParty
|
|
11
11
|
has_package(:name => "git-core")
|
12
12
|
has_directory(:name => "#{cwd}")
|
13
13
|
|
14
|
-
|
14
|
+
has_exec({:name => "git-#{name}", :requires => get_package("git-core"), :requires => get_directory("#{cwd}")}) 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"
|
18
18
|
end
|
19
|
-
|
19
|
+
has_exec(:name => "update-#{name}", :requires => get_exec("git-#{name}")) do
|
20
20
|
cwd get_exec("git-#{parent.name}").cwd
|
21
21
|
command "git pull"
|
22
22
|
end
|
@@ -105,7 +105,7 @@ module PoolParty
|
|
105
105
|
# the options
|
106
106
|
# Finally, it uses the parent's options as the lowest priority
|
107
107
|
def initialize(opts={}, parent=self, &block)
|
108
|
-
# Take the options of the parents
|
108
|
+
# Take the options of the parents
|
109
109
|
set_vars_from_options(opts) unless opts.empty?
|
110
110
|
set_resource_parent(parent)
|
111
111
|
self.run_in_context &block if block
|
@@ -1,9 +1,17 @@
|
|
1
1
|
module PoolParty
|
2
2
|
module Resources
|
3
3
|
|
4
|
-
def
|
4
|
+
def execute_on_master(parent=self, &block)
|
5
|
+
execute_if("$hostname", "==", "master", parent, &block)
|
6
|
+
end
|
7
|
+
|
8
|
+
def execute_on_node(parent=self, &block)
|
9
|
+
execute_if("$hostname", "!=", "master", parent, &block)
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute_if(attr_s="$hostname", comparison="==", str="", parent=self, &block)
|
5
13
|
# parent = parent.is_a?(PoolParty::Cloud::Cloud) ? parent : parent.parent
|
6
|
-
opts = {:attribute => attr_s, :equal => str}
|
14
|
+
opts = {:attribute => attr_s, :equal => str, :comparison => comparison}
|
7
15
|
options = parent.respond_to?(:options) ? parent.options.merge!(opts) : opts
|
8
16
|
# @c = PoolParty::Resources::Conditional.new(options, parent, &block)
|
9
17
|
parent.add_resource(:conditional, options, parent, &block)
|
@@ -13,7 +21,7 @@ module PoolParty
|
|
13
21
|
class Conditional < Resource
|
14
22
|
|
15
23
|
def initialize(opts={}, parent=self, &block)
|
16
|
-
name "#{opts[:name] ? opts[:name] : opts[:attribute]}
|
24
|
+
name "#{opts[:name] ? opts[:name] : opts[:attribute]} #{opts[:comparison]} #{opts[:equal]}"
|
17
25
|
attribute opts[:attribute]
|
18
26
|
equal opts[:equal]
|
19
27
|
super
|
@@ -25,6 +33,10 @@ module PoolParty
|
|
25
33
|
true
|
26
34
|
end
|
27
35
|
|
36
|
+
def disallowed_options
|
37
|
+
[:comparison]
|
38
|
+
end
|
39
|
+
|
28
40
|
def printable?
|
29
41
|
false
|
30
42
|
end
|
@@ -10,18 +10,23 @@ module PoolParty
|
|
10
10
|
# TODO: Add it so that it tries to pull the gem off the master fileserver first...
|
11
11
|
def loaded(opts={}, parent=self)
|
12
12
|
if download_url
|
13
|
+
|
14
|
+
execute_on_master do
|
15
|
+
has_exec(:name => "download-#{name}", :cwd => Base.remote_storage_path, :command => "wget #{download_url} -O #{name}.gem", :ifnot => "test -f #{Base.remote_storage_path}/#{name}.gem")
|
16
|
+
end
|
13
17
|
|
14
|
-
has_file(
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
has_exec(opts.merge({:name => "#{name}", :cwd =>"#{Base.remote_storage_path}"
|
18
|
+
has_file({
|
19
|
+
:name => "#{Base.remote_storage_path}/#{name}.gem",
|
20
|
+
:source => "#{Base.fileserver_base}/#{name}.gem",
|
21
|
+
:requires => get_host("master")
|
22
|
+
})
|
23
|
+
|
24
|
+
has_exec(opts.merge({:name => "#{name}", :cwd =>"#{Base.remote_storage_path}"})) do
|
21
25
|
command "gem install -y --no-ri --no-rdoc #{Base.remote_storage_path}/#{name}.gem"
|
22
26
|
ifnot "gem list --local #{name} | grep #{name} #{"| grep #{version}" if version}"
|
23
27
|
requires get_file("#{Base.remote_storage_path}/#{name}.gem")
|
24
28
|
end
|
29
|
+
|
25
30
|
else
|
26
31
|
has_exec(opts.merge({:name => "#{name}", :cwd => "/tmp", :path => "/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/var/lib/gems/1.8/bin"})) do
|
27
32
|
command "gem install -y --no-ri --no-rdoc #{"--version #{version}" if version} #{"--source #{source}" if source} #{name} <<heredoc
|
data/lib/poolparty/version.rb
CHANGED
data/poolparty.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poolparty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.38
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Lerner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-11-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -85,6 +85,7 @@ executables:
|
|
85
85
|
- server-list-active
|
86
86
|
- server-list-responding
|
87
87
|
- server-rerun
|
88
|
+
- server-show-stats
|
88
89
|
- server-start-master
|
89
90
|
- server-start-node
|
90
91
|
extensions: []
|
@@ -133,6 +134,7 @@ files:
|
|
133
134
|
- bin/server-list-active
|
134
135
|
- bin/server-list-responding
|
135
136
|
- bin/server-rerun
|
137
|
+
- bin/server-show-stats
|
136
138
|
- bin/server-start-master
|
137
139
|
- bin/server-start-node
|
138
140
|
- config/hoe.rb
|
@@ -9,7 +9,7 @@ describe "Conditional" do
|
|
9
9
|
describe "wrapped" do
|
10
10
|
before(:each) do
|
11
11
|
@cloud = cloud :conditional_cloud_spec do
|
12
|
-
execute_if("$hostname", "'master'", self) do
|
12
|
+
execute_if("$hostname", "==", "'master'", self) do
|
13
13
|
has_file({:name => "/etc/apache2/puppetmaster2.conf"})
|
14
14
|
end
|
15
15
|
end
|
@@ -25,7 +25,7 @@ describe "Conditional" do
|
|
25
25
|
@cond.resources.size.should == 1
|
26
26
|
end
|
27
27
|
it "should have a file resource on the conditional" do
|
28
|
-
@cond.
|
28
|
+
@cond.get_file("/etc/apache2/puppetmaster2.conf").name.should == "/etc/apache2/puppetmaster2.conf"
|
29
29
|
end
|
30
30
|
it "should have the parent as the cloud" do
|
31
31
|
@cond.parent.should == @cloud
|
data/website/index.html
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
<h1>PoolParty</h1>
|
35
35
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/poolparty"; return false'>
|
36
36
|
<p>Get Version</p>
|
37
|
-
<a href="http://rubyforge.org/projects/poolparty" class="numbers">0.2.
|
37
|
+
<a href="http://rubyforge.org/projects/poolparty" class="numbers">0.2.38</a>
|
38
38
|
</div>
|
39
39
|
<h1>‘Easy cloud computing’</h1>
|
40
40
|
<h2>What</h2>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auser-poolparty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.38
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Lerner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-11-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -85,6 +85,7 @@ executables:
|
|
85
85
|
- server-list-active
|
86
86
|
- server-list-responding
|
87
87
|
- server-rerun
|
88
|
+
- server-show-stats
|
88
89
|
- server-start-master
|
89
90
|
- server-start-node
|
90
91
|
extensions: []
|
@@ -133,6 +134,7 @@ files:
|
|
133
134
|
- bin/server-list-active
|
134
135
|
- bin/server-list-responding
|
135
136
|
- bin/server-rerun
|
137
|
+
- bin/server-show-stats
|
136
138
|
- bin/server-start-master
|
137
139
|
- bin/server-start-node
|
138
140
|
- config/hoe.rb
|