dreadpiratepj-poolparty 0.0.8

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.
Files changed (109) hide show
  1. data/CHANGELOG +12 -0
  2. data/Manifest +115 -0
  3. data/README.txt +140 -0
  4. data/Rakefile +27 -0
  5. data/bin/instance +61 -0
  6. data/bin/pool +62 -0
  7. data/config/cloud_master_takeover +17 -0
  8. data/config/create_proxy_ami.sh +582 -0
  9. data/config/haproxy.conf +29 -0
  10. data/config/heartbeat.conf +8 -0
  11. data/config/heartbeat_authkeys.conf +2 -0
  12. data/config/installers/ubuntu_install.sh +77 -0
  13. data/config/monit.conf +9 -0
  14. data/config/monit/haproxy.monit.conf +7 -0
  15. data/config/monit/nginx.monit.conf +0 -0
  16. data/config/nginx.conf +24 -0
  17. data/config/reconfigure_instances_script.sh +18 -0
  18. data/config/sample-config.yml +23 -0
  19. data/config/scp_instances_script.sh +12 -0
  20. data/lib/core/array.rb +13 -0
  21. data/lib/core/exception.rb +9 -0
  22. data/lib/core/float.rb +13 -0
  23. data/lib/core/hash.rb +11 -0
  24. data/lib/core/kernel.rb +12 -0
  25. data/lib/core/module.rb +22 -0
  26. data/lib/core/object.rb +18 -0
  27. data/lib/core/proc.rb +15 -0
  28. data/lib/core/string.rb +49 -0
  29. data/lib/core/time.rb +41 -0
  30. data/lib/modules/callback.rb +133 -0
  31. data/lib/modules/ec2_wrapper.rb +82 -0
  32. data/lib/modules/safe_instance.rb +31 -0
  33. data/lib/modules/vlad_override.rb +82 -0
  34. data/lib/poolparty.rb +105 -0
  35. data/lib/poolparty/application.rb +170 -0
  36. data/lib/poolparty/init.rb +6 -0
  37. data/lib/poolparty/master.rb +329 -0
  38. data/lib/poolparty/monitors.rb +13 -0
  39. data/lib/poolparty/monitors/cpu.rb +19 -0
  40. data/lib/poolparty/monitors/memory.rb +26 -0
  41. data/lib/poolparty/monitors/web.rb +23 -0
  42. data/lib/poolparty/optioner.rb +16 -0
  43. data/lib/poolparty/plugin.rb +43 -0
  44. data/lib/poolparty/plugin_manager.rb +67 -0
  45. data/lib/poolparty/provider.rb +2 -0
  46. data/lib/poolparty/provider/packages/essential.rb +6 -0
  47. data/lib/poolparty/provider/packages/git.rb +4 -0
  48. data/lib/poolparty/provider/packages/haproxy.rb +20 -0
  49. data/lib/poolparty/provider/packages/heartbeat.rb +4 -0
  50. data/lib/poolparty/provider/packages/monit.rb +6 -0
  51. data/lib/poolparty/provider/packages/rsync.rb +4 -0
  52. data/lib/poolparty/provider/packages/ruby.rb +37 -0
  53. data/lib/poolparty/provider/packages/s3fuse.rb +11 -0
  54. data/lib/poolparty/provider/provider.rb +60 -0
  55. data/lib/poolparty/remote_instance.rb +216 -0
  56. data/lib/poolparty/remoter.rb +106 -0
  57. data/lib/poolparty/remoting.rb +112 -0
  58. data/lib/poolparty/scheduler.rb +103 -0
  59. data/lib/poolparty/tasks.rb +29 -0
  60. data/lib/poolparty/tasks/cloud.rake +57 -0
  61. data/lib/poolparty/tasks/development.rake +38 -0
  62. data/lib/poolparty/tasks/ec2.rake +20 -0
  63. data/lib/poolparty/tasks/instance.rake +63 -0
  64. data/lib/poolparty/tasks/plugins.rake +30 -0
  65. data/lib/poolparty/tasks/server.rake +42 -0
  66. data/lib/poolparty/tmp.rb +46 -0
  67. data/lib/s3/s3_object_store_folders.rb +44 -0
  68. data/misc/basics_tutorial.txt +142 -0
  69. data/poolparty.gemspec +72 -0
  70. data/spec/application_spec.rb +39 -0
  71. data/spec/callback_spec.rb +194 -0
  72. data/spec/core_spec.rb +15 -0
  73. data/spec/helpers/ec2_mock.rb +44 -0
  74. data/spec/kernel_spec.rb +11 -0
  75. data/spec/master_spec.rb +203 -0
  76. data/spec/monitors/cpu_monitor_spec.rb +38 -0
  77. data/spec/monitors/memory_spec.rb +50 -0
  78. data/spec/monitors/misc_monitor_spec.rb +50 -0
  79. data/spec/monitors/web_spec.rb +39 -0
  80. data/spec/optioner_spec.rb +22 -0
  81. data/spec/plugin_manager_spec.rb +31 -0
  82. data/spec/plugin_spec.rb +101 -0
  83. data/spec/pool_binary_spec.rb +10 -0
  84. data/spec/poolparty_spec.rb +15 -0
  85. data/spec/provider_spec.rb +17 -0
  86. data/spec/remote_instance_spec.rb +149 -0
  87. data/spec/remoter_spec.rb +65 -0
  88. data/spec/remoting_spec.rb +84 -0
  89. data/spec/scheduler_spec.rb +75 -0
  90. data/spec/spec_helper.rb +39 -0
  91. data/spec/string_spec.rb +28 -0
  92. data/web/static/conf/nginx.conf +22 -0
  93. data/web/static/site/images/balloon.png +0 -0
  94. data/web/static/site/images/cb.png +0 -0
  95. data/web/static/site/images/clouds.png +0 -0
  96. data/web/static/site/images/railsconf_preso_img.png +0 -0
  97. data/web/static/site/index.html +71 -0
  98. data/web/static/site/javascripts/application.js +3 -0
  99. data/web/static/site/javascripts/corner.js +178 -0
  100. data/web/static/site/javascripts/jquery-1.2.6.pack.js +11 -0
  101. data/web/static/site/misc.html +42 -0
  102. data/web/static/site/storage/pool_party_presentation.pdf +0 -0
  103. data/web/static/site/stylesheets/application.css +100 -0
  104. data/web/static/site/stylesheets/reset.css +17 -0
  105. data/web/static/src/layouts/application.haml +25 -0
  106. data/web/static/src/pages/index.haml +25 -0
  107. data/web/static/src/pages/misc.haml +5 -0
  108. data/web/static/src/stylesheets/application.sass +100 -0
  109. metadata +260 -0
@@ -0,0 +1,20 @@
1
+ namespace(:ec2) do
2
+ task :init do
3
+ Application.options
4
+ end
5
+ # Start a new instance in the cloud
6
+ desc "Add and start an instance to the pool"
7
+ task :start_new_instance => [:init] do
8
+ puts PoolParty::Remoting.new.launch_new_instance!
9
+ end
10
+ # Stop all the instances via command-line
11
+ desc "Stop all running instances"
12
+ task :stop_running_instances => [:init] do
13
+ Thread.new {`ec2-describe-instances | grep INSTANCE | grep running | awk '{print $2}' | xargs ec2-terminate-instances`}
14
+ end
15
+ # Reboot the instances via commandline
16
+ desc "Restart all running instances"
17
+ task :restart_running_instances => [:init] do
18
+ Thread.new {`ec2-describe-instances | grep INSTANCE | grep running | awk '{print $2}' | xargs ec2-reboot-instances`}
19
+ end
20
+ end
@@ -0,0 +1,63 @@
1
+ namespace(:instance) do
2
+ # Find the instance we want to deal with
3
+ # interface can be: num=0, i=0, inst=0, 0
4
+ # defaults to the master instance (0)
5
+ task :init do
6
+ num = (ENV['num'] || ENV["i"] || ENV["inst"] || ARGV.shift || 0).to_i
7
+ raise Exception.new("Please set the number of the instance (i.e. num=1, i=1, or as an argument)") unless num
8
+ @node = PoolParty::Master.new.get_node(num)
9
+ end
10
+ # Ssh into the node
11
+ desc "Remotely login to the remote instance"
12
+ task :ssh => [:init] do
13
+ @node.ssh
14
+ end
15
+ desc "Send a file to the remote instance"
16
+ task :exec => :init do
17
+ @node.ssh ENV['cmd']
18
+ end
19
+ # Send a file to the remote instance
20
+ # as designated by src='' and dest=''
21
+ desc "Send a file to the remote instance"
22
+ task :scp => :init do
23
+ @node.scp ENV['src'], ENV['dest']
24
+ end
25
+ # Execute a command on the remote instance as designated
26
+ # by cmd=''
27
+ desc "Execute cmd on a remote instance"
28
+ task :exec => [:init] do
29
+ cmd = ENV['cmd'] || "ls -l"
30
+ puts @node.ssh(cmd.runnable)
31
+ end
32
+ # Restart all the services monitored by monit
33
+ desc "Restart all the services"
34
+ task :reload => [:init] do
35
+ @node.restart_with_monit
36
+ end
37
+ # Start all the services monitored by monit
38
+ desc "Start all services"
39
+ task :load => [:init] do
40
+ @node.start_with_monit
41
+ end
42
+ # Stop the services monitored by monit
43
+ desc "Stop all services"
44
+ task :stop => [:init] do
45
+ @node.stop_with_monit
46
+ end
47
+ # Install the required services on this node
48
+ desc "Install stack on this node"
49
+ task :install => :init do
50
+ @node.install
51
+ end
52
+ # Turnoff this instance
53
+ desc "Teardown instance"
54
+ task :shutdown => :init do
55
+ `ec2-terminate-instances #{@node.instance_id}`
56
+ end
57
+ # Configure this node and start the services
58
+ desc "Configure the stack on this node"
59
+ task :configure => :init do
60
+ @node.configure
61
+ @node.restart_with_monit
62
+ end
63
+ end
@@ -0,0 +1,30 @@
1
+ namespace(:plugin) do
2
+ task :init do
3
+ @command = ARGV.shift # Get rid of the command
4
+ @name = (ENV['location'] || ENV["l"] || ARGV.shift)
5
+ unless @name
6
+ puts <<-EOM
7
+ Usage:
8
+ rake #{@command} location
9
+
10
+ Example:
11
+ rake #{@command} git://github.com/auser/pool-party-plugins.git
12
+
13
+ Check the help does for more information how to install a plugin
14
+ http://poolpartyrb.com
15
+
16
+ EOM
17
+ exit
18
+ end
19
+ end
20
+ desc "Install a plugin from a git repository"
21
+ task :install => :init do |command|
22
+ PoolParty::PluginManager.install_plugin @name
23
+ end
24
+ desc "Remove an installed plugin"
25
+ task :remove => :init do |command|
26
+ PoolParty::PluginManager.remove_plugin @name
27
+ end
28
+ rule "" do |t|
29
+ end
30
+ end
@@ -0,0 +1,42 @@
1
+ # Tasks to be run on the server
2
+ namespace(:server) do
3
+ task :init do
4
+ PoolParty::Coordinator.init(false)
5
+ end
6
+ # bundle, upload and register your bundle on the server
7
+ desc "Bundle, upload and register your ami"
8
+ task :all => [:bundle, :upload, :register] do
9
+ puts "== your ami is ready"
10
+ end
11
+ # Cleanup the /mnt directory
12
+ desc "Clean the /mnt directory"
13
+ task :clean_mnt do
14
+ `rm -rf /mnt/image* img*`
15
+ end
16
+ # Before we can bundle, we have to make sure we have the cert and pk files
17
+ desc "Ensure the required bundle files are present in /mnt"
18
+ task :check_bundle_files do
19
+ raise Exception.new("You must have a private key in your /mnt directory") unless File.exists?("/mnt/pk-*.pem")
20
+ raise Exception.new("You must have your access key in your /mnt directory") unless File.exists?("/mnt/cert-*.pem")
21
+ end
22
+ # Bundle the image
23
+ desc "Bundle this image into the /mnt directory"
24
+ task :bundle => [:clean_mnt, :check_bundle_files] do
25
+ puts `ec2-bundle-vol -k /mnt/pk-*.pem -u '#{Planner.user_id}' -d /mnt -c /mnt/cert-*.pem -r i386`
26
+ end
27
+ # Upload the bundle into the app_name bucket
28
+ desc "Upload the bundle to your bucket with a unique name: deletes old ami"
29
+ task :upload => [:init, :delete_bucket] do
30
+ puts `ec2-upload-bundle -b #{Planner.app_name} -m /mnt/image.manifest.xml -a #{Planner.access_key} -s #{Planner.secret_access_key}`
31
+ end
32
+ # Register the bucket with amazon and get back an ami
33
+ desc "Register the bundle with amazon"
34
+ task :register do
35
+ puts `ec2-register -K /mnt/pk-*.pem -C /mnt/cert-*.pem #{Planner.app_name}/image.manifest.xml`
36
+ end
37
+ # Delete the bucket
38
+ desc "Delete the bucket with the bundle under tha app name"
39
+ task :delete_bucket do
40
+ Planner.app_name.delete_bucket
41
+ end
42
+ end
@@ -0,0 +1,46 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+ require "backcall"
3
+ require "remoter"
4
+ class Test
5
+ include PoolParty::Remoter
6
+ include Callbacks
7
+
8
+ after :initialize, :set_hosts
9
+ def rt
10
+ @rt ||= Rake::RemoteTask
11
+ end
12
+
13
+ def set_hosts(c)
14
+ rt.host "myslice", :app, :db
15
+ end
16
+
17
+ def rtask(name, *args, &block)
18
+ rt.remote_task(name.to_sym => args, &block)
19
+ end
20
+
21
+ def scp local, remote
22
+ require "tempfile"
23
+ rtask(:scp) do
24
+ put remote do
25
+ open(local).read
26
+ end
27
+ end.execute
28
+ end
29
+ before :scp, :set_hosts
30
+ def ssh command=nil, &block
31
+ block = Proc.new do
32
+ run command
33
+ end
34
+ rtask(:ssh, &block).execute
35
+ end
36
+ before :ssh, :set_hosts
37
+ end
38
+
39
+ t = Test.new
40
+ t.scp("/Users/auser/Sites/work/citrusbyte/internal/gems/pool-party/pool/CHANGELOG", "ho")
41
+ t.ssh("ls -l")
42
+ t.ssh <<-EOE
43
+ ls -l
44
+ mv ho CHANGELOG
45
+ cat CHANGELOG
46
+ EOE
@@ -0,0 +1,44 @@
1
+ =begin rdoc
2
+ S3 overloads
3
+ =end
4
+ module AWS
5
+ module S3
6
+ class S3Object
7
+ class << self
8
+
9
+ alias :original_store :store
10
+ def store(key, data, bucket = nil, options = {})
11
+ store_folders(key, bucket, options) if options[:use_virtual_directories]
12
+ original_store(key, data, bucket, options)
13
+ end
14
+
15
+ def streamed_store(key, filepath, bucket = nil, options = {})
16
+ store_folders(key, bucket, options) if options[:use_virtual_directories]
17
+ store(key,File.open(filepath), bucket)
18
+ end
19
+
20
+ def store_directory(directory, bucket, options = {})
21
+ Dir[File.join(directory, "*")].each do |file|
22
+ streamed_store("#{File.basename(File.dirname(file))}/#{File.basename(file)}", file, bucket, options.update(:use_virtual_directories => true))
23
+ end
24
+ end
25
+
26
+ def store_folders(key, bucket = nil, options = {})
27
+ folders = key.split("/")
28
+ folders.slice!(0)
29
+ folders.pop
30
+ current_folder = "/"
31
+ folders.each {|folder|
32
+ current_folder += folder
33
+ store_folder(current_folder, bucket, options)
34
+ current_folder += "/"
35
+ }
36
+ end
37
+
38
+ def store_folder(key, bucket = nil, options = {})
39
+ original_store(key + "_$folder$", "", bucket, options) # store the magic entry that emulates a folder
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,142 @@
1
+ PoolParty, a tutorial.
2
+
3
+ To get PoolParty up and running on your very own ec2 instances, you have to do a few things in preparation first.
4
+
5
+ First, install the gem with:
6
+
7
+ sudo gem install auser-poolparty -s http://gems.github.com
8
+
9
+ First, head on over to http://aws.amazon.com and sign up for an account. Make sure you make note of the access key and the secret access key on the access identifiers page. Also, scroll down to the bottom of that page and download your x.509 certificate and the private one as well. You only can generate that once, so make sure you download it immediately. Finally, take note of your account id.
10
+
11
+ Now, let's get to some PoolParty setup. PoolParty only requires one file, a configuration file. Once you get this setup, PoolParty will do the rest for you, so let's get started editing the config file.
12
+
13
+ There is a generator in progress, so if by the time you read this and you have the gem installed, type
14
+
15
+ which poolparty
16
+
17
+ If you get a response, then the generator has been built and you can skip this section and go right to the next 'using it' section, however, if not or you just want to understand the innerworkings, read on.
18
+
19
+ config/config.yml
20
+ PoolParty makes the guess that your config is in a file and is in config/config.yml in your base project directory. However, this is not necessary if you do not want a configuration file, since all options can be added at runtime using switches on the command-line. That being said, the easiest way is to write a config file.
21
+
22
+ The minimal config file looks like this:
23
+
24
+ :access_key: "1XCTNEK1CC5BQXXXXXXX"
25
+ :secret_access_key: "Q2qJHP0S2iOKikn9glB+XXXX/XXXXXXXX/XXXXXXX"
26
+ :ami: "ami-3057b259"
27
+
28
+ That's it. However,a more complete one would look more like this:
29
+
30
+ :app_name: "test_app"
31
+ :user_id: "1619-6456-1111"
32
+ :access_key: "1XCTNEK1CC5BQXXXXXXX"
33
+ :secret_access_key: "Q2qJHP0S2iOKikn9glB+XXXX/XXXXXXXX/XXXXXXX"
34
+ :ami: "ami-3057b259"
35
+ :size: small
36
+ :polling_time: "5.minutes"
37
+ :minimum_instances: 2
38
+ :maximum_instances: 10
39
+ :ec2_dir: "/Users/user/.ec2"
40
+ :keypair: user
41
+ :os: ubuntu
42
+ :host_port: 80
43
+ :shared_bucket: "pool-party-app-data"
44
+ :environment: production
45
+ :contract_when:
46
+ web > 10
47
+ cpu < 0.2
48
+ :expand_when:
49
+ cpu > 0.45
50
+ web < 10
51
+
52
+ Most of it should be self-explanatory, but a few points are necessary to describe. ec2_dir and keypair are for your location development machine. If you didn't create a keypair, not to worry, put in anything here. If you did, it's the name of the keypair you added. This is important for working with the instances after you get them up.
53
+
54
+ If you put in a bucket in the shared_bucket key, the instances will automount that bucket to the /data drive. If you leave it out or don't include it, then it won't.
55
+
56
+ The master instance takes care of monitoring the cloud for you. If the the parameters you set in the contract_when and expand_when are met, then the cloud will respond accordingly. Those are based on monitors that are included in PoolParty.
57
+
58
+ The installation of the required software for PoolParty is taken care of by PoolParty. That being said, PoolParty makes no assumptions of what the cloud's responsibilities will be. See 'Using' later on.
59
+
60
+ Monitors
61
+ The monitors are flexible and extensible. Currently included in PoolParty are monitors that monitor web requests and cpu and memory percentages. Writing a monitor or a plugin are out of the scope of this tutorial, but will be included in future tutorials.
62
+
63
+ Configuring
64
+ It can be tedious setting up just your development machine. This is why PoolParty makes it super easy for you in just one rake task.
65
+
66
+ If you are not familiar with ruby, I suggest you look into it, it's a beautiful language. However, PoolParty is language-agnostic, so not to worry.
67
+
68
+ Create a file in your development directory called Rakefile and add this to it.
69
+
70
+ require 'rubygems'
71
+ require 'poolparty'
72
+
73
+ PoolParty.include_tasks
74
+
75
+ That's it, pretty simple and a bunch of tasks are available to you directly!
76
+ Your development directory should look like this:
77
+
78
+ ./
79
+ config/
80
+ config.yml
81
+ Rakefile
82
+
83
+ Now, once you have this setup and your config file setup, you can type
84
+
85
+ rake dev:setup
86
+
87
+ That's it and you should be able to type ec2-describe-images (provided you have installed the ec2-api-tools, available here: http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351&categoryID=88) at this point and you are set.
88
+
89
+ You will find yourself with a .<keypair_name>_pool_keys file in your home directory. Anytime you want to setup a new cloud or simply check on this one, all you have to do is type:
90
+
91
+ source ~/.<keypair_name>_pool_keys
92
+
93
+ and your'll be ready to switch over to editing the new cloud.
94
+
95
+ Using:
96
+ When it's easy to maintain a cloud, it's even easier to use.
97
+
98
+ There are two binaries included with PoolParty when you install them. Working with the cloud, you can use the binary: pool. Working with the instance, you can use the binary: instance.
99
+
100
+ Start your pool by typing:
101
+
102
+ pool start
103
+
104
+ It may take a minute. PoolParty is starting your cloud and configuring the master at this point. You may be asked to confirm an ssh connection. This only happens the first time so other pool commands won't ask you again.
105
+
106
+ To check on your cloud, simply type:
107
+
108
+ pool list
109
+
110
+ and you will be presented with the list of your cloud and their roles
111
+
112
+ If you want to stop the pool, it's as straightforward as:
113
+
114
+ pool stop
115
+
116
+ There are a other commands you have available to you on the pool site. If you are hosting your master off-site, rather than on EC2, you can type on the master machine:
117
+
118
+ pool maintain
119
+
120
+ and it will bootup as the master, watching the other instances in the cloud.
121
+
122
+ If you want to log into a specific instance, you can do so with the command:
123
+
124
+ instance ssh -i num
125
+
126
+ The num is the number in the list from: pool list. It defaults to logging into the master if the number is not supplied.
127
+
128
+ You have some more options when working with instances. You can
129
+
130
+ instance ssh
131
+ instance scp src='' dest=''
132
+ instance cmd cmd='ls -la'
133
+ instance start|stop|install|restart
134
+ instance start_maintain
135
+
136
+ The last command will force the instance to become the new master.
137
+
138
+ Those are the basics of PoolParty.
139
+
140
+ You can check it out at http://poolpartyrb.com/.
141
+
142
+ If you are interested in active development, check out the source at github at http://github.com/auser/pool-party/tree/master. Active discussion is held here: http://groups.google.com/group/poolpartyrb. Of course, the latest and greatest information will always be released first at http://blog.citrusbyte.com.
data/poolparty.gemspec ADDED
@@ -0,0 +1,72 @@
1
+
2
+ # Gem::Specification for Poolparty-0.0.8
3
+ # Originally generated by Echoe
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{poolparty}
7
+ s.version = "0.0.8"
8
+
9
+ s.specification_version = 2 if s.respond_to? :specification_version=
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["Ari Lerner"]
13
+ s.date = %q{2008-06-20}
14
+ s.description = %q{Run your entire application off EC2, managed and auto-scaling}
15
+ 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"]
19
+ s.has_rdoc = true
20
+ 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
+ }
31
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Poolparty", "--main", "README.txt"]
32
+ s.require_paths = ["lib"]
33
+ s.rubyforge_project = %q{poolparty}
34
+ s.rubygems_version = %q{1.1.1}
35
+ s.summary = %q{Run your entire application off EC2, managed and auto-scaling}
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
+
43
+
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