auser-poolparty 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/CHANGELOG +8 -0
  2. data/README.txt +10 -10
  3. data/Rakefile +30 -21
  4. data/{web/static/site/images → assets}/clouds.png +0 -0
  5. data/bin/instance +39 -34
  6. data/bin/pool +44 -29
  7. data/bin/poolnotify +34 -0
  8. data/config/haproxy.conf +1 -1
  9. data/config/heartbeat_authkeys.conf +1 -1
  10. data/config/monit/haproxy.monit.conf +2 -1
  11. data/config/nginx.conf +1 -1
  12. data/config/reconfigure_instances_script.sh +28 -9
  13. data/config/sample-config.yml +1 -1
  14. data/lib/core/string.rb +3 -0
  15. data/lib/modules/ec2_wrapper.rb +47 -22
  16. data/lib/modules/file_writer.rb +38 -0
  17. data/lib/modules/sprinkle_overrides.rb +32 -0
  18. data/lib/modules/vlad_override.rb +5 -4
  19. data/lib/poolparty.rb +14 -10
  20. data/lib/poolparty/application.rb +33 -19
  21. data/lib/poolparty/master.rb +227 -105
  22. data/lib/poolparty/optioner.rb +8 -4
  23. data/lib/poolparty/plugin.rb +34 -4
  24. data/lib/poolparty/provider/packages/haproxy.rb +0 -15
  25. data/lib/poolparty/provider/packages/heartbeat.rb +1 -1
  26. data/lib/poolparty/provider/packages/ruby.rb +6 -6
  27. data/lib/poolparty/provider/packages/s3fuse.rb +9 -2
  28. data/lib/poolparty/provider/provider.rb +65 -25
  29. data/lib/poolparty/remote_instance.rb +95 -74
  30. data/lib/poolparty/remoter.rb +48 -37
  31. data/lib/poolparty/remoting.rb +41 -17
  32. data/lib/poolparty/scheduler.rb +4 -4
  33. data/lib/poolparty/tasks.rb +1 -1
  34. data/lib/poolparty/tasks/package.rake +53 -0
  35. data/lib/poolparty/tasks/plugins.rake +1 -1
  36. data/poolparty.gemspec +50 -58
  37. data/spec/application_spec.rb +28 -0
  38. data/spec/core_spec.rb +9 -0
  39. data/spec/ec2_wrapper_spec.rb +87 -0
  40. data/spec/file_writer_spec.rb +73 -0
  41. data/spec/files/describe_response +37 -0
  42. data/spec/files/multi_describe_response +69 -0
  43. data/spec/files/remote_desc_response +37 -0
  44. data/spec/helpers/ec2_mock.rb +3 -0
  45. data/spec/master_spec.rb +302 -78
  46. data/spec/monitors/cpu_monitor_spec.rb +2 -1
  47. data/spec/monitors/memory_spec.rb +1 -0
  48. data/spec/monitors/misc_monitor_spec.rb +1 -0
  49. data/spec/monitors/web_spec.rb +1 -0
  50. data/spec/optioner_spec.rb +12 -0
  51. data/spec/plugin_manager_spec.rb +10 -10
  52. data/spec/plugin_spec.rb +6 -3
  53. data/spec/pool_binary_spec.rb +3 -0
  54. data/spec/poolparty_spec.rb +12 -7
  55. data/spec/provider_spec.rb +1 -0
  56. data/spec/remote_instance_spec.rb +18 -18
  57. data/spec/remoter_spec.rb +4 -2
  58. data/spec/remoting_spec.rb +10 -2
  59. data/spec/scheduler_spec.rb +0 -6
  60. data/spec/spec_helper.rb +13 -0
  61. metadata +83 -52
  62. data/Manifest +0 -115
  63. data/lib/poolparty/tmp.rb +0 -46
  64. data/misc/basics_tutorial.txt +0 -142
  65. data/web/static/conf/nginx.conf +0 -22
  66. data/web/static/site/images/balloon.png +0 -0
  67. data/web/static/site/images/cb.png +0 -0
  68. data/web/static/site/images/railsconf_preso_img.png +0 -0
  69. data/web/static/site/index.html +0 -71
  70. data/web/static/site/javascripts/application.js +0 -3
  71. data/web/static/site/javascripts/corner.js +0 -178
  72. data/web/static/site/javascripts/jquery-1.2.6.pack.js +0 -11
  73. data/web/static/site/misc.html +0 -42
  74. data/web/static/site/storage/pool_party_presentation.pdf +0 -0
  75. data/web/static/site/stylesheets/application.css +0 -100
  76. data/web/static/site/stylesheets/reset.css +0 -17
  77. data/web/static/src/layouts/application.haml +0 -25
  78. data/web/static/src/pages/index.haml +0 -25
  79. data/web/static/src/pages/misc.haml +0 -5
  80. data/web/static/src/stylesheets/application.sass +0 -100
@@ -7,32 +7,44 @@ module PoolParty
7
7
  def ssh_string
8
8
  "ssh -i #{Application.keypair_path} -o StrictHostKeyChecking=no -l #{Application.username}"
9
9
  end
10
+ def rsync_string
11
+ "rsync --delete -azP -e '#{ssh_string}' "
12
+ end
10
13
  end
11
14
 
12
15
  module InstanceMethods
13
16
  include Callbacks
14
17
  include Scheduler
15
18
 
16
- def scp local, remote, opts={}
17
- data = open(local).read
18
- begin
19
-
20
- cmd = "rsync --delete -azP -e '#{self.class.ssh_string} -l #{Application.username} -i #{Application.keypair_path}' "
21
-
22
- if opts[:dir]
23
- ssh("mkdir -p #{opts[:dir]}")
19
+ def rsync_tasks local, remote
20
+ reset!
21
+ returning scp_tasks do |tasks|
22
+ target_hosts.each do |ip|
23
+ tasks << "#{self.class.rsync_string} #{local} #{ip}:#{remote}"
24
24
  end
25
-
26
- if opts[:single]
27
- scp_tasks << "#{cmd} #{local} #{Application.username}@#{opts[:single]}:#{remote}"
28
- else
29
- target_hosts.each do |ip|
30
- scp_tasks << "#{cmd} #{local} #{Application.username}@#{ip}:#{remote}"
31
- end
25
+ end
26
+ end
27
+
28
+ def remote_command_tasks commands
29
+ reset!
30
+ commands = commands.join ' && ' if commands.is_a? Array
31
+
32
+ returning ssh_tasks do |tasks|
33
+ target_hosts.each do |ip|
34
+ ssh_tasks << "#{self.class.ssh_string} #{ip} '#{commands}'"
32
35
  end
33
-
34
- rescue Exception => e
35
- end
36
+ end
37
+ end
38
+
39
+ def scp local, remote, opts={}
40
+ cmd = self.class.rsync_string
41
+ arr = []
42
+
43
+ target_hosts.each do |ip|
44
+ arr << "#{cmd} #{local} #{ip}:#{remote}"
45
+ end
46
+
47
+ run_array_of_tasks(arr)
36
48
  end
37
49
 
38
50
  def single_scp local, remote, opts={}
@@ -41,30 +53,27 @@ module PoolParty
41
53
 
42
54
  def ssh command="", opts={}, &block
43
55
  cmd = self.class.ssh_string
56
+ arr = []
57
+
44
58
  if command.empty?
45
- system("#{cmd} #{Application.username}@#{self.ip}")
59
+ system("#{cmd} #{self.ip}") if self.class == RemoteInstance
46
60
  else
47
- if opts[:single]
48
- ssh_tasks << "#{cmd} #{Application.username}@#{self.ip} '#{command.runnable}'"
49
- else
50
- target_hosts.each do |ip|
51
- ssh_tasks << "#{cmd} #{Application.username}@#{ip} '#{command.runnable}'"
52
- end
61
+ target_hosts.each do |ip|
62
+ arr << "#{cmd} #{ip} '#{command.runnable}'"
53
63
  end
54
64
  end
65
+
66
+ run_array_of_tasks arr
55
67
  end
56
68
 
57
- def run_now command=""
58
- system("#{self.class.ssh_string} #{Application.username}@#{self.ip} #{command.runnable}")
59
- end
60
-
61
- def install *names
62
- names.each {|name| install_tasks << name }
69
+ def run_now command
70
+ unless command.empty?
71
+ Kernel.system "#{self.class.ssh_string} #{self.ip} #{command.runnable}"
72
+ end
63
73
  end
64
-
74
+
65
75
  def ssh_tasks;@ssh_tasks ||= [];end
66
76
  def scp_tasks;@scp_tasks ||= [];end
67
- def install_tasks;@install_tasks ||= [];end
68
77
 
69
78
  def reset!
70
79
  @ssh_tasks = @scp_tasks = nil
@@ -80,8 +89,6 @@ module PoolParty
80
89
 
81
90
  run_array_of_tasks(scp_tasks)
82
91
  run_array_of_tasks(ssh_tasks)
83
-
84
- PoolParty.message "running #{ssh_tasks.size} tasks"
85
92
  end
86
93
 
87
94
  def target_hosts
@@ -89,8 +96,12 @@ module PoolParty
89
96
  end
90
97
 
91
98
  def run_array_of_tasks(task_list)
92
- add_task {`#{task_list.join(" && ")}`}
93
- run_thread_list
99
+ unless task_list.size == 0
100
+ task_list.each do |task|
101
+ add_task {Kernel.system("#{task}")}
102
+ end
103
+ run_thread_list
104
+ end
94
105
  end
95
106
 
96
107
  def set_hosts(c=nil)
@@ -9,36 +9,60 @@ module PoolParty
9
9
  # == GENERAL METHODS
10
10
  # == LISTING
11
11
  # List all the running instances associated with this account
12
- def list_of_running_instances
13
- list_of_nonterminated_instances.select {|a| a[:status] =~ /running/}
12
+ def list_of_running_instances(list = list_of_nonterminated_instances)
13
+ list.select {|a| a[:status] =~ /running/}
14
14
  end
15
15
  # Get a list of the pending instances
16
- def list_of_pending_instances
17
- list_of_nonterminated_instances.select {|a| a[:status] =~ /pending/}
16
+ def list_of_pending_instances(list = list_of_nonterminated_instances)
17
+ list.select {|a| a[:status] =~ /pending/}
18
18
  end
19
19
  # list of shutting down instances
20
- def list_of_terminating_instances
21
- list_of_nonterminated_instances.select {|a| a[:status] =~ /shutting/}
20
+ def list_of_terminating_instances(list = list_of_nonterminated_instances)
21
+ list.select {|a| a[:status] =~ /shutting/}
22
22
  end
23
23
  # list all the nonterminated instances
24
- def list_of_nonterminated_instances
25
- list_of_instances.reject {|a| a[:status] =~ /terminated/}
24
+ def list_of_nonterminated_instances(list = list_of_instances)
25
+ list.reject {|a| a[:status] =~ /terminated/}
26
26
  end
27
- # List the instances, regardless of their states
28
- def list_of_instances
29
- get_instances_description
27
+ # List the instances for the current key pair, regardless of their states
28
+ def list_of_instances(keypair = Application.keypair)
29
+ get_instances_description.select {|a| a[:keypair] == keypair}
30
+ end
31
+ # List all instances, regardless of their key pairs or states
32
+ def list_of_all_instances
33
+ a_list = []
34
+ cloud_keypairs.each {|keypair| list_of_instances(keypair).each { |inst| a_list << inst } }
35
+ a_list
36
+ end
37
+ # list of keypairs for the current AWS access key and secret key
38
+ def cloud_keypairs
39
+ instances = get_instances_description.sort{|x,y| x[:keypair] <=> y[:keypair]}
40
+ keypair = nil
41
+ instances.map {|a| keypair != a[:keypair] ? (keypair = a[:keypair]; keypair) : nil }.compact
30
42
  end
31
43
  # Get number of pending instances
32
- def number_of_pending_instances
33
- list_of_pending_instances.size
44
+ def number_of_pending_instances(list = list_of_pending_instances)
45
+ list.size
34
46
  end
35
47
  # get the number of running instances
36
- def number_of_running_instances
37
- list_of_running_instances.size
48
+ def number_of_running_instances(list = list_of_running_instances)
49
+ list.size
50
+ end
51
+ # get the number of pending and running instances for a list
52
+ def number_of_pending_and_running_instances_for_list(a_list = list_of_instances)
53
+ running_list = list_of_running_instances( a_list )
54
+ pending_list = list_of_pending_instances( a_list )
55
+ number_of_running_instances(running_list) + number_of_pending_instances(pending_list)
56
+ end
57
+ # get the number of pending and running instances for a keypair
58
+ def number_of_pending_and_running_instances(keypair = Application.keypair)
59
+ a_list = list_of_nonterminated_instances( list_of_instances(keypair) )
60
+ number_of_pending_and_running_instances_for_list( a_list )
38
61
  end
39
62
  # get the number of pending and running instances
40
- def number_of_pending_and_running_instances
41
- number_of_running_instances + number_of_pending_instances
63
+ def number_of_all_pending_and_running_instances
64
+ a_list = list_of_nonterminated_instances( list_of_all_instances )
65
+ number_of_pending_and_running_instances_for_list( a_list )
42
66
  end
43
67
  # == LAUNCHING
44
68
  # Request to launch a new instance
@@ -26,7 +26,7 @@ module PoolParty
26
26
  # Add a task in a new thread
27
27
  def <<(a, *args)
28
28
  thread = Thread.new(a) do |task|
29
- Thread.stop
29
+ Thread.stop rescue ""
30
30
  Thread.current[:callee] = task
31
31
  a.call args
32
32
  end
@@ -78,7 +78,8 @@ module PoolParty
78
78
  block = lambda {
79
79
  loop do
80
80
  begin
81
- run_thread_list(&block)
81
+ yield if block_given?
82
+ run_thread_list
82
83
  wait interval
83
84
  reset!
84
85
  rescue Exception => e
@@ -90,8 +91,7 @@ module PoolParty
90
91
  opts[:daemonize] ? daemonize(&block) : block.call
91
92
  end
92
93
 
93
- def run_thread_list
94
- yield if block_given?
94
+ def run_thread_list
95
95
  run_threads
96
96
  end
97
97
  # Reset
@@ -19,7 +19,7 @@ module PoolParty
19
19
  end
20
20
 
21
21
  # Require the poolparty specific tasks
22
- Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].each { |t| eval open(t).read }
22
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].each { |t| load t }
23
23
 
24
24
  Dir["#{PoolParty.plugin_dir}/*/Rakefile"].each {|t| load "#{t}" }
25
25
 
@@ -0,0 +1,53 @@
1
+ namespace(:pkg) do
2
+ ## Rake task to create/update a .manifest file in your project, as well as update *.gemspec
3
+ desc %{Update ".manifest" with the latest list of project filenames. Respect\
4
+ .gitignore by excluding everything that git ignores. Update `files` and\
5
+ `test_files` arrays in "*.gemspec" file if it's present.}
6
+ task :manifest do
7
+ list = Dir['**/*'].sort
8
+ spec_file = Dir['*.gemspec'].first
9
+ list -= [spec_file] if spec_file
10
+
11
+ File.read('.gitignore').each_line do |glob|
12
+ glob = glob.chomp.sub(/^\//, '')
13
+ list -= Dir[glob]
14
+ list -= Dir["#{glob}/**/*"] if File.directory?(glob) and !File.symlink?(glob)
15
+ puts "excluding #{glob}"
16
+ end
17
+
18
+ if spec_file
19
+ spec = File.read spec_file
20
+ spec.gsub! /^(\s* s.(test_)?files \s* = \s* )( \[ [^\]]* \] | %w\( [^)]* \) )/mx do
21
+ assignment = $1
22
+ bunch = $2 ? list.grep(/^test\//) : list
23
+ '%s%%w(%s)' % [assignment, bunch.join(' ')]
24
+ end
25
+
26
+ File.open(spec_file, 'w') {|f| f << spec }
27
+ end
28
+ File.open('Manifest', 'w') {|f| f << list.join("\n") }
29
+ end
30
+ desc "Build gemspec for github"
31
+ task :gemspec => :manifest do
32
+ require "yaml"
33
+ `rake gem`
34
+ data = YAML.load(open("poolparty.gemspec").read).to_ruby
35
+ File.open("poolparty.gemspec", "w+") {|f| f << data }
36
+ end
37
+ desc "Update gemspec with the time"
38
+ task :gemspec_update => :gemspec do
39
+ data = open("poolparty.gemspec").read
40
+ str = "Updated at #{Time.now.strftime("%I:%M%p, %D")}"
41
+
42
+ if data.scan(/Updated at/).empty?
43
+ data = data.gsub(/you just installed PoolParty\!/, '\0'+" (#{str})")
44
+ end
45
+
46
+ File.open("poolparty.gemspec", "w+") {|f| f << data }
47
+ end
48
+ desc "Release them gem to the gem server"
49
+ task :release => :gemspec_update do
50
+ `git ci -a -m "Updated gemspec for github"`
51
+ `git push gem`
52
+ end
53
+ end
@@ -8,7 +8,7 @@ Usage:
8
8
  rake #{@command} location
9
9
 
10
10
  Example:
11
- rake #{@command} git://github.com/auser/pool-party-plugins.git
11
+ rake #{@command} git://github.com/auser/poolparty-plugins.git
12
12
 
13
13
  Check the help does for more information how to install a plugin
14
14
  http://poolpartyrb.com
data/poolparty.gemspec CHANGED
@@ -1,72 +1,64 @@
1
-
2
- # Gem::Specification for Poolparty-0.0.8
3
- # Originally generated by Echoe
4
-
5
1
  Gem::Specification.new do |s|
6
2
  s.name = %q{poolparty}
7
- s.version = "0.0.8"
8
-
9
- s.specification_version = 2 if s.respond_to? :specification_version=
3
+ s.version = "0.0.9"
10
4
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
5
+ s.required_rubygems_version = Gem::Requirement.new("= 1.2") if s.respond_to? :required_rubygems_version=
12
6
  s.authors = ["Ari Lerner"]
13
- s.date = %q{2008-06-20}
7
+ s.cert_chain = nil
8
+ s.date = %q{2008-06-28}
14
9
  s.description = %q{Run your entire application off EC2, managed and auto-scaling}
15
10
  s.email = %q{ari.lerner@citrusbyte.com}
16
- s.executables = ["instance", "pool"]
17
- s.extra_rdoc_files = ["bin/instance", "bin/pool", "CHANGELOG", "lib/core/array.rb", "lib/core/exception.rb", "lib/core/float.rb", "lib/core/hash.rb", "lib/core/kernel.rb", "lib/core/module.rb", "lib/core/object.rb", "lib/core/proc.rb", "lib/core/string.rb", "lib/core/time.rb", "lib/modules/callback.rb", "lib/modules/ec2_wrapper.rb", "lib/modules/safe_instance.rb", "lib/modules/vlad_override.rb", "lib/poolparty/application.rb", "lib/poolparty/init.rb", "lib/poolparty/master.rb", "lib/poolparty/monitors/cpu.rb", "lib/poolparty/monitors/memory.rb", "lib/poolparty/monitors/web.rb", "lib/poolparty/monitors.rb", "lib/poolparty/optioner.rb", "lib/poolparty/plugin.rb", "lib/poolparty/plugin_manager.rb", "lib/poolparty/provider/packages/essential.rb", "lib/poolparty/provider/packages/git.rb", "lib/poolparty/provider/packages/haproxy.rb", "lib/poolparty/provider/packages/heartbeat.rb", "lib/poolparty/provider/packages/monit.rb", "lib/poolparty/provider/packages/rsync.rb", "lib/poolparty/provider/packages/ruby.rb", "lib/poolparty/provider/packages/s3fuse.rb", "lib/poolparty/provider/provider.rb", "lib/poolparty/provider.rb", "lib/poolparty/remote_instance.rb", "lib/poolparty/remoter.rb", "lib/poolparty/remoting.rb", "lib/poolparty/scheduler.rb", "lib/poolparty/tasks/cloud.rake", "lib/poolparty/tasks/development.rake", "lib/poolparty/tasks/ec2.rake", "lib/poolparty/tasks/instance.rake", "lib/poolparty/tasks/plugins.rake", "lib/poolparty/tasks/server.rake", "lib/poolparty/tasks.rb", "lib/poolparty/tmp.rb", "lib/poolparty.rb", "lib/s3/s3_object_store_folders.rb", "README.txt"]
18
- s.files = ["archives/ruby-1.8.6-p111.tar.gz", "bin/instance", "bin/pool", "CHANGELOG", "config/cloud_master_takeover", "config/create_proxy_ami.sh", "config/haproxy.conf", "config/heartbeat.conf", "config/heartbeat_authkeys.conf", "config/installers/ubuntu_install.sh", "config/monit/haproxy.monit.conf", "config/monit/nginx.monit.conf", "config/monit.conf", "config/nginx.conf", "config/reconfigure_instances_script.sh", "config/sample-config.yml", "config/scp_instances_script.sh", "lib/core/array.rb", "lib/core/exception.rb", "lib/core/float.rb", "lib/core/hash.rb", "lib/core/kernel.rb", "lib/core/module.rb", "lib/core/object.rb", "lib/core/proc.rb", "lib/core/string.rb", "lib/core/time.rb", "lib/modules/callback.rb", "lib/modules/ec2_wrapper.rb", "lib/modules/safe_instance.rb", "lib/modules/vlad_override.rb", "lib/poolparty/application.rb", "lib/poolparty/init.rb", "lib/poolparty/master.rb", "lib/poolparty/monitors/cpu.rb", "lib/poolparty/monitors/memory.rb", "lib/poolparty/monitors/web.rb", "lib/poolparty/monitors.rb", "lib/poolparty/optioner.rb", "lib/poolparty/plugin.rb", "lib/poolparty/plugin_manager.rb", "lib/poolparty/provider/packages/essential.rb", "lib/poolparty/provider/packages/git.rb", "lib/poolparty/provider/packages/haproxy.rb", "lib/poolparty/provider/packages/heartbeat.rb", "lib/poolparty/provider/packages/monit.rb", "lib/poolparty/provider/packages/rsync.rb", "lib/poolparty/provider/packages/ruby.rb", "lib/poolparty/provider/packages/s3fuse.rb", "lib/poolparty/provider/provider.rb", "lib/poolparty/provider.rb", "lib/poolparty/remote_instance.rb", "lib/poolparty/remoter.rb", "lib/poolparty/remoting.rb", "lib/poolparty/scheduler.rb", "lib/poolparty/tasks/cloud.rake", "lib/poolparty/tasks/development.rake", "lib/poolparty/tasks/ec2.rake", "lib/poolparty/tasks/instance.rake", "lib/poolparty/tasks/plugins.rake", "lib/poolparty/tasks/server.rake", "lib/poolparty/tasks.rb", "lib/poolparty/tmp.rb", "lib/poolparty.rb", "lib/s3/s3_object_store_folders.rb", "Manifest", "misc/basics_tutorial.txt", "Rakefile", "README.txt", "spec/application_spec.rb", "spec/callback_spec.rb", "spec/core_spec.rb", "spec/helpers/ec2_mock.rb", "spec/kernel_spec.rb", "spec/master_spec.rb", "spec/monitors/cpu_monitor_spec.rb", "spec/monitors/memory_spec.rb", "spec/monitors/misc_monitor_spec.rb", "spec/monitors/web_spec.rb", "spec/optioner_spec.rb", "spec/plugin_manager_spec.rb", "spec/plugin_spec.rb", "spec/pool_binary_spec.rb", "spec/poolparty_spec.rb", "spec/provider_spec.rb", "spec/remote_instance_spec.rb", "spec/remoter_spec.rb", "spec/remoting_spec.rb", "spec/scheduler_spec.rb", "spec/spec_helper.rb", "spec/string_spec.rb", "tmp/node0-pool-party-ha.cf", "tmp/node0-pool-party-haresources", "tmp/node0-pool-party-hosts", "tmp/node1-pool-party-ha.cf", "tmp/node1-pool-party-haresources", "tmp/node1-pool-party-hosts", "tmp/pool-party-haproxy.cfg", "web/static/conf/nginx.conf", "web/static/site/images/balloon.png", "web/static/site/images/cb.png", "web/static/site/images/clouds.png", "web/static/site/images/railsconf_preso_img.png", "web/static/site/index.html", "web/static/site/javascripts/application.js", "web/static/site/javascripts/corner.js", "web/static/site/javascripts/jquery-1.2.6.pack.js", "web/static/site/misc.html", "web/static/site/storage/pool_party_presentation.pdf", "web/static/site/stylesheets/application.css", "web/static/site/stylesheets/reset.css", "web/static/src/layouts/application.haml", "web/static/src/pages/index.haml", "web/static/src/pages/misc.haml", "web/static/src/stylesheets/application.sass", "poolparty.gemspec"]
11
+ s.executables = ["instance", "pool", "poolnotify"]
12
+ s.extra_rdoc_files = ["CHANGELOG", "README.txt", "bin", "bin/instance", "bin/pool", "bin/poolnotify", "lib", "lib/core", "lib/core/array.rb", "lib/core/exception.rb", "lib/core/float.rb", "lib/core/hash.rb", "lib/core/kernel.rb", "lib/core/module.rb", "lib/core/object.rb", "lib/core/proc.rb", "lib/core/string.rb", "lib/core/time.rb", "lib/modules", "lib/modules/callback.rb", "lib/modules/ec2_wrapper.rb", "lib/modules/file_writer.rb", "lib/modules/safe_instance.rb", "lib/modules/sprinkle_overrides.rb", "lib/modules/vlad_override.rb", "lib/poolparty", "lib/poolparty.rb", "lib/poolparty/application.rb", "lib/poolparty/init.rb", "lib/poolparty/master.rb", "lib/poolparty/monitors", "lib/poolparty/monitors.rb", "lib/poolparty/monitors/cpu.rb", "lib/poolparty/monitors/memory.rb", "lib/poolparty/monitors/web.rb", "lib/poolparty/optioner.rb", "lib/poolparty/plugin.rb", "lib/poolparty/plugin_manager.rb", "lib/poolparty/provider", "lib/poolparty/provider.rb", "lib/poolparty/provider/packages", "lib/poolparty/provider/packages/essential.rb", "lib/poolparty/provider/packages/git.rb", "lib/poolparty/provider/packages/haproxy.rb", "lib/poolparty/provider/packages/heartbeat.rb", "lib/poolparty/provider/packages/monit.rb", "lib/poolparty/provider/packages/rsync.rb", "lib/poolparty/provider/packages/ruby.rb", "lib/poolparty/provider/packages/s3fuse.rb", "lib/poolparty/provider/provider.rb", "lib/poolparty/remote_instance.rb", "lib/poolparty/remoter.rb", "lib/poolparty/remoting.rb", "lib/poolparty/scheduler.rb", "lib/poolparty/tasks", "lib/poolparty/tasks.rb", "lib/poolparty/tasks/cloud.rake", "lib/poolparty/tasks/development.rake", "lib/poolparty/tasks/ec2.rake", "lib/poolparty/tasks/instance.rake", "lib/poolparty/tasks/package.rake", "lib/poolparty/tasks/plugins.rake", "lib/poolparty/tasks/server.rake", "lib/s3", "lib/s3/s3_object_store_folders.rb"]
13
+ s.files = ["CHANGELOG", "README.txt", "Rakefile", "assets", "assets/clouds.png", "bin", "bin/instance", "bin/pool", "bin/poolnotify", "config", "config/cloud_master_takeover", "config/create_proxy_ami.sh", "config/haproxy.conf", "config/heartbeat.conf", "config/heartbeat_authkeys.conf", "config/installers", "config/installers/ubuntu_install.sh", "config/monit", "config/monit.conf", "config/monit/haproxy.monit.conf", "config/monit/nginx.monit.conf", "config/nginx.conf", "config/reconfigure_instances_script.sh", "config/sample-config.yml", "config/scp_instances_script.sh", "lib", "lib/core", "lib/core/array.rb", "lib/core/exception.rb", "lib/core/float.rb", "lib/core/hash.rb", "lib/core/kernel.rb", "lib/core/module.rb", "lib/core/object.rb", "lib/core/proc.rb", "lib/core/string.rb", "lib/core/time.rb", "lib/modules", "lib/modules/callback.rb", "lib/modules/ec2_wrapper.rb", "lib/modules/file_writer.rb", "lib/modules/safe_instance.rb", "lib/modules/sprinkle_overrides.rb", "lib/modules/vlad_override.rb", "lib/poolparty", "lib/poolparty.rb", "lib/poolparty/application.rb", "lib/poolparty/init.rb", "lib/poolparty/master.rb", "lib/poolparty/monitors", "lib/poolparty/monitors.rb", "lib/poolparty/monitors/cpu.rb", "lib/poolparty/monitors/memory.rb", "lib/poolparty/monitors/web.rb", "lib/poolparty/optioner.rb", "lib/poolparty/plugin.rb", "lib/poolparty/plugin_manager.rb", "lib/poolparty/provider", "lib/poolparty/provider.rb", "lib/poolparty/provider/packages", "lib/poolparty/provider/packages/essential.rb", "lib/poolparty/provider/packages/git.rb", "lib/poolparty/provider/packages/haproxy.rb", "lib/poolparty/provider/packages/heartbeat.rb", "lib/poolparty/provider/packages/monit.rb", "lib/poolparty/provider/packages/rsync.rb", "lib/poolparty/provider/packages/ruby.rb", "lib/poolparty/provider/packages/s3fuse.rb", "lib/poolparty/provider/provider.rb", "lib/poolparty/remote_instance.rb", "lib/poolparty/remoter.rb", "lib/poolparty/remoting.rb", "lib/poolparty/scheduler.rb", "lib/poolparty/tasks", "lib/poolparty/tasks.rb", "lib/poolparty/tasks/cloud.rake", "lib/poolparty/tasks/development.rake", "lib/poolparty/tasks/ec2.rake", "lib/poolparty/tasks/instance.rake", "lib/poolparty/tasks/package.rake", "lib/poolparty/tasks/plugins.rake", "lib/poolparty/tasks/server.rake", "lib/s3", "lib/s3/s3_object_store_folders.rb", "spec", "spec/application_spec.rb", "spec/callback_spec.rb", "spec/core_spec.rb", "spec/ec2_wrapper_spec.rb", "spec/file_writer_spec.rb", "spec/files", "spec/files/describe_response", "spec/files/multi_describe_response", "spec/files/remote_desc_response", "spec/helpers", "spec/helpers/ec2_mock.rb", "spec/kernel_spec.rb", "spec/master_spec.rb", "spec/monitors", "spec/monitors/cpu_monitor_spec.rb", "spec/monitors/memory_spec.rb", "spec/monitors/misc_monitor_spec.rb", "spec/monitors/web_spec.rb", "spec/optioner_spec.rb", "spec/plugin_manager_spec.rb", "spec/plugin_spec.rb", "spec/pool_binary_spec.rb", "spec/poolparty_spec.rb", "spec/provider_spec.rb", "spec/remote_instance_spec.rb", "spec/remoter_spec.rb", "spec/remoting_spec.rb", "spec/scheduler_spec.rb", "spec/spec_helper.rb", "spec/string_spec.rb", "poolparty.gemspec"]
19
14
  s.has_rdoc = true
20
15
  s.homepage = %q{http://blog.citrusbyte.com}
21
- s.post_install_message = %q{ Thanks for installing PoolParty!
22
-
23
- Please check out the documentation for any questions or check out the google groups at
24
- http://groups.google.com/group/poolpartyrb
25
-
26
- Don't forget to check out the plugins for extending PoolParty!
27
-
28
- For more information, check http://poolpartyrb.com
29
- *** Ari Lerner @ <ari.lerner@citrusbyte.com> ***
30
- }
16
+ s.post_install_message = %q{
17
+
18
+ Get ready to jump in the pool, you just installed PoolParty! (Updated at 05:15PM, 06/28/08)
19
+
20
+ Please check out the documentation for any questions or check out the google groups at
21
+ http://groups.google.com/group/poolpartyrb
22
+
23
+ Don't forget to check out the plugin tutorial @ http://poolpartyrb.com for extending PoolParty!
24
+
25
+ For more information, check http://poolpartyrb.com
26
+ On IRC:
27
+ irc.freenode.net
28
+ #poolpartyrb
29
+ *** Ari Lerner @ <ari.lerner@citrusbyte.com> ***
30
+ }
31
31
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Poolparty", "--main", "README.txt"]
32
32
  s.require_paths = ["lib"]
33
33
  s.rubyforge_project = %q{poolparty}
34
- s.rubygems_version = %q{1.1.1}
34
+ s.rubygems_version = %q{1.2.0}
35
35
  s.summary = %q{Run your entire application off EC2, managed and auto-scaling}
36
36
 
37
- s.add_dependency(%q<aws-s3>, [">= 0"])
38
- s.add_dependency(%q<amazon-ec2>, [">= 0"])
39
- s.add_dependency(%q<aska>, [">= 0"])
40
- s.add_dependency(%q<git>, [">= 0"])
41
- end
42
-
37
+ if s.respond_to? :specification_version then
38
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
39
+ s.specification_version = 2
43
40
 
44
- # # Original Rakefile source (requires the Echoe gem):
45
- #
46
- # require 'rubygems'
47
- # require 'echoe'
48
- # require 'lib/poolparty'
49
- #
50
- # task :default => :test
51
- #
52
- # Echoe.new("poolparty") do |p|
53
- # p.author = "Ari Lerner"
54
- # p.email = "ari.lerner@citrusbyte.com"
55
- # p.summary = "Run your entire application off EC2, managed and auto-scaling"
56
- # p.url = "http://blog.citrusbyte.com"
57
- # p.dependencies = %w(aws-s3 amazon-ec2 aska git)
58
- # p.install_message =<<-EOM
59
- # Thanks for installing PoolParty!
60
- #
61
- # Please check out the documentation for any questions or check out the google groups at
62
- # http://groups.google.com/group/poolpartyrb
63
- #
64
- # Don't forget to check out the plugins for extending PoolParty!
65
- #
66
- # For more information, check http://poolpartyrb.com
67
- # *** Ari Lerner @ <ari.lerner@citrusbyte.com> ***
68
- # EOM
69
- # p.include_rakefile = true
70
- # end
71
- #
72
- # PoolParty.include_tasks
41
+ if current_version >= 3 then
42
+ s.add_runtime_dependency(%q<aws-s3>, [">= 0"])
43
+ s.add_runtime_dependency(%q<amazon-ec2>, [">= 0"])
44
+ s.add_runtime_dependency(%q<auser-aska>, [">= 0"])
45
+ s.add_runtime_dependency(%q<git>, [">= 0"])
46
+ s.add_runtime_dependency(%q<crafterm-sprinkle>, [">= 0"])
47
+ s.add_runtime_dependency(%q<SystemTimer>, [">= 0"])
48
+ else
49
+ s.add_dependency(%q<aws-s3>, [">= 0"])
50
+ s.add_dependency(%q<amazon-ec2>, [">= 0"])
51
+ s.add_dependency(%q<auser-aska>, [">= 0"])
52
+ s.add_dependency(%q<git>, [">= 0"])
53
+ s.add_dependency(%q<crafterm-sprinkle>, [">= 0"])
54
+ s.add_dependency(%q<SystemTimer>, [">= 0"])
55
+ end
56
+ else
57
+ s.add_dependency(%q<aws-s3>, [">= 0"])
58
+ s.add_dependency(%q<amazon-ec2>, [">= 0"])
59
+ s.add_dependency(%q<auser-aska>, [">= 0"])
60
+ s.add_dependency(%q<git>, [">= 0"])
61
+ s.add_dependency(%q<crafterm-sprinkle>, [">= 0"])
62
+ s.add_dependency(%q<SystemTimer>, [">= 0"])
63
+ end
64
+ end
@@ -1,6 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  describe "Application" do
4
+ before(:each) do
5
+ stub_option_load
6
+ end
4
7
  it "should be able to send options in the Application.options" do
5
8
  options({:optparse => {:banner => "hi"}})
6
9
  end
@@ -36,4 +39,29 @@ describe "Application" do
36
39
  it "should show the version as a string" do
37
40
  Application.version.class.should == String
38
41
  end
42
+ it "should be able to start instances with the the key access information on the user-data" do
43
+ Application.launching_user_data.should =~ /:access_key/
44
+ Application.launching_user_data.should =~ /:secret_access_key/
45
+ end
46
+ it "should be able to pull out the access_key from the user data" do
47
+ Application.local_user_data[:access_key].should == 3.14159
48
+ end
49
+ it "should overwrite the default_options when passing in to the instance data" do
50
+ Application.stub!(:default_options).and_return({:access_key => 42})
51
+ Application.options.access_key.should == 3.14159
52
+ end
53
+ it "should parse and use a config file if it is given for the options" do
54
+ YAML.should_receive(:load).and_return({:config_file => "config/sample-config.yml"})
55
+ Application.make_options(:config_file => "config/sample-config.yml")
56
+ end
57
+ it "should not read the config file if it is not passed and doesn't exist" do
58
+ File.stub!(:file?).and_return false
59
+ YAML.should_not_receive(:load)
60
+ Application.make_options
61
+ end
62
+ it "should not read the config file if it is passed and doesn't exist" do
63
+ File.stub!(:file?).and_return false
64
+ YAML.should_not_receive(:load)
65
+ Application.make_options(:config_file => "ted")
66
+ end
39
67
  end