poolparty 0.0.4 → 0.2.6

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 (247) hide show
  1. data/History.txt +25 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +203 -0
  4. data/PostInstall.txt +18 -0
  5. data/README.txt +21 -82
  6. data/Rakefile +25 -18
  7. data/bin/cloud +31 -0
  8. data/bin/cloud-add-keypair +23 -0
  9. data/bin/cloud-configure +31 -0
  10. data/bin/cloud-contract +27 -0
  11. data/bin/cloud-expand +27 -0
  12. data/bin/cloud-list +32 -0
  13. data/bin/cloud-maintain +36 -0
  14. data/bin/cloud-osxcopy +22 -0
  15. data/bin/cloud-provision +31 -0
  16. data/bin/cloud-refresh +26 -0
  17. data/bin/cloud-ssh +18 -0
  18. data/bin/cloud-start +32 -0
  19. data/bin/cloud-terminate +23 -0
  20. data/bin/pool +25 -27
  21. data/bin/pool-console +12 -0
  22. data/bin/pool-describe +9 -0
  23. data/bin/pool-list +28 -0
  24. data/bin/pool-provision +34 -0
  25. data/bin/pool-spec +17 -0
  26. data/bin/pool-start +32 -0
  27. data/bin/pool-start-monitor +1 -0
  28. data/config/hoe.rb +115 -0
  29. data/config/requirements.rb +15 -0
  30. data/examples/basic.rb +20 -0
  31. data/examples/plugin_without_plugin_directory.rb +13 -0
  32. data/examples/poolparty.rb +12 -0
  33. data/examples/with_apache_plugin.rb +22 -0
  34. data/generators/poolspec/USAGE +5 -0
  35. data/generators/poolspec/poolspec_generator.rb +65 -0
  36. data/generators/poolspec/templates/pool_spec_template.erb +9 -0
  37. data/lib/erlang/eb_server.erl +27 -0
  38. data/lib/poolparty.rb +56 -0
  39. data/lib/poolparty/base_packages/haproxy.rb +42 -0
  40. data/lib/poolparty/base_packages/heartbeat.rb +45 -0
  41. data/lib/poolparty/base_packages/poolparty.rb +36 -0
  42. data/lib/poolparty/base_packages/ruby.rb +43 -0
  43. data/lib/poolparty/core/array.rb +24 -0
  44. data/lib/{core → poolparty/core}/exception.rb +0 -0
  45. data/lib/poolparty/core/float.rb +13 -0
  46. data/lib/poolparty/core/hash.rb +29 -0
  47. data/lib/poolparty/core/kernel.rb +37 -0
  48. data/lib/{core → poolparty/core}/module.rb +18 -0
  49. data/lib/poolparty/core/my_open_struct.rb +18 -0
  50. data/lib/poolparty/core/object.rb +54 -0
  51. data/lib/poolparty/core/proc.rb +7 -0
  52. data/lib/poolparty/core/string.rb +72 -0
  53. data/lib/poolparty/core/symbol.rb +8 -0
  54. data/lib/{core → poolparty/core}/time.rb +15 -0
  55. data/lib/poolparty/exceptions/RemoteException.rb +12 -0
  56. data/lib/poolparty/exceptions/ResourceException.rb +7 -0
  57. data/lib/poolparty/exceptions/RuntimeException.rb +7 -0
  58. data/lib/poolparty/exceptions/SpecException.rb +7 -0
  59. data/lib/poolparty/exceptions/TemplateNotFound.rb +7 -0
  60. data/lib/poolparty/helpers/binary.rb +31 -0
  61. data/lib/poolparty/helpers/console.rb +30 -0
  62. data/lib/poolparty/helpers/display.rb +34 -0
  63. data/lib/poolparty/helpers/optioner.rb +64 -0
  64. data/lib/poolparty/helpers/provisioner_base.rb +250 -0
  65. data/lib/poolparty/helpers/provisioners/master.rb +136 -0
  66. data/lib/poolparty/helpers/provisioners/slave.rb +44 -0
  67. data/lib/poolparty/modules/cloud_resourcer.rb +89 -0
  68. data/lib/poolparty/modules/configurable.rb +34 -0
  69. data/lib/poolparty/modules/definable_resource.rb +59 -0
  70. data/lib/poolparty/modules/file_writer.rb +55 -0
  71. data/lib/poolparty/modules/method_missing_sugar.rb +53 -0
  72. data/lib/poolparty/modules/output.rb +13 -0
  73. data/lib/poolparty/modules/pretty_printer.rb +39 -0
  74. data/lib/{core/string.rb → poolparty/modules/s3_string.rb} +5 -22
  75. data/lib/{modules → poolparty/modules}/safe_instance.rb +0 -0
  76. data/lib/poolparty/monitors/base_monitor.rb +16 -0
  77. data/lib/poolparty/net/remote.rb +35 -0
  78. data/lib/poolparty/net/remote_bases/ec2.rb +148 -0
  79. data/lib/poolparty/net/remote_instance.rb +69 -0
  80. data/lib/poolparty/net/remoter.rb +224 -0
  81. data/lib/poolparty/net/remoter_base.rb +117 -0
  82. data/lib/poolparty/plugins/gem_package.rb +17 -0
  83. data/lib/poolparty/plugins/git.rb +41 -0
  84. data/lib/poolparty/plugins/line.rb +76 -0
  85. data/lib/poolparty/plugins/svn.rb +48 -0
  86. data/lib/poolparty/pool/base.rb +75 -0
  87. data/lib/poolparty/pool/cloud.rb +164 -0
  88. data/lib/poolparty/pool/custom_resource.rb +61 -0
  89. data/lib/poolparty/pool/loggable.rb +29 -0
  90. data/lib/poolparty/pool/plugin.rb +41 -0
  91. data/lib/poolparty/pool/plugin_model.rb +48 -0
  92. data/lib/poolparty/pool/pool.rb +55 -0
  93. data/lib/poolparty/pool/resource.rb +248 -0
  94. data/lib/poolparty/pool/resources/class_package.rb +64 -0
  95. data/lib/poolparty/pool/resources/conditional.rb +41 -0
  96. data/lib/poolparty/pool/resources/cron.rb +14 -0
  97. data/lib/poolparty/pool/resources/directory.rb +23 -0
  98. data/lib/poolparty/pool/resources/exec.rb +26 -0
  99. data/lib/poolparty/pool/resources/file.rb +23 -0
  100. data/lib/poolparty/pool/resources/gem.rb +14 -0
  101. data/lib/poolparty/pool/resources/host.rb +14 -0
  102. data/lib/poolparty/pool/resources/package.rb +14 -0
  103. data/lib/poolparty/pool/resources/remote_file.rb +22 -0
  104. data/lib/poolparty/pool/resources/service.rb +21 -0
  105. data/lib/poolparty/pool/resources/sshkey.rb +19 -0
  106. data/lib/poolparty/pool/resources/variable.rb +27 -0
  107. data/lib/poolparty/pool/script.rb +44 -0
  108. data/lib/poolparty/templates/authkeys +2 -0
  109. data/{config/monit/nginx.monit.conf → lib/poolparty/templates/cib.xml} +0 -0
  110. data/lib/poolparty/templates/fileserver.conf +4 -0
  111. data/lib/poolparty/templates/gem +25 -0
  112. data/{config/heartbeat.conf → lib/poolparty/templates/ha.cf} +3 -2
  113. data/{config → lib/poolparty/templates}/haproxy.conf +13 -6
  114. data/lib/poolparty/templates/namespaceauth.conf +19 -0
  115. data/lib/poolparty/templates/puppet.conf +17 -0
  116. data/lib/poolparty/version.rb +9 -0
  117. data/lib/poolpartycl.rb +3 -0
  118. data/poolparty.gemspec +56 -47
  119. data/script/destroy +14 -0
  120. data/script/generate +14 -0
  121. data/script/txt2html +82 -0
  122. data/setup.rb +1585 -0
  123. data/spec/poolparty/base_packages/haproxy_spec.rb +13 -0
  124. data/spec/poolparty/base_packages/heartbeat_spec.rb +30 -0
  125. data/spec/poolparty/bin/console_spec.rb +80 -0
  126. data/spec/poolparty/core/array_spec.rb +26 -0
  127. data/spec/poolparty/core/float.rb +13 -0
  128. data/spec/poolparty/core/hash_spec.rb +63 -0
  129. data/spec/poolparty/core/kernel_spec.rb +24 -0
  130. data/spec/poolparty/core/module_spec.rb +15 -0
  131. data/spec/poolparty/core/object_spec.rb +40 -0
  132. data/spec/poolparty/core/string_spec.rb +152 -0
  133. data/spec/poolparty/core/time_spec.rb +52 -0
  134. data/spec/poolparty/helpers/binary_spec.rb +26 -0
  135. data/spec/poolparty/helpers/display_spec.rb +13 -0
  136. data/spec/poolparty/helpers/optioner_spec.rb +39 -0
  137. data/spec/poolparty/helpers/provisioner_base_spec.rb +121 -0
  138. data/spec/poolparty/helpers/provisioners/master_spec.rb +54 -0
  139. data/spec/poolparty/helpers/provisioners/slave_spec.rb +28 -0
  140. data/spec/poolparty/modules/cloud_resourcer_spec.rb +135 -0
  141. data/spec/poolparty/modules/configurable_spec.rb +26 -0
  142. data/spec/poolparty/modules/definable_resource.rb +9 -0
  143. data/spec/poolparty/modules/file_writer_spec.rb +49 -0
  144. data/spec/poolparty/modules/s3_string_spec.rb +15 -0
  145. data/spec/poolparty/modules/tmp/willy/nilly.rb +1 -0
  146. data/spec/poolparty/net/remote_bases/ec2_spec.rb +92 -0
  147. data/spec/poolparty/net/remote_instance_spec.rb +70 -0
  148. data/spec/poolparty/net/remote_spec.rb +286 -0
  149. data/spec/poolparty/net/remoter_base_spec.rb +80 -0
  150. data/spec/poolparty/net/remoter_spec.rb +191 -0
  151. data/spec/poolparty/plugins/git_spec.rb +33 -0
  152. data/spec/poolparty/plugins/line_spec.rb +16 -0
  153. data/spec/poolparty/plugins/svn_spec.rb +16 -0
  154. data/spec/poolparty/pool/base_spec.rb +108 -0
  155. data/spec/poolparty/pool/cloud_spec.rb +299 -0
  156. data/spec/poolparty/pool/configurers/files/ruby_basic.rb +17 -0
  157. data/spec/poolparty/pool/configurers/files/ruby_plugins.rb +16 -0
  158. data/spec/poolparty/pool/configurers/ruby_spec.rb +58 -0
  159. data/spec/poolparty/pool/custom_resource_spec.rb +115 -0
  160. data/spec/poolparty/pool/example_spec.rb +112 -0
  161. data/spec/poolparty/pool/plugin_model_spec.rb +63 -0
  162. data/spec/poolparty/pool/plugin_spec.rb +85 -0
  163. data/spec/poolparty/pool/pool_spec.rb +83 -0
  164. data/spec/poolparty/pool/resource_spec.rb +224 -0
  165. data/spec/poolparty/pool/resources/class_package_spec.rb +84 -0
  166. data/spec/poolparty/pool/resources/conditional_spec.rb +38 -0
  167. data/spec/poolparty/pool/resources/cron_spec.rb +49 -0
  168. data/spec/poolparty/pool/resources/directory_spec.rb +40 -0
  169. data/spec/poolparty/pool/resources/exec_spec.rb +37 -0
  170. data/spec/poolparty/pool/resources/file_spec.rb +40 -0
  171. data/spec/poolparty/pool/resources/gem_spec.rb +16 -0
  172. data/spec/poolparty/pool/resources/host_spec.rb +28 -0
  173. data/spec/poolparty/pool/resources/package_spec.rb +44 -0
  174. data/spec/poolparty/pool/resources/remote_file_spec.rb +40 -0
  175. data/spec/poolparty/pool/resources/service_spec.rb +45 -0
  176. data/spec/poolparty/pool/resources/sshkey_spec.rb +48 -0
  177. data/spec/poolparty/pool/resources/variable_spec.rb +20 -0
  178. data/spec/poolparty/pool/script_spec.rb +51 -0
  179. data/spec/poolparty/pool/test_plugins/sshkey_test +2 -0
  180. data/{test/test_pool_party.rb → spec/poolparty/pool/test_plugins/virtual_host_template.erb} +0 -0
  181. data/spec/poolparty/pool/test_plugins/webserver.rb +46 -0
  182. data/spec/poolparty/poolparty_spec.rb +33 -0
  183. data/spec/poolparty/spec_helper.rb +120 -0
  184. data/tasks/cloud.rake +57 -0
  185. data/tasks/deployment.rake +34 -0
  186. data/tasks/development.rake +78 -0
  187. data/tasks/ec2.rake +20 -0
  188. data/tasks/environment.rake +7 -0
  189. data/tasks/instance.rake +63 -0
  190. data/tasks/server.rake +42 -0
  191. data/tasks/spec.rake +17 -0
  192. data/tasks/website.rake +17 -0
  193. data/test/test_generator_helper.rb +29 -0
  194. data/test/test_helper.rb +2 -0
  195. data/test/test_pool_spec_generator.rb +47 -0
  196. data/test/test_poolparty.rb +11 -0
  197. data/test_manifest.pp +538 -0
  198. data/website/index.html +107 -0
  199. data/website/index.txt +95 -0
  200. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  201. data/website/stylesheets/code.css +29 -0
  202. data/website/stylesheets/screen.css +147 -0
  203. data/website/template.html.erb +49 -0
  204. metadata +282 -101
  205. data/CHANGELOG +0 -4
  206. data/Manifest +0 -55
  207. data/bin/instance +0 -54
  208. data/config/config.yml +0 -23
  209. data/config/create_proxy_ami.sh +0 -582
  210. data/config/heartbeat_authkeys.conf +0 -2
  211. data/config/monit.conf +0 -8
  212. data/config/monit/haproxy.monit.conf +0 -7
  213. data/config/nginx.conf +0 -24
  214. data/lib/core/array.rb +0 -10
  215. data/lib/core/kernel.rb +0 -9
  216. data/lib/core/object.rb +0 -14
  217. data/lib/modules/callback.rb +0 -55
  218. data/lib/modules/ec2_wrapper.rb +0 -74
  219. data/lib/pool_party.rb +0 -69
  220. data/lib/pool_party/application.rb +0 -133
  221. data/lib/pool_party/init.rb +0 -4
  222. data/lib/pool_party/master.rb +0 -189
  223. data/lib/pool_party/monitors.rb +0 -13
  224. data/lib/pool_party/monitors/cpu.rb +0 -18
  225. data/lib/pool_party/monitors/memory.rb +0 -21
  226. data/lib/pool_party/monitors/web.rb +0 -18
  227. data/lib/pool_party/optioner.rb +0 -16
  228. data/lib/pool_party/os.rb +0 -11
  229. data/lib/pool_party/os/ubuntu.rb +0 -78
  230. data/lib/pool_party/remote_instance.rb +0 -180
  231. data/lib/pool_party/remoting.rb +0 -112
  232. data/lib/pool_party/scheduler.rb +0 -93
  233. data/lib/pool_party/tasks.rb +0 -220
  234. data/lib/s3/s3_object_store_folders.rb +0 -44
  235. data/spec/application_spec.rb +0 -32
  236. data/spec/callback_spec.rb +0 -65
  237. data/spec/helpers/ec2_mock.rb +0 -56
  238. data/spec/helpers/remote_instance_mock.rb +0 -11
  239. data/spec/kernel_spec.rb +0 -11
  240. data/spec/master_spec.rb +0 -147
  241. data/spec/monitor_spec.rb +0 -16
  242. data/spec/optioner_spec.rb +0 -22
  243. data/spec/poolparty_spec.rb +0 -8
  244. data/spec/remote_instance_spec.rb +0 -29
  245. data/spec/remoting_spec.rb +0 -75
  246. data/spec/spec_helper.rb +0 -38
  247. data/spec/string_spec.rb +0 -28
@@ -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
@@ -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')
@@ -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
+ @pools = o.poolname ? [pool(o.poolname.downcase.to_sym)] : pools
16
+
17
+ @pools.each do |name, pl|
18
+
19
+ with_pool(pl, {:testing => @testing}) do
20
+
21
+ puts header("Starting pool")
22
+ clouds.each do |name, cloud|
23
+ puts subheader("Cloud: #{name}")
24
+ puts "#{cloud.list_of_running_instances.size} running instances (#{cloud.minimum_instances} - #{cloud.maximum_instances})"
25
+ if (cloud.minimum_instances - cloud.list_of_running_instances.size) > 0
26
+ puts "Starting #{cloud.minimum_instances - cloud.list_of_running_instances.size} instances (from #{cloud.keypair})"
27
+ testing ? puts("\tNot launching while in testing mode") : cloud.launch_minimum_number_of_instances
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1 @@
1
+ #!/usr/bin/env ruby
@@ -0,0 +1,115 @@
1
+ require 'PoolParty/version'
2
+
3
+ AUTHOR = 'Ari Lerner' # can also be an array of Authors
4
+ EMAIL = "ari.lerner@citrusbyte.com"
5
+ DESCRIPTION =<<-EOM
6
+ Self-healing, auto-scaling cloud computing tool
7
+ EOM
8
+ GEM_NAME = 'poolparty' # what ppl will type to install your gem
9
+ RUBYFORGE_PROJECT = 'poolparty' # The unix name for your project
10
+ HOMEPAGE = "http://poolpartyrb.com"
11
+ HOMEPATH = "http://#{GEM_NAME}.rubyforge.org"
12
+ DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
13
+ EXTRA_DEPENDENCIES = [
14
+ ['activesupport'],
15
+ ['open4'],
16
+ ['logging'],
17
+ ["ruby2ruby"]
18
+ ] # An array of rubygem dependencies [name, version]
19
+
20
+ @config_file = "~/.rubyforge/user-config.yml"
21
+ @config = nil
22
+ RUBYFORGE_USERNAME = "unknown"
23
+ def rubyforge_username
24
+ unless @config
25
+ begin
26
+ @config = YAML.load(File.read(File.expand_path(@config_file)))
27
+ rescue
28
+ puts <<-EOS
29
+ ERROR: No rubyforge config file found: #{@config_file}
30
+ Run 'rubyforge setup' to prepare your env for access to Rubyforge
31
+ - See http://newgem.rubyforge.org/rubyforge.html for more details
32
+ EOS
33
+ exit
34
+ end
35
+ end
36
+ RUBYFORGE_USERNAME.replace @config["username"]
37
+ end
38
+
39
+
40
+ REV = nil
41
+ # UNCOMMENT IF REQUIRED:
42
+ # REV = YAML.load(`svn info`)['Revision']
43
+ VERS = PoolParty::VERSION::STRING + (REV ? ".#{REV}" : "")
44
+ RDOC_OPTS = ['--quiet', '--title', 'PoolParty documentation',
45
+ "--opname", "index.html",
46
+ "--line-numbers",
47
+ "--main", "README",
48
+ "--inline-source"]
49
+
50
+ class Hoe
51
+ def extra_deps
52
+ @extra_deps.reject! { |x| Array(x).first == 'hoe' }
53
+ @extra_deps
54
+ end
55
+ end
56
+
57
+ # Generate all the Rake tasks
58
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
59
+ $hoe = Hoe.new(GEM_NAME, VERS) do |p|
60
+ p.developer(AUTHOR, EMAIL)
61
+ p.description = DESCRIPTION
62
+ p.summary = DESCRIPTION
63
+ p.url = HOMEPATH
64
+ p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
65
+ p.test_globs = ["test/**/test_*.rb"]
66
+ p.clean_globs |= ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store'] #An array of file patterns to delete on clean.
67
+
68
+ # == Optional
69
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
70
+ p.extra_deps = EXTRA_DEPENDENCIES
71
+
72
+ #p.spec_extras = {} # A hash of extra values to set in the gemspec.
73
+ end
74
+
75
+ CHANGES = $hoe.paragraphs_of('History.txt', 0..1).join("\\n\\n")
76
+ PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
77
+ $hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
78
+ $hoe.rsync_args = '-av --delete --ignore-errors'
79
+ $hoe.spec.post_install_message = File.open(File.dirname(__FILE__) + "/../PostInstall.txt").read rescue ""
80
+
81
+ # # Gemspec creator
82
+ # spec = Gem::Specification.new do |s|
83
+ # s.name = GEM_NAME
84
+ # s.version = VERS
85
+ # s.platform = Gem::Platform::RUBY
86
+ # s.has_rdoc = true
87
+ # s.extra_rdoc_files = ["README.txt", "License.txt", 'History.txt']
88
+ # s.summary = DESCRIPTION
89
+ # s.description = s.summary
90
+ # s.author = AUTHOR
91
+ # s.email = EMAIL
92
+ # s.homepage = HOMEPATH
93
+ #
94
+ # # Uncomment this to add a dependency
95
+ # EXTRA_DEPENDENCIES.each do |arr|
96
+ # s.add_runtime_dependency arr
97
+ # end
98
+ # # s.extra_deps = EXTRA_DEPENDENCIES
99
+ #
100
+ # s.require_path = 'lib'
101
+ # s.autorequire = GEM_NAME
102
+ # s.files = %w(Rakefile History.txt README.txt) + Dir.glob("{examples,lib,specs,tasks,script,generators,bin}/**/*")
103
+ # end
104
+ #
105
+ # Rake::GemPackageTask.new(spec) do |pkg|
106
+ # pkg.gem_spec = spec
107
+ # end
108
+ #
109
+ # desc "create a gemspec file"
110
+ # task :make_spec do
111
+ # ::File.unlink "#{GEM_NAME.downcase}.gemspec" if ::File.exists?("#{GEM_NAME.downcase}.gemspec")
112
+ # ::File.open("#{GEM_NAME.downcase}.gemspec", "w+") do |file|
113
+ # file.puts spec.to_ruby
114
+ # end
115
+ # end
@@ -0,0 +1,15 @@
1
+ require 'fileutils'
2
+ include FileUtils
3
+
4
+ require 'rubygems'
5
+ %w[rake hoe newgem rubigen ruby2ruby].each do |req_gem|
6
+ begin
7
+ require req_gem
8
+ rescue LoadError
9
+ puts "This Rakefile requires the '#{req_gem}' RubyGem."
10
+ puts "Installation: gem install #{req_gem} -y"
11
+ exit
12
+ end
13
+ end
14
+
15
+ $:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))
@@ -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,13 @@
1
+ require File.dirname(__FILE__) + "/pool/test_plugins/webserver"
2
+
3
+ pool :app do
4
+
5
+ instances 2..10
6
+
7
+ cloud :app do
8
+ apache do
9
+ enable_php
10
+ end
11
+ end
12
+
13
+ end
@@ -0,0 +1,12 @@
1
+ # Poolparty spec
2
+
3
+ pool :poolparty do
4
+
5
+ instances 2..5
6
+
7
+ cloud :app do
8
+ keypair "auser"
9
+ ami "ami-4bb05422"
10
+ end
11
+
12
+ 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,5 @@
1
+ Description:
2
+
3
+
4
+ Usage:
5
+
@@ -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
@@ -0,0 +1,9 @@
1
+ # Basic poolparty template
2
+
3
+ pool :<%= name -%> do
4
+
5
+ cloud :app do
6
+
7
+ end
8
+
9
+ end
@@ -0,0 +1,27 @@
1
+ %%%***************************************
2
+ %%%
3
+ %%% PoolParty node-server
4
+ %%% Author: Ari Lerner <ari.the.lerner@gmail.com>
5
+ %%%
6
+ %%% Description: This server runs on the poolparty nodes
7
+ %%%
8
+ %%%***************************************
9
+
10
+ % The name of our module
11
+ -module (eb_server).
12
+ % We are using the gen_server behaviour
13
+ -behaviour (gen_server).
14
+
15
+ % API methods
16
+ -export ([start_link/0]).
17
+
18
+ % gen_server callbacks
19
+ -export ([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
20
+
21
+ % Define the structure of the tuple state
22
+ -record (state, {}).
23
+ -define (SERVER, ?MODULE).
24
+
25
+ % API Methods
26
+ start_link() ->
27
+ gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
@@ -0,0 +1,56 @@
1
+ require 'rubygems'
2
+
3
+ # Load required gems
4
+ require 'active_support'
5
+ require 'open4'
6
+ require "ftools"
7
+ require "logging"
8
+ require "ruby2ruby"
9
+
10
+ # Use active supports auto load mechanism
11
+ ActiveSupport::Dependencies.load_paths << File.dirname(__FILE__)
12
+
13
+ ## Load PoolParty
14
+ require "#{File.dirname(__FILE__)}/poolparty/version"
15
+
16
+ %w(core modules exceptions net).each do |dir|
17
+ Dir[File.dirname(__FILE__) + "/poolparty/#{dir}/**.rb"].each do |file|
18
+ require file
19
+ end
20
+ end
21
+
22
+ Kernel.load_p File.dirname(__FILE__) + "/poolparty/pool"
23
+
24
+ module PoolParty
25
+ include FileWriter
26
+
27
+ def logger
28
+ @pool_logger ||= make_new_logger
29
+ end
30
+
31
+ private
32
+ #:nodoc:#
33
+ def make_new_logger
34
+ FileUtils.mkdir_p Base.pool_logger_location unless ::File.directory?(Base.pool_logger_location)
35
+ Loggable.new
36
+ end
37
+ end
38
+
39
+ class Object
40
+ include PoolParty
41
+ include PoolParty::Pool
42
+ include PoolParty::Cloud
43
+
44
+ include PoolParty::DefinableResource
45
+ end
46
+
47
+ class Class
48
+ include PoolParty::PluginModel
49
+ end
50
+
51
+ ## Load PoolParty Plugins and package
52
+ %w(plugins base_packages).each do |dir|
53
+ Dir[File.dirname(__FILE__) + "/poolparty/#{dir}/**.rb"].each do |file|
54
+ require file
55
+ end
56
+ end