auser-poolparty 0.2.37 → 0.2.38
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 +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
|