auser-poolparty 0.1.2 → 0.2.2
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 +22 -0
- data/License.txt +20 -0
- data/README.txt +52 -0
- data/Rakefile +4 -109
- data/bin/cloud +31 -0
- data/bin/cloud-add-keypair +23 -0
- data/bin/cloud-configure +35 -0
- data/bin/cloud-contract +27 -0
- data/bin/cloud-expand +27 -0
- data/bin/cloud-list +32 -0
- data/bin/cloud-maintain +36 -0
- data/bin/cloud-provision +30 -0
- data/bin/cloud-reconfigure +24 -0
- data/bin/cloud-ssh +18 -0
- data/bin/cloud-start +29 -0
- data/bin/pool +23 -75
- data/bin/pool-console +12 -0
- data/bin/pool-describe +9 -0
- data/bin/pool-list +28 -0
- data/bin/pool-provision +34 -0
- data/bin/pool-spec +17 -0
- data/bin/pool-start +32 -0
- data/examples/basic.rb +20 -0
- data/examples/plugin_without_plugin_directory.rb +13 -0
- data/examples/poolparty.rb +12 -0
- data/examples/with_apache_plugin.rb +22 -0
- data/generators/poolspec/USAGE +5 -0
- data/generators/poolspec/poolspec_generator.rb +65 -0
- data/generators/poolspec/templates/pool_spec_template.erb +9 -0
- data/lib/erlang/eb_server.erl +27 -0
- data/lib/poolparty.rb +40 -116
- data/lib/poolparty/base_packages/haproxy.rb +41 -0
- data/lib/poolparty/base_packages/heartbeat.rb +43 -0
- data/lib/poolparty/base_packages/poolparty.rb +18 -0
- data/lib/poolparty/base_packages/ruby.rb +27 -0
- data/lib/poolparty/core/array.rb +24 -0
- data/lib/{core → poolparty/core}/exception.rb +0 -0
- data/lib/{core → poolparty/core}/float.rb +0 -0
- data/lib/poolparty/core/hash.rb +29 -0
- data/lib/poolparty/core/kernel.rb +34 -0
- data/lib/{core → poolparty/core}/module.rb +18 -0
- data/lib/poolparty/core/my_open_struct.rb +18 -0
- data/lib/poolparty/core/object.rb +54 -0
- data/lib/poolparty/core/proc.rb +2 -0
- data/lib/poolparty/core/string.rb +72 -0
- data/lib/poolparty/core/symbol.rb +8 -0
- data/lib/{core → poolparty/core}/time.rb +15 -0
- data/lib/poolparty/exceptions/RemoteException.rb +12 -0
- data/lib/poolparty/exceptions/ResourceException.rb +7 -0
- data/lib/poolparty/exceptions/RuntimeException.rb +7 -0
- data/lib/poolparty/exceptions/SpecException.rb +7 -0
- data/lib/poolparty/exceptions/TemplateNotFound.rb +7 -0
- data/lib/poolparty/helpers/binary.rb +30 -0
- data/lib/poolparty/helpers/console.rb +30 -0
- data/lib/poolparty/helpers/display.rb +25 -0
- data/lib/poolparty/helpers/optioner.rb +61 -0
- data/lib/poolparty/helpers/provisioner_base.rb +226 -0
- data/lib/poolparty/helpers/provisioners/master.rb +120 -0
- data/lib/poolparty/helpers/provisioners/slave.rb +52 -0
- data/lib/poolparty/modules/cloud_resourcer.rb +72 -0
- data/lib/poolparty/modules/configurable.rb +34 -0
- data/lib/poolparty/modules/definable_resource.rb +59 -0
- data/lib/poolparty/modules/file_writer.rb +55 -0
- data/lib/poolparty/modules/method_missing_sugar.rb +17 -0
- data/lib/poolparty/modules/output.rb +13 -0
- data/lib/poolparty/modules/pretty_printer.rb +38 -0
- data/lib/{core/string.rb → poolparty/modules/s3_string.rb} +5 -29
- data/lib/{modules → poolparty/modules}/safe_instance.rb +0 -0
- data/lib/poolparty/monitors/base_monitor.rb +16 -0
- data/lib/poolparty/net/remote.rb +35 -0
- data/lib/poolparty/net/remote_bases/ec2.rb +145 -0
- data/lib/poolparty/net/remote_instance.rb +68 -0
- data/lib/poolparty/net/remoter.rb +209 -0
- data/lib/poolparty/net/remoter_base.rb +117 -0
- data/lib/poolparty/plugins/gem_package.rb +39 -0
- data/lib/poolparty/plugins/line.rb +76 -0
- data/lib/poolparty/plugins/svn.rb +48 -0
- data/lib/poolparty/pool/base.rb +74 -0
- data/lib/poolparty/pool/cloud.rb +132 -0
- data/lib/poolparty/pool/custom_resource.rb +61 -0
- data/lib/poolparty/pool/loggable.rb +29 -0
- data/lib/poolparty/pool/plugin.rb +42 -0
- data/lib/poolparty/pool/plugin_model.rb +48 -0
- data/lib/poolparty/pool/pool.rb +55 -0
- data/lib/poolparty/pool/resource.rb +235 -0
- data/lib/poolparty/pool/resources/class_package.rb +60 -0
- data/lib/poolparty/pool/resources/cron.rb +14 -0
- data/lib/poolparty/pool/resources/directory.rb +23 -0
- data/lib/poolparty/pool/resources/exec.rb +26 -0
- data/lib/poolparty/pool/resources/file.rb +23 -0
- data/lib/poolparty/pool/resources/gem.rb +14 -0
- data/lib/poolparty/pool/resources/host.rb +14 -0
- data/lib/poolparty/pool/resources/package.rb +14 -0
- data/lib/poolparty/pool/resources/remote_file.rb +20 -0
- data/lib/poolparty/pool/resources/service.rb +21 -0
- data/lib/poolparty/pool/resources/sshkey.rb +19 -0
- data/lib/poolparty/pool/resources/variable.rb +27 -0
- data/lib/poolparty/pool/script.rb +21 -0
- data/{config/heartbeat_authkeys.conf → lib/poolparty/templates/authkeys} +0 -0
- data/lib/poolparty/templates/cib.xml +1 -0
- data/lib/poolparty/templates/fileserver.conf +4 -0
- data/{config/heartbeat.conf → lib/poolparty/templates/ha.cf} +3 -1
- data/{config → lib/poolparty/templates}/haproxy.conf +13 -6
- data/lib/poolparty/templates/namespaceauth.conf +19 -0
- data/lib/poolparty/templates/puppet.conf +13 -0
- data/lib/poolparty/version.rb +9 -0
- data/lib/poolpartycl.rb +3 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +82 -0
- data/{lib/poolparty/tasks → tasks}/cloud.rake +1 -1
- data/tasks/deployment.rake +34 -0
- data/tasks/development.rake +78 -0
- data/{lib/poolparty/tasks → tasks}/ec2.rake +1 -1
- data/tasks/environment.rake +7 -0
- data/{lib/poolparty/tasks → tasks}/instance.rake +0 -0
- data/{lib/poolparty/tasks → tasks}/server.rake +0 -0
- data/tasks/spec.rake +17 -0
- data/tasks/website.rake +17 -0
- metadata +154 -249
- data/CHANGELOG +0 -23
- data/LICENSE +0 -22
- data/README +0 -139
- data/assets/clouds.png +0 -0
- data/bin/instance +0 -68
- data/bin/poolnotify +0 -34
- data/config/cloud_master_takeover +0 -17
- data/config/create_proxy_ami.sh +0 -582
- data/config/installers/ubuntu_install.sh +0 -77
- data/config/monit.conf +0 -9
- data/config/monit/haproxy.monit.conf +0 -8
- data/config/monit/nginx.monit.conf +0 -0
- data/config/nginx.conf +0 -24
- data/config/reconfigure_instances_script.sh +0 -37
- data/config/sample-config.yml +0 -23
- data/config/scp_instances_script.sh +0 -12
- data/lib/core/array.rb +0 -16
- data/lib/core/hash.rb +0 -11
- data/lib/core/kernel.rb +0 -12
- data/lib/core/object.rb +0 -21
- data/lib/core/proc.rb +0 -15
- data/lib/helpers/plugin_spec_helper.rb +0 -58
- data/lib/modules/callback.rb +0 -133
- data/lib/modules/ec2_wrapper.rb +0 -108
- data/lib/modules/file_writer.rb +0 -38
- data/lib/modules/sprinkle_overrides.rb +0 -27
- data/lib/modules/vlad_override.rb +0 -83
- data/lib/poolparty/application.rb +0 -199
- data/lib/poolparty/init.rb +0 -6
- data/lib/poolparty/master.rb +0 -492
- data/lib/poolparty/monitors.rb +0 -11
- data/lib/poolparty/monitors/cpu.rb +0 -23
- data/lib/poolparty/monitors/memory.rb +0 -33
- data/lib/poolparty/monitors/web.rb +0 -29
- data/lib/poolparty/optioner.rb +0 -20
- data/lib/poolparty/plugin.rb +0 -78
- data/lib/poolparty/provider.rb +0 -104
- data/lib/poolparty/provider/essential.rb +0 -6
- data/lib/poolparty/provider/git.rb +0 -8
- data/lib/poolparty/provider/haproxy.rb +0 -9
- data/lib/poolparty/provider/heartbeat.rb +0 -6
- data/lib/poolparty/provider/rsync.rb +0 -8
- data/lib/poolparty/provider/ruby.rb +0 -65
- data/lib/poolparty/provider/s3fuse.rb +0 -22
- data/lib/poolparty/remote_instance.rb +0 -250
- data/lib/poolparty/remoter.rb +0 -171
- data/lib/poolparty/remoting.rb +0 -137
- data/lib/poolparty/scheduler.rb +0 -93
- data/lib/poolparty/tasks.rb +0 -47
- data/lib/poolparty/tasks/development.rake +0 -78
- data/lib/poolparty/tasks/plugins.rake +0 -30
- data/lib/poolparty/thread_pool.rb +0 -94
- data/lib/s3/s3_object_store_folders.rb +0 -44
- data/poolparty.gemspec +0 -71
- data/spec/files/describe_response +0 -37
- data/spec/files/multi_describe_response +0 -69
- data/spec/files/remote_desc_response +0 -37
- data/spec/helpers/ec2_mock.rb +0 -57
- data/spec/lib/core/core_spec.rb +0 -26
- data/spec/lib/core/kernel_spec.rb +0 -24
- data/spec/lib/core/string_spec.rb +0 -28
- data/spec/lib/modules/callback_spec.rb +0 -213
- data/spec/lib/modules/file_writer_spec.rb +0 -74
- data/spec/lib/poolparty/application_spec.rb +0 -135
- data/spec/lib/poolparty/ec2_wrapper_spec.rb +0 -110
- data/spec/lib/poolparty/master_spec.rb +0 -479
- data/spec/lib/poolparty/optioner_spec.rb +0 -34
- data/spec/lib/poolparty/plugin_spec.rb +0 -115
- data/spec/lib/poolparty/poolparty_spec.rb +0 -60
- data/spec/lib/poolparty/provider_spec.rb +0 -74
- data/spec/lib/poolparty/remote_instance_spec.rb +0 -178
- data/spec/lib/poolparty/remoter_spec.rb +0 -72
- data/spec/lib/poolparty/remoting_spec.rb +0 -148
- data/spec/lib/poolparty/scheduler_spec.rb +0 -70
- data/spec/monitors/cpu_monitor_spec.rb +0 -39
- data/spec/monitors/memory_spec.rb +0 -51
- data/spec/monitors/misc_monitor_spec.rb +0 -51
- data/spec/monitors/web_spec.rb +0 -40
- data/spec/spec_helper.rb +0 -53
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
require "poolparty"
|
|
4
|
+
require "poolpartycl"
|
|
5
|
+
|
|
6
|
+
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
7
|
+
opts.on('-n name', '--name name', 'Listing for cloud name') { |c| optioner.cloudname c }
|
|
8
|
+
end
|
|
9
|
+
load_pool(o.spec || Binary.get_existing_spec_location)
|
|
10
|
+
|
|
11
|
+
@provision_class = o.provision_class || "all"
|
|
12
|
+
|
|
13
|
+
include Remote
|
|
14
|
+
|
|
15
|
+
@clouds = o.cloudname ? {:cloud => cloud(o.cloudname.downcase.to_sym)} : clouds
|
|
16
|
+
|
|
17
|
+
@clouds.each do |name, cloud|
|
|
18
|
+
|
|
19
|
+
with_cloud(cloud, {:testing => o.testing}) do
|
|
20
|
+
cmd = "puppetca --clean --all && puppetrun --host puppet #{list_of_node_names.join(", --host ")}"
|
|
21
|
+
run_command_on(cmd, master)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
data/bin/cloud-ssh
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
require "poolparty"
|
|
4
|
+
require "poolpartycl"
|
|
5
|
+
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
6
|
+
opts.on('-n name', '--name name', 'Listing for cloud name') { |c| optioner.cloudname c }
|
|
7
|
+
opts.on('-i num', '--id num', 'Instance num to ssh (default: 0)') { |i| optioner.num i }
|
|
8
|
+
end
|
|
9
|
+
load_pool(o.spec || Binary.get_existing_spec_location)
|
|
10
|
+
|
|
11
|
+
unless o.cloudname && clouds.keys.size > 1
|
|
12
|
+
@cloud = cloud(o.cloudname.downcase.to_sym)
|
|
13
|
+
else
|
|
14
|
+
puts "Error: You must indicate a cloud from which your instance is from"
|
|
15
|
+
exit(0)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
instance = @cloud.ssh_into_instance_number( o.num.to_i || 0 )
|
data/bin/cloud-start
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
require "poolparty"
|
|
4
|
+
require "poolpartycl"
|
|
5
|
+
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
6
|
+
opts.on('-c cloudname', '--cloud name', 'Start cloud by this name') { |c| optioner.cloudname c }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
load_pool(o.spec || Binary.get_existing_spec_location)
|
|
10
|
+
|
|
11
|
+
@testing = o.testing
|
|
12
|
+
|
|
13
|
+
include Remote
|
|
14
|
+
|
|
15
|
+
if o.cloudname
|
|
16
|
+
@cloud = cloud(o.cloudname.downcase.to_sym)
|
|
17
|
+
else
|
|
18
|
+
puts "Cloud name or pool name required. Please specify it with -c name"
|
|
19
|
+
exit(0)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
with_cloud(@cloud, {:testing => @testing}) do
|
|
23
|
+
puts header("Starting cloud")
|
|
24
|
+
puts "#{list_of_running_instances.size} running instances (#{minimum_instances} - #{maximum_instances})"
|
|
25
|
+
if (minimum_instances - list_of_running_instances.size) > 0
|
|
26
|
+
puts "Starting #{minimum_instances - list_of_running_instances.size} instances"
|
|
27
|
+
testing ? puts("\tNot launching while in testing mode") : launch_minimum_number_of_instances
|
|
28
|
+
end
|
|
29
|
+
end
|
data/bin/pool
CHANGED
|
@@ -1,83 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/ruby
|
|
2
|
-
$:.unshift(File.join(File.dirname(__FILE__)))
|
|
3
|
-
require
|
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
require "poolparty"
|
|
4
|
+
require "poolpartycl"
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Minimum instances: #{PoolParty::Application.minimum_instances}
|
|
10
|
-
Maximum instances: #{PoolParty::Application.maximum_instances}
|
|
11
|
-
Polling every: #{PoolParty::Application.polling_time}
|
|
12
|
-
Keypair: #{PoolParty::Application.keypair}
|
|
13
|
-
Access key: #{PoolParty::Application.access_key}
|
|
14
|
-
size: #{PoolParty::Application.size}
|
|
15
|
-
Monitors available:
|
|
16
|
-
--------------
|
|
17
|
-
#{PoolParty.registered_monitors.collect {|a| " #{a}"}}
|
|
18
|
-
|
|
19
|
-
Plugins:
|
|
20
|
-
--------------
|
|
21
|
-
#{Dir["#{PoolParty::Application.plugin_dir}/*"].collect {|a| " #{File.basename(a)}"}.join("\n")}
|
|
6
|
+
# Get the git-style program action
|
|
7
|
+
# o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
8
|
+
# opts.on('-n [name]','--name [name]', 'Binary to run') { |o| optioner.name o }
|
|
9
|
+
# end
|
|
22
10
|
|
|
23
|
-
|
|
24
|
-
end
|
|
11
|
+
name = ARGV.shift
|
|
25
12
|
|
|
26
|
-
#
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
13
|
+
# If there was no program action given
|
|
14
|
+
if !name || name == "-h" || name == "--help"
|
|
15
|
+
puts "Usage: pool <specfile> <action> <options>"
|
|
16
|
+
puts "Pool actions:"
|
|
17
|
+
puts Binary.list_binaries_for("pool")
|
|
18
|
+
exit
|
|
19
|
+
end
|
|
33
20
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
list = PoolParty::Optioner.parse(ARGV.dup, %w(-v))
|
|
21
|
+
program_name = "#{File.basename($0)}-#{name}"
|
|
22
|
+
program_location = File.join(Binary.binary_directory, program_name)
|
|
37
23
|
|
|
38
|
-
|
|
24
|
+
command_line = "#{program_location} #{ARGV.join(" ")}"
|
|
39
25
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
display_config_data
|
|
46
|
-
when "grow"
|
|
47
|
-
master.grow_by
|
|
48
|
-
when "shrink"
|
|
49
|
-
master.shrink_by
|
|
50
|
-
when "install"
|
|
51
|
-
master.install_cloud(true)
|
|
52
|
-
when "configure"
|
|
53
|
-
master.setup_cloud
|
|
54
|
-
when "ssh"
|
|
55
|
-
list.shift
|
|
56
|
-
PoolParty.message "Running #{list} on the cloud"
|
|
57
|
-
master.ssh list.shift
|
|
58
|
-
when "stop"
|
|
59
|
-
PoolParty.message "Stopping cloud"
|
|
60
|
-
master.request_termination_of_all_instances
|
|
61
|
-
when "list"
|
|
62
|
-
puts master.list
|
|
63
|
-
when "size"
|
|
64
|
-
puts master.nodes.size
|
|
65
|
-
when "clouds_list"
|
|
66
|
-
puts master.clouds_list
|
|
67
|
-
when "maintain"
|
|
68
|
-
PoolParty.message "Maintaining cloud"
|
|
69
|
-
master.start_monitor!
|
|
70
|
-
when "restart"
|
|
71
|
-
PoolParty.message "Restarting cloud"
|
|
72
|
-
master.request_termination_of_all_instances
|
|
73
|
-
master.start_cloud!
|
|
74
|
-
when "switch"
|
|
75
|
-
list.shift
|
|
76
|
-
context = list.shift
|
|
77
|
-
keyfilename = ".#{context}_pool_keys"
|
|
78
|
-
PoolParty.message "switching cloud to #{context}"
|
|
79
|
-
context ? Kernel.system("source $HOME/#{keyfilename}") : puts("You must supply a context to switch to")
|
|
80
|
-
else
|
|
81
|
-
puts master.list
|
|
82
|
-
end
|
|
26
|
+
# Run it from the command-line first
|
|
27
|
+
if Binary.available_binaries_for("pool").include?(name)
|
|
28
|
+
Kernel.exec "#{command_line}"
|
|
29
|
+
else
|
|
30
|
+
puts "Unknown poolparty binary: #{program_name}"
|
|
83
31
|
end
|
data/bin/pool-console
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# File: script/console
|
|
3
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
|
4
|
+
|
|
5
|
+
libs = " -r irb/completion"
|
|
6
|
+
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
|
7
|
+
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
|
8
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/poolparty.rb'}"
|
|
9
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/poolpartycl.rb'}"
|
|
10
|
+
puts "Loading PoolParty console..."
|
|
11
|
+
|
|
12
|
+
exec "#{irb} #{libs} --simple-prompt"
|
data/bin/pool-describe
ADDED
data/bin/pool-list
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
require "poolparty"
|
|
4
|
+
require "poolpartycl"
|
|
5
|
+
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
6
|
+
opts.on('-f [remote|local]', '--from [remote|local]', 'Remote or local (default: local)') { |o| optioner.location o }
|
|
7
|
+
opts.on('-r', '--remote', 'Remote listing') { optioner.location "remote" }
|
|
8
|
+
opts.on('-l', '--local', 'Local listing') { optioner.location "local" }
|
|
9
|
+
opts.on('-n name', '--name name', 'Listing for pool name') { |p| optioner.poolname p }
|
|
10
|
+
end
|
|
11
|
+
load_pool(o.spec || Binary.get_existing_spec_location)
|
|
12
|
+
|
|
13
|
+
@location = o.location ? o.location : "remote"
|
|
14
|
+
|
|
15
|
+
include Remote
|
|
16
|
+
|
|
17
|
+
@pools = o.poolname ? [pool(o.poolname.downcase.to_sym)] : pools
|
|
18
|
+
|
|
19
|
+
@pools.each do |name, pool|
|
|
20
|
+
with_pool(pool, {:location => @location}) do
|
|
21
|
+
puts header("Listing pool #{name}")
|
|
22
|
+
clouds.each do |name, cloud|
|
|
23
|
+
puts subheader("Cloud: #{name}")
|
|
24
|
+
out = location == "remote" ? cloud.list_from_remote({:cache => true}).map{|a| a.to_s} : cloud.list_from_local.map{|a| a.to_s}
|
|
25
|
+
puts out
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/bin/pool-provision
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
# require "poolparty"
|
|
4
|
+
# require "poolpartycl"
|
|
5
|
+
#
|
|
6
|
+
# o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
7
|
+
# opts.on('-t', '--type [master|slave|all]', 'Provision these instances (default: all)') { |o| optioner.class_type o }
|
|
8
|
+
# opts.on('-a', '--all', 'Provision all the instances') { |o| optioner.all true }
|
|
9
|
+
# opts.on('-n [name]', '--name [name]', 'Pool to provision (required)') {|o| optioner.cloud_name o }
|
|
10
|
+
# end
|
|
11
|
+
# load_pool(o.spec || Binary.get_existing_spec_location)
|
|
12
|
+
#
|
|
13
|
+
# if o.cloud_name
|
|
14
|
+
# @c = cloud(o.cloud_name.downcase.to_sym)
|
|
15
|
+
# else
|
|
16
|
+
# puts "Cloud name required. Please specify it with -c [name]"
|
|
17
|
+
# exit(0)
|
|
18
|
+
# end
|
|
19
|
+
#
|
|
20
|
+
# if o.class_type && o.class_type != "all" && !o.all
|
|
21
|
+
# case o.class_type
|
|
22
|
+
# when "master","m"
|
|
23
|
+
# puts header("Provisioning the master instances")
|
|
24
|
+
# when "slave", "s"
|
|
25
|
+
# puts header("Provisioning the slave instances")
|
|
26
|
+
# end
|
|
27
|
+
# else
|
|
28
|
+
# # Provision all the instances
|
|
29
|
+
# puts header("Provisioning all the instances")
|
|
30
|
+
# provisioner_file = ::File.join(Base.storage_directory, "install.sh")
|
|
31
|
+
# File.open(provisioner_file, "w+") do |file|
|
|
32
|
+
# file << Provisioner::Master.install(@c)
|
|
33
|
+
# end
|
|
34
|
+
# end
|
data/bin/pool-spec
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'rubigen'
|
|
5
|
+
|
|
6
|
+
if %w(-v --version).include? ARGV.first
|
|
7
|
+
require 'poolspec/version'
|
|
8
|
+
puts "#{File.basename($0)} #{Poolspec::VERSION::STRING}"
|
|
9
|
+
exit(0)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
require 'rubigen/scripts/generate'
|
|
13
|
+
source = RubiGen::PathSource.new(:application,
|
|
14
|
+
File.join(File.dirname(__FILE__), "../generators"))
|
|
15
|
+
RubiGen::Base.reset_sources
|
|
16
|
+
RubiGen::Base.append_sources source
|
|
17
|
+
RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'poolspec')
|
data/bin/pool-start
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
3
|
+
require "poolparty"
|
|
4
|
+
require "poolpartycl"
|
|
5
|
+
o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
|
|
6
|
+
opts.on('-p poolname', '--pool name', 'Start pool by this name') { |p| optioner.poolname p }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
load_pool(o.spec || Binary.get_existing_spec_location)
|
|
10
|
+
|
|
11
|
+
@testing = o.testing
|
|
12
|
+
|
|
13
|
+
include Remote
|
|
14
|
+
|
|
15
|
+
if o.poolname
|
|
16
|
+
@pool = pool(o.poolname.downcase.to_sym)
|
|
17
|
+
else
|
|
18
|
+
puts "Pool name required. Please specify it with -c name"
|
|
19
|
+
exit(0)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
with_pool(@pool, {:testing => @testing}) do
|
|
23
|
+
puts header("Starting pool")
|
|
24
|
+
clouds.each do |name, cloud|
|
|
25
|
+
puts subheader("Cloud: #{name}")
|
|
26
|
+
puts "#{cloud.list_of_running_instances.size} running instances (#{cloud.minimum_instances} - #{cloud.maximum_instances})"
|
|
27
|
+
if (cloud.minimum_instances - cloud.list_of_running_instances.size) > 0
|
|
28
|
+
puts "Starting #{cloud.minimum_instances - cloud.list_of_running_instances.size} instances (from #{cloud.keypair})"
|
|
29
|
+
testing ? puts("\tNot launching while in testing mode") : cloud.launch_minimum_number_of_instances
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/examples/basic.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Basic pool spec
|
|
2
|
+
# Shows global settings for the clouds
|
|
3
|
+
|
|
4
|
+
pool :application do
|
|
5
|
+
|
|
6
|
+
instances 3..5
|
|
7
|
+
keypair "auser"
|
|
8
|
+
|
|
9
|
+
cloud :app do
|
|
10
|
+
minimum_instances 2
|
|
11
|
+
ami "ami-abc123"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
cloud :db do
|
|
15
|
+
keypair "hotstuff_database"
|
|
16
|
+
maximum_instances 20
|
|
17
|
+
ami "ami-1234bc"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
+
|
|
3
|
+
pool :app do
|
|
4
|
+
|
|
5
|
+
plugin_directory File.join(File.dirname(__FILE__), "pool", "test_plugins")
|
|
6
|
+
instances 2..10
|
|
7
|
+
|
|
8
|
+
cloud :app do
|
|
9
|
+
# minimum 2 instances
|
|
10
|
+
# maximum 10 instances
|
|
11
|
+
apache do
|
|
12
|
+
enable_php
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
cloud :db do
|
|
17
|
+
# minimum 2 instances
|
|
18
|
+
# maximum 10 instances
|
|
19
|
+
mysql # default mysql setup
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
class PoolspecGenerator < RubiGen::Base
|
|
2
|
+
|
|
3
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
|
4
|
+
Config::CONFIG['ruby_install_name'])
|
|
5
|
+
|
|
6
|
+
default_options :author => nil
|
|
7
|
+
|
|
8
|
+
attr_reader :name
|
|
9
|
+
|
|
10
|
+
def initialize(runtime_args, runtime_options = {})
|
|
11
|
+
super
|
|
12
|
+
usage if args.empty?
|
|
13
|
+
@destination_root = File.expand_path(args.shift)
|
|
14
|
+
@name = base_name
|
|
15
|
+
extract_options
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def manifest
|
|
19
|
+
record do |m|
|
|
20
|
+
# Ensure appropriate folder(s) exists
|
|
21
|
+
m.directory ''
|
|
22
|
+
BASEDIRS.each { |path| m.directory path }
|
|
23
|
+
|
|
24
|
+
m.template "pool_spec_template.erb", "#{@name}.rb"
|
|
25
|
+
# Create stubs
|
|
26
|
+
# m.template "template.rb", "some_file_after_erb.rb"
|
|
27
|
+
# m.template_copy_each ["template.rb", "template2.rb"]
|
|
28
|
+
# m.file "file", "some_file_copied"
|
|
29
|
+
# m.file_copy_each ["path/to/file", "path/to/file2"]
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
protected
|
|
34
|
+
def banner
|
|
35
|
+
<<-EOS
|
|
36
|
+
Creates a basic poolparty spec tempalte
|
|
37
|
+
|
|
38
|
+
USAGE: #{spec.name} name
|
|
39
|
+
EOS
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def add_options!(opts)
|
|
43
|
+
opts.separator ''
|
|
44
|
+
opts.separator 'Options:'
|
|
45
|
+
# For each option below, place the default
|
|
46
|
+
# at the top of the file next to "default_options"
|
|
47
|
+
# opts.on("-a", "--author=\"Your Name\"", String,
|
|
48
|
+
# "Some comment about this option",
|
|
49
|
+
# "Default: none") { |options[:author]| }
|
|
50
|
+
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def extract_options
|
|
54
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
|
55
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
|
56
|
+
# raw instance variable value.
|
|
57
|
+
# @author = options[:author]
|
|
58
|
+
@pool_name = ARGV.pop
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Installation skeleton. Intermediate directories are automatically
|
|
62
|
+
# created so don't sweat their absence here.
|
|
63
|
+
BASEDIRS = %w(
|
|
64
|
+
)
|
|
65
|
+
end
|