auser-poolparty 1.1.7 → 1.2.0
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/History.txt +3 -0
- data/README.txt +10 -7
- data/Rakefile +0 -1
- data/VERSION.yml +2 -2
- data/bin/cloud-osxcopy +1 -1
- data/bin/cloud-setup-dev +1 -1
- data/bin/cloud-spec +0 -1
- data/bin/cloud-terminate +7 -1
- data/bin/cloud-verify +30 -0
- data/examples/basic.rb +3 -6
- data/examples/fairchild.rb +17 -21
- data/examples/maize.rb +37 -0
- data/lib/poolparty/base_packages/haproxy.rb +6 -6
- data/lib/poolparty/base_packages/heartbeat.rb +1 -43
- data/lib/poolparty/base_packages/poolparty.rb +1 -3
- data/lib/poolparty/modules/cloud_dsl.rb +10 -2
- data/lib/poolparty/modules/cloud_resourcer.rb +0 -4
- data/lib/poolparty/net/init.rb +1 -1
- data/lib/poolparty/net/remote_instance.rb +0 -27
- data/lib/poolparty/net/remoter/cloud_control.rb +0 -177
- data/lib/poolparty/net/remoter/interactive.rb +5 -16
- data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +1 -10
- data/lib/poolparty/plugins/apache2.rb +53 -0
- data/lib/poolparty/plugins/deploy_directory.rb +16 -14
- data/lib/poolparty/plugins/gem_package.rb +24 -0
- data/lib/poolparty/plugins/line_in_file.rb +16 -0
- data/lib/poolparty/poolparty/plugin.rb +8 -6
- data/lib/poolparty/provision/dr_configure.rb +1 -0
- data/lib/poolparty/resources.rb +42 -0
- data/lib/poolparty/resources/cron.rb +30 -1
- data/lib/poolparty/resources/directory.rb +23 -0
- data/lib/poolparty/resources/exec.rb +22 -0
- data/lib/poolparty/resources/file.rb +28 -0
- data/lib/poolparty/resources/host.rb +22 -1
- data/lib/poolparty/resources/mount.rb +24 -0
- data/lib/poolparty/resources/package.rb +29 -13
- data/lib/poolparty/resources/remote_file.rb +32 -0
- data/lib/poolparty/resources/service.rb +20 -0
- data/lib/poolparty/resources/sshkey.rb +22 -0
- data/lib/poolparty/resources/symlink.rb +30 -0
- data/lib/poolparty/resources/variable.rb +25 -0
- data/lib/poolparty/templates/php.ini.erb +1253 -0
- data/lib/poolparty/verification/verifiers/ping.rb +5 -0
- data/lib/poolparty/verification/verify.rb +2 -0
- data/spec/bin/fixtures/bin_cloud_for_test.rb +0 -6
- data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +0 -6
- data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +0 -10
- data/spec/poolparty/spec_helper.rb +0 -1
- data/tasks/spec.rake +2 -0
- data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +0 -10
- data/test/poolparty/verification/verify_test.rb +3 -3
- data/vendor/chef/apache2/attributes/apache.rb +1 -1
- data/vendor/gems/parenting/Manifest.txt +2 -1
- data/vendor/gems/parenting/lib/parenting.rb +1 -1
- data/vendor/gems/parenting/parenting.gemspec +2 -2
- metadata +8 -70
- data/bin/messenger-get-current-nodes +0 -14
- data/bin/server-become-master +0 -24
- data/bin/server-build-messenger +0 -28
- data/bin/server-clean-cert-for +0 -15
- data/bin/server-provision +0 -32
- data/bin/server-start-agent +0 -15
- data/bin/server-start-client +0 -29
- data/bin/server-start-master +0 -26
- data/bin/server-start-node +0 -32
- data/bin/server-stop-client +0 -3
- data/bin/server-stop-master +0 -3
- data/bin/server-stop-node +0 -3
- data/bin/server-update-hosts +0 -49
- data/lib/poolparty/capistrano.rb +0 -54
- data/lib/poolparty/capistrano/cloud_tasks.rb +0 -10
- data/lib/poolparty/config/postlaunchmessage.txt +0 -5
- data/lib/poolparty/net/messenger.rb +0 -57
- data/lib/poolparty/plugins/rsyncmirror.rb +0 -28
- data/lib/poolparty/services/conditional.rb +0 -46
- data/lib/poolparty/spec.rb +0 -31
- data/lib/poolparty/spec/core/string.rb +0 -18
- data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +0 -26
- data/lib/poolparty/spec/matchers/have_cron.rb +0 -28
- data/lib/poolparty/spec/matchers/have_deploydirectory.rb +0 -15
- data/lib/poolparty/spec/matchers/have_directory.rb +0 -31
- data/lib/poolparty/spec/matchers/have_exec.rb +0 -28
- data/lib/poolparty/spec/matchers/have_file.rb +0 -28
- data/lib/poolparty/spec/matchers/have_gempackage.rb +0 -28
- data/lib/poolparty/spec/matchers/have_git.rb +0 -28
- data/lib/poolparty/spec/matchers/have_host.rb +0 -28
- data/lib/poolparty/spec/matchers/have_mount.rb +0 -28
- data/lib/poolparty/spec/matchers/have_package.rb +0 -28
- data/lib/poolparty/spec/matchers/have_remotefile.rb +0 -28
- data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +0 -28
- data/lib/poolparty/spec/matchers/have_service.rb +0 -28
- data/lib/poolparty/spec/matchers/have_sshkey.rb +0 -28
- data/lib/poolparty/spec/matchers/have_symlink.rb +0 -28
- data/lib/poolparty/spec/matchers/have_variable.rb +0 -32
- data/lib/poolparty/spec/spec/dynamic_matchers.rb +0 -63
- data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +0 -7
- data/lib/poolparty/spec/templates/have_base.rb +0 -28
- data/spec/poolparty/net/messenger_spec.rb +0 -16
- data/spec/poolparty/services/conditional_spec.rb +0 -52
- data/spec/poolparty/spec/core/string_spec.rb +0 -57
data/History.txt
CHANGED
data/README.txt
CHANGED
|
@@ -13,13 +13,6 @@ pool :cloud do
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
== FEATURES/PROBLEMS:
|
|
17
|
-
|
|
18
|
-
* Written in Ruby and Erlang
|
|
19
|
-
* Written from the ground up to be extensible with plugins
|
|
20
|
-
* Easy git-style commands to communicate with your clouds
|
|
21
|
-
* Much much more
|
|
22
|
-
|
|
23
16
|
== SYNOPSIS:
|
|
24
17
|
|
|
25
18
|
PoolParty is written with the intention of being as application-agnostic as possible. It installs only the basic
|
|
@@ -28,6 +21,16 @@ required software to glue the cloud together on the instances as listed below.
|
|
|
28
21
|
PoolParty is easily configuration. In fact, it makes little assumptions about your development environment and allows
|
|
29
22
|
several options on how to begin configuring the cloud.
|
|
30
23
|
|
|
24
|
+
== WHAT NEXT:
|
|
25
|
+
* PoolParty::Resources - learn how to use resources in your <tt>clouds.rb</tt>
|
|
26
|
+
|
|
27
|
+
== FEATURES/PROBLEMS:
|
|
28
|
+
|
|
29
|
+
* Written in Ruby and Erlang
|
|
30
|
+
* Written from the ground up to be extensible with plugins
|
|
31
|
+
* Easy git-style commands to communicate with your clouds
|
|
32
|
+
* Much much more
|
|
33
|
+
|
|
31
34
|
== REQUIREMENTS:
|
|
32
35
|
|
|
33
36
|
Ruby
|
data/Rakefile
CHANGED
data/VERSION.yml
CHANGED
data/bin/cloud-osxcopy
CHANGED
|
@@ -4,7 +4,7 @@ require "poolparty"
|
|
|
4
4
|
require "poolpartycl"
|
|
5
5
|
|
|
6
6
|
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
7
|
-
opts.on('-n name', '--name name', 'Copy
|
|
7
|
+
opts.on('-n name', '--name name', 'Copy an ip from this cloud to the clipboard') { |c| optioner.cloudname c }
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
o.loaded_clouds.each do |cld|
|
data/bin/cloud-setup-dev
CHANGED
data/bin/cloud-spec
CHANGED
|
@@ -31,7 +31,6 @@ o.loaded_clouds.each do |cloud|
|
|
|
31
31
|
when nil
|
|
32
32
|
print_with_nice_printer("Starting live specing cloud #{name}")
|
|
33
33
|
puts "TODO: this isn't implented yet."
|
|
34
|
-
# hide_output {launch_and_configure_master!}
|
|
35
34
|
print_with_nice_printer("Waiting for cloud to provision")
|
|
36
35
|
|
|
37
36
|
end
|
data/bin/cloud-terminate
CHANGED
|
@@ -5,6 +5,7 @@ require "poolpartycl"
|
|
|
5
5
|
|
|
6
6
|
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
7
7
|
opts.on('-n name', '--name name', 'Terminate the cloud of this name') { |c| optioner.cloudname c }
|
|
8
|
+
opts.on('-y', '--yes', 'Terminate the cloud without prompt') { optioner.yes true }
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
o.loaded_clouds.each do |cld|
|
|
@@ -14,9 +15,14 @@ Shutting down #{inst.instance_id}
|
|
|
14
15
|
Are you sure? (Y/N)
|
|
15
16
|
EOM
|
|
16
17
|
|
|
17
|
-
if
|
|
18
|
+
if o.yes?
|
|
18
19
|
puts "Shutting down #{inst.instance_id}"
|
|
19
20
|
cld.terminate_instance!(:instance_id => inst.instance_id)
|
|
21
|
+
else
|
|
22
|
+
if are_you_sure?(msg)
|
|
23
|
+
puts "Shutting down #{inst.instance_id}"
|
|
24
|
+
cld.terminate_instance!(:instance_id => inst.instance_id)
|
|
25
|
+
end
|
|
20
26
|
end
|
|
21
27
|
end
|
|
22
28
|
end
|
data/bin/cloud-verify
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
require "poolparty"
|
|
4
|
+
|
|
5
|
+
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
6
|
+
opts.on('-n cloudname', '--name name', 'Start cloud by this name') { |c| optioner.cloudname c }
|
|
7
|
+
opts.on('-i num', '--num i', 'Instance number') { |i| optioner.inst_num i.to_i }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
o.loaded_clouds.each do |cld|
|
|
11
|
+
|
|
12
|
+
begin
|
|
13
|
+
if cld.verifiers.size > 0
|
|
14
|
+
cld.passing?
|
|
15
|
+
cld.vputs "Cloud passed verification"
|
|
16
|
+
else
|
|
17
|
+
raise "Your cloud doesn't have any verifiers!"
|
|
18
|
+
exit 2
|
|
19
|
+
end
|
|
20
|
+
rescue Exception => e
|
|
21
|
+
cld.vputs <<-EOM
|
|
22
|
+
|
|
23
|
+
Verification failed: #{e}"
|
|
24
|
+
Please check your clouds.rb for any errors
|
|
25
|
+
|
|
26
|
+
EOM
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
data/examples/basic.rb
CHANGED
|
@@ -2,20 +2,17 @@
|
|
|
2
2
|
# Shows global settings for the clouds
|
|
3
3
|
pool :application do
|
|
4
4
|
instances 3..50
|
|
5
|
-
|
|
6
|
-
testing true
|
|
7
|
-
|
|
5
|
+
|
|
8
6
|
cloud :basic_app do
|
|
7
|
+
|
|
9
8
|
minimum_instances 12
|
|
10
9
|
ami "ami-abc123"
|
|
11
10
|
junk_yard_dogs "pains"
|
|
12
11
|
has_file :name => "/etc/init.d/motd", :content => "Welcome to your PoolParty instance"
|
|
13
12
|
end
|
|
14
13
|
|
|
15
|
-
cloud :basic_db do
|
|
14
|
+
cloud :basic_db do
|
|
16
15
|
minimum_instances 19
|
|
17
|
-
keypair "hotstuff_database"
|
|
18
|
-
maximum_instances 20
|
|
19
16
|
ami "ami-1234bc"
|
|
20
17
|
junk_yard_dogs "are bad"
|
|
21
18
|
end
|
data/examples/fairchild.rb
CHANGED
|
@@ -2,30 +2,26 @@
|
|
|
2
2
|
# Shows global settings for the clouds
|
|
3
3
|
pool :application do
|
|
4
4
|
instances 1..3
|
|
5
|
-
keypair "auser-work"
|
|
6
5
|
ami 'ami-7cfd1a15'
|
|
7
6
|
|
|
8
7
|
cloud :example_one do
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
#
|
|
27
|
-
# recipe "#{File.dirname(__FILE__)}/examples/fairchild_chef.rb"
|
|
28
|
-
# end
|
|
8
|
+
|
|
9
|
+
has_directory "/var/www"
|
|
10
|
+
|
|
11
|
+
has_file "/etc/motd",
|
|
12
|
+
:content => "Welcome to LARubyConf"
|
|
13
|
+
has_file :name => "/var/www/index.html" do
|
|
14
|
+
content "<h1>Welcome to your new poolparty instance</h1>"
|
|
15
|
+
mode 0644
|
|
16
|
+
owner "www-data"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
has_git_repos "paparazzi" do
|
|
20
|
+
source "git://github.com/auser/paparazzi.git"
|
|
21
|
+
at "/var/www"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
apache
|
|
29
25
|
|
|
30
26
|
end
|
|
31
27
|
|
data/examples/maize.rb
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Basic poolparty template
|
|
2
|
+
|
|
3
|
+
pool :clouds do
|
|
4
|
+
cloud :app do
|
|
5
|
+
instances 1..3
|
|
6
|
+
# keypair "#{ENV['HOME']}/ec2/ec2-keypair.pem" # or the full path to the keypair on the development machine
|
|
7
|
+
ami 'ami-7cfd1a15'
|
|
8
|
+
using :vmrun do
|
|
9
|
+
vmx_hash({
|
|
10
|
+
"/Users/alerner/Documents/vm/Ubuntu32bitVM.vmwarevm/Ubuntu32bitVM.vmx" => "192.168.248.133"
|
|
11
|
+
})
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# directories
|
|
15
|
+
has_directory "/var/www"
|
|
16
|
+
|
|
17
|
+
# packages
|
|
18
|
+
has_package(:name => "logwatch")
|
|
19
|
+
has_package(:name => "imagemagick")
|
|
20
|
+
has_package(:name => "libmagick9-dev")
|
|
21
|
+
has_package(:name => "librmagick-ruby")
|
|
22
|
+
has_package(:name => "ffmpeg")
|
|
23
|
+
has_package(:name => "monit")
|
|
24
|
+
|
|
25
|
+
# gems
|
|
26
|
+
has_gem_package(:name => "rmagick")
|
|
27
|
+
has_gem_package(:name => "rubyist-aasm")
|
|
28
|
+
has_gem_package(:name => "rvideo")
|
|
29
|
+
has_gem_package(:name => "right_aws")
|
|
30
|
+
has_gem_package(:name => "ap4r")
|
|
31
|
+
has_gem_package(:name => "rmagick")
|
|
32
|
+
|
|
33
|
+
# services
|
|
34
|
+
has_service(:name => "monit")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -7,7 +7,7 @@ module PoolParty
|
|
|
7
7
|
|
|
8
8
|
def enable
|
|
9
9
|
# has_chef_recipe "apache2"
|
|
10
|
-
include_chef_recipe "#{::File.dirname(__FILE__)}/../../../vendor/chef/apache2"
|
|
10
|
+
# include_chef_recipe "#{::File.dirname(__FILE__)}/../../../vendor/chef/apache2"
|
|
11
11
|
|
|
12
12
|
# Restart sysklogd after we update the haproxy.log
|
|
13
13
|
has_service(:name => "sysklogd")
|
|
@@ -28,11 +28,11 @@ module PoolParty
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
has_directory "/var/run/haproxy"
|
|
31
|
-
has_package "apache2"
|
|
32
|
-
has_service "apache2"
|
|
31
|
+
# has_package "apache2"
|
|
32
|
+
# has_service "apache2"
|
|
33
33
|
|
|
34
34
|
has_package "haproxy" do
|
|
35
|
-
stops get_service("apache2"), :immediately
|
|
35
|
+
# stops get_service("apache2"), :immediately
|
|
36
36
|
# starts get_service("apache2")
|
|
37
37
|
end
|
|
38
38
|
|
|
@@ -49,8 +49,8 @@ module PoolParty
|
|
|
49
49
|
# Service is required
|
|
50
50
|
has_service("haproxy") do
|
|
51
51
|
action [:start, :enable]
|
|
52
|
-
stops get_service("apache2"), :immediately
|
|
53
|
-
starts get_service("apache2")
|
|
52
|
+
# stops get_service("apache2"), :immediately
|
|
53
|
+
# starts get_service("apache2")
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
end
|
|
@@ -3,53 +3,11 @@ module PoolParty
|
|
|
3
3
|
plugin :poolparty_base_heartbeat do
|
|
4
4
|
|
|
5
5
|
def enable
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
has_package({:name => "heartbeat-2"})
|
|
8
8
|
has_package({:name => "heartbeat-2-dev"})
|
|
9
9
|
|
|
10
10
|
has_service("heartbeat")
|
|
11
|
-
|
|
12
|
-
# has_service(:name => "heartbeat", :hasstatus => true, :hasrestart => true)
|
|
13
|
-
# has_directory(:name => "/etc/ha.d")
|
|
14
|
-
#
|
|
15
|
-
# has_remotefile(:name => "/etc/ha.d/ha.cf") do
|
|
16
|
-
# mode 444
|
|
17
|
-
# notify service(:name => "heartbeat")
|
|
18
|
-
# template "ha.cf"
|
|
19
|
-
# end
|
|
20
|
-
#
|
|
21
|
-
# has_remotefile(:name => "/etc/ha.d/logd.cf") do
|
|
22
|
-
# mode 600
|
|
23
|
-
# notify service(:name => "heartbeat")
|
|
24
|
-
# template File.join(File.dirname(__FILE__), "..", "templates/logd.cf")
|
|
25
|
-
# end
|
|
26
|
-
#
|
|
27
|
-
# has_exec(:name => "heartbeat-update-cib", :command => "/usr/sbin/cibadmin -R -x /etc/ha.d/cib.xml", :refreshonly => true)
|
|
28
|
-
#
|
|
29
|
-
# has_remotefile(:name => "/etc/ha.d/authkeys") do
|
|
30
|
-
# mode 600
|
|
31
|
-
# notify service(:name => "heartbeat")
|
|
32
|
-
# template File.join(File.dirname(__FILE__), "..", "templates/authkeys")
|
|
33
|
-
# end
|
|
34
|
-
#
|
|
35
|
-
# has_remotefile(:name => "/etc/ha.d/cib.xml") do
|
|
36
|
-
# mode 444
|
|
37
|
-
# notify exec(:name => "heartbeat-update-cib")
|
|
38
|
-
# template File.join(File.dirname(__FILE__), "..", "templates/cib.xml")
|
|
39
|
-
# end
|
|
40
|
-
#
|
|
41
|
-
# has_remotefile(:name => "/etc/ha.d/haresources") do
|
|
42
|
-
# mode 644
|
|
43
|
-
# template File.join(File.dirname(__FILE__), "..", "templates/haresources")
|
|
44
|
-
# end
|
|
45
|
-
# # end
|
|
46
|
-
#
|
|
47
|
-
# # variables for the templates
|
|
48
|
-
# has_variable(:name => "ha_nodenames", :value => "generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'name', '-n', '#{cloud.name}')")
|
|
49
|
-
# has_variable(:name => "ha_node_ips", :value => "generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'ip', '-n', '#{cloud.name}')")
|
|
50
|
-
#
|
|
51
|
-
# has_variable({:name => "ha_timeout", :value => (self.respond_to?(:timeout) ? timeout : "5s")})
|
|
52
|
-
# has_variable({:name => "ha_port", :value => (self.respond_to?(:port) ? port : Default.port)})
|
|
53
11
|
|
|
54
12
|
end
|
|
55
13
|
|
|
@@ -18,9 +18,17 @@ module PoolParty
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
# Enable a service package
|
|
21
|
-
def enable(
|
|
21
|
+
def enable(*services)
|
|
22
|
+
services.each do |service|
|
|
23
|
+
dsl_options[service] = :enabled
|
|
24
|
+
end
|
|
25
|
+
end
|
|
22
26
|
# Disable a service package
|
|
23
|
-
def disable(
|
|
27
|
+
def disable(*services)
|
|
28
|
+
services.each do |service|
|
|
29
|
+
dsl_options[service] = :disabled
|
|
30
|
+
end
|
|
31
|
+
end
|
|
24
32
|
|
|
25
33
|
# Check to see if the package has been enabled
|
|
26
34
|
def enabled?(srv);dsl_options.has_key?(srv) && dsl_options[srv] == :enabled;end
|
|
@@ -54,10 +54,6 @@ module PoolParty
|
|
|
54
54
|
raise SpecException.new("Don't know how to handle instances cloud input #{arg}")
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
|
-
|
|
58
|
-
def setup_dev
|
|
59
|
-
return true if keypair || master.nil?
|
|
60
|
-
end
|
|
61
57
|
|
|
62
58
|
# Declare the remoter base
|
|
63
59
|
# Check to make sure the available_bases is available, otherwise raise
|
data/lib/poolparty/net/init.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Load the core net libraries. These are neccessary for any of the remoter_bases to function.
|
|
2
|
-
%w(remote_instance
|
|
2
|
+
%w(remote_instance remote_bases remoter_base).each do |file|
|
|
3
3
|
require File.join(::File.dirname(__FILE__),file+'.rb')
|
|
4
4
|
end
|
|
5
5
|
|
|
@@ -20,12 +20,6 @@ module PoolParty
|
|
|
20
20
|
def on_init
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
# Is this remote instance the master?
|
|
24
|
-
# DEPRECATE
|
|
25
|
-
def master?
|
|
26
|
-
name == "master"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
23
|
# The remote instances is only valid if there is an ip and a name
|
|
30
24
|
def valid?
|
|
31
25
|
(ip.nil? || name.nil?) ? false : true
|
|
@@ -78,27 +72,6 @@ module PoolParty
|
|
|
78
72
|
new(hsh).to_s
|
|
79
73
|
end
|
|
80
74
|
|
|
81
|
-
#TODO: Diet the next 5 commands
|
|
82
|
-
def dependency_resolver_command
|
|
83
|
-
cloud.dependency_resolver_command
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
#FIXME: deprecate puppet specific commands in this class
|
|
87
|
-
def puppet_runner_command
|
|
88
|
-
self.class.send :puppet_runner_command
|
|
89
|
-
end
|
|
90
|
-
# Commands for the servers
|
|
91
|
-
def self.puppet_runner_command
|
|
92
|
-
". /etc/profile && puppetrunner"
|
|
93
|
-
end
|
|
94
|
-
def self.puppet_master_rerun_command
|
|
95
|
-
". /etc/profile && puppetrerun"
|
|
96
|
-
end
|
|
97
|
-
def self.puppet_rerun_commad
|
|
98
|
-
puppet_runner_command
|
|
99
|
-
end
|
|
100
|
-
#
|
|
101
|
-
|
|
102
75
|
def hosts_file_listing_for(cl)
|
|
103
76
|
string = (cl.name == cloud.name) ? "#{name}.#{my_cloud.name}\t#{name}" : "#{name}.#{my_cloud.name}"
|
|
104
77
|
"#{internal_ip}\t#{string}"
|
|
@@ -11,179 +11,6 @@ module PoolParty
|
|
|
11
11
|
def are_too_many_instances_running?
|
|
12
12
|
nodes(:status => "running").size > maximum_instances.to_i
|
|
13
13
|
end
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# TODO: Deprecate all below here
|
|
17
|
-
# # A convenience method for waiting until there are no more
|
|
18
|
-
# # pending instances and then running the block
|
|
19
|
-
# def when_no_pending_instances(&block)
|
|
20
|
-
# reset!
|
|
21
|
-
# if list_of_pending_instances && list_of_pending_instances.size == 0
|
|
22
|
-
# vputs "" # Clear the terminal with a newline
|
|
23
|
-
# block.call if block
|
|
24
|
-
# else
|
|
25
|
-
# vprint "."
|
|
26
|
-
# wait "5.seconds"
|
|
27
|
-
# when_no_pending_instances(&block)
|
|
28
|
-
# end
|
|
29
|
-
# end
|
|
30
|
-
#
|
|
31
|
-
# # Stub method for the time being to handle expansion of the cloud
|
|
32
|
-
# def can_expand_cloud?(force=false)
|
|
33
|
-
# (are_too_few_instances_running? || are_expansion_rules_valid? ) || force || false
|
|
34
|
-
# end
|
|
35
|
-
# def are_expansion_rules_valid?
|
|
36
|
-
# valid_rules?(:expand_when)
|
|
37
|
-
# end
|
|
38
|
-
# # Stub method for the time being to handle the contraction of the cloud
|
|
39
|
-
# def can_contract_cloud?(force=false)
|
|
40
|
-
# return true if force
|
|
41
|
-
# ((are_any_nodes_exceeding_minimum_runtime? and are_too_many_instances_running?) || are_contraction_rules_valid?) || false
|
|
42
|
-
# end
|
|
43
|
-
# def are_contraction_rules_valid?
|
|
44
|
-
# valid_rules?(:contract_when)
|
|
45
|
-
# end
|
|
46
|
-
# # Expand the cloud
|
|
47
|
-
# # If we can start a new instance and the load requires us to expand
|
|
48
|
-
# # the cloud, then we should request_launch_new_instances
|
|
49
|
-
# # Wait for the instance to boot up and when it does come back
|
|
50
|
-
# # online, then provision it as a slave, this way, it is ready for action from the
|
|
51
|
-
# # get go
|
|
52
|
-
# def expand_cloud_if_necessary(force=false)
|
|
53
|
-
# if can_start_a_new_instance? && can_expand_cloud?(force)
|
|
54
|
-
# vputs "Expanding the cloud based on load"
|
|
55
|
-
# @num = 1
|
|
56
|
-
# @num.times do |i|
|
|
57
|
-
# list_of_pending_instances.size == 0 ? request_launch_one_instance_at_a_time : wait("5.seconds")
|
|
58
|
-
# reset!
|
|
59
|
-
# vputs "request_launch_new_instances: #{@num}"
|
|
60
|
-
# provision_slaves_from_n(@num)
|
|
61
|
-
# after_launched
|
|
62
|
-
# end
|
|
63
|
-
# end
|
|
64
|
-
# end
|
|
65
|
-
# # Contract the cloud
|
|
66
|
-
# # If we can shutdown an instnace and the load allows us to contract
|
|
67
|
-
# # the cloud, then we should request_termination_of_non_master_instance
|
|
68
|
-
# def contract_cloud_if_necessary(force=false)
|
|
69
|
-
# if can_shutdown_an_instance? && can_contract_cloud?(force)
|
|
70
|
-
# vputs "Shrinking the cloud by 1"
|
|
71
|
-
# before_shutdown
|
|
72
|
-
# request_termination_of_non_master_instance
|
|
73
|
-
# end
|
|
74
|
-
# end
|
|
75
|
-
#
|
|
76
|
-
# # List calculation methods
|
|
77
|
-
# #
|
|
78
|
-
# # Are the minimum number of instances running?
|
|
79
|
-
# def minimum_number_of_instances_are_running?
|
|
80
|
-
# nodes(:status => "running").size >= minimum_instances.to_i
|
|
81
|
-
# end
|
|
82
|
-
# # Are the minimum number of instances NOT running?
|
|
83
|
-
# def minimum_number_of_instances_are_not_running?
|
|
84
|
-
# !(minimum_number_of_instances_are_running?)
|
|
85
|
-
# end
|
|
86
|
-
# # Can we shutdown an instance?
|
|
87
|
-
# def can_shutdown_an_instance?
|
|
88
|
-
# nodes(:status => "running").size > minimum_instances.to_i
|
|
89
|
-
# end
|
|
90
|
-
|
|
91
|
-
#
|
|
92
|
-
# ########
|
|
93
|
-
# # TODO: deprecate methods below here (only if they are deprecate-able)
|
|
94
|
-
# ########
|
|
95
|
-
#
|
|
96
|
-
# # Request to launch a number of instances
|
|
97
|
-
# def request_launch_new_instances(num=1)
|
|
98
|
-
# out = []
|
|
99
|
-
# num.times {out << launch_new_instance!(options) }
|
|
100
|
-
# out
|
|
101
|
-
# end
|
|
102
|
-
# def request_launch_master_instance
|
|
103
|
-
# @inst = launch_new_instance!
|
|
104
|
-
# wait "5.seconds"
|
|
105
|
-
# when_no_pending_instances do
|
|
106
|
-
# vputs "Master has launched"
|
|
107
|
-
# reset!
|
|
108
|
-
# after_launch_master(@inst)
|
|
109
|
-
# end
|
|
110
|
-
# end
|
|
111
|
-
#
|
|
112
|
-
#
|
|
113
|
-
# def after_launch_master(inst=nil)
|
|
114
|
-
# vputs "After launch master in remoter"
|
|
115
|
-
# end
|
|
116
|
-
# # Let's terminate an instance that is not the master instance
|
|
117
|
-
# def request_termination_of_non_master_instance
|
|
118
|
-
# inst = nonmaster_nonterminated_instances.last
|
|
119
|
-
# terminate_instance!(inst.instance_id) if inst
|
|
120
|
-
# end
|
|
121
|
-
# # Can we start a new instance?
|
|
122
|
-
# def can_start_a_new_instance?
|
|
123
|
-
# maximum_number_of_instances_are_not_running? && list_of_pending_instances.size == 0
|
|
124
|
-
# end
|
|
125
|
-
# # Are the maximum number of instances not running?
|
|
126
|
-
# def maximum_number_of_instances_are_not_running?
|
|
127
|
-
# nodes(:status => "running").size < maximum_instances.to_i
|
|
128
|
-
# end
|
|
129
|
-
# # Are the maximum number of instances running?
|
|
130
|
-
# def maximum_number_of_instances_are_running?
|
|
131
|
-
# nodes(:status => "running").size >= maximum_instances.to_i
|
|
132
|
-
# end
|
|
133
|
-
# # Launch new instance while waiting for the number of pending instances
|
|
134
|
-
# # to be zero before actually launching. This ensures that we only
|
|
135
|
-
# # launch one instance at a time
|
|
136
|
-
# def request_launch_one_instance_at_a_time
|
|
137
|
-
# when_no_pending_instances { launch_new_instance! }
|
|
138
|
-
# end
|
|
139
|
-
#
|
|
140
|
-
# # A convenience method for waiting until all the instances have an ip
|
|
141
|
-
# # assigned to them. This is useful when shifting the ip addresses
|
|
142
|
-
# # around on the instances
|
|
143
|
-
# def when_all_assigned_ips(&block)
|
|
144
|
-
# reset!
|
|
145
|
-
# if list_of_nonterminated_instances.select {|a| a.ip == 'not.assigned' }.empty?
|
|
146
|
-
# block.call if block
|
|
147
|
-
# else
|
|
148
|
-
# vprint "."
|
|
149
|
-
# wait "5.seconds"
|
|
150
|
-
# when_all_assigned_ips(&block)
|
|
151
|
-
# end
|
|
152
|
-
# end
|
|
153
|
-
# def running_instance_ips
|
|
154
|
-
# remote_instances_list.select {|inst|
|
|
155
|
-
# inst.running? and inst.ip!='not.assigned'
|
|
156
|
-
# }.collect{|n| n.ip}
|
|
157
|
-
# end
|
|
158
|
-
#
|
|
159
|
-
# # This will launch the minimum_instances if the minimum number of instances are not running
|
|
160
|
-
# # If the minimum number of instances are not running and if we can start a new instance
|
|
161
|
-
# def launch_minimum_number_of_instances
|
|
162
|
-
# if can_start_a_new_instance? && !minimum_number_of_instances_are_running?
|
|
163
|
-
# list_of_pending_instances.size == 0 ? request_launch_one_instance_at_a_time : wait("5.seconds")
|
|
164
|
-
# reset!
|
|
165
|
-
# launch_minimum_number_of_instances
|
|
166
|
-
# provision_slaves_from_n(minimum_instances.to_i)
|
|
167
|
-
# after_launched
|
|
168
|
-
# end
|
|
169
|
-
# end
|
|
170
|
-
#
|
|
171
|
-
# def provision_slaves_from_n(num=1)
|
|
172
|
-
# vputs "In provision_slaves_from_n: #{num}"
|
|
173
|
-
# reset!
|
|
174
|
-
# when_no_pending_instances do
|
|
175
|
-
# vputs "Waiting for 10 seconds"
|
|
176
|
-
# wait "10.seconds" # Give some time for ssh to startup
|
|
177
|
-
# @num_instances = nodes(:status => "running").size
|
|
178
|
-
# vputs "(@num_instances - (num))..(@num_instances): #{(@num_instances - (num))..(@num_instances)}"
|
|
179
|
-
# last_instances = nonmaster_nonterminated_instances[(@num_instances - (num))..(@num_instances)]
|
|
180
|
-
# last_instances.each do |inst|
|
|
181
|
-
# vputs "Provision slave: #{inst}"
|
|
182
|
-
# verbose ? provisioner_for(inst).install(testing) : hide_output { provisioner_for(inst).install(testing)}
|
|
183
|
-
# end
|
|
184
|
-
# # PoolParty::Provisioner.reconfigure_master(self)
|
|
185
|
-
# end
|
|
186
|
-
# end
|
|
187
14
|
|
|
188
15
|
def list_of_nodes_exceeding_minimum_runtime
|
|
189
16
|
nodes(:status => "running").reject{|i| i.elapsed_runtime < minimum_runtime}
|
|
@@ -192,10 +19,6 @@ module PoolParty
|
|
|
192
19
|
def are_any_nodes_exceeding_minimum_runtime?
|
|
193
20
|
!list_of_nodes_exceeding_minimum_runtime.blank?
|
|
194
21
|
end
|
|
195
|
-
# Is there a node that is running with the name master
|
|
196
|
-
def is_master_running?
|
|
197
|
-
!nodes(:status => "running").select {|a| a.name == "master"}.first.nil?
|
|
198
|
-
end
|
|
199
22
|
|
|
200
23
|
end
|
|
201
24
|
end
|