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.
Files changed (199) hide show
  1. data/History.txt +22 -0
  2. data/License.txt +20 -0
  3. data/README.txt +52 -0
  4. data/Rakefile +4 -109
  5. data/bin/cloud +31 -0
  6. data/bin/cloud-add-keypair +23 -0
  7. data/bin/cloud-configure +35 -0
  8. data/bin/cloud-contract +27 -0
  9. data/bin/cloud-expand +27 -0
  10. data/bin/cloud-list +32 -0
  11. data/bin/cloud-maintain +36 -0
  12. data/bin/cloud-provision +30 -0
  13. data/bin/cloud-reconfigure +24 -0
  14. data/bin/cloud-ssh +18 -0
  15. data/bin/cloud-start +29 -0
  16. data/bin/pool +23 -75
  17. data/bin/pool-console +12 -0
  18. data/bin/pool-describe +9 -0
  19. data/bin/pool-list +28 -0
  20. data/bin/pool-provision +34 -0
  21. data/bin/pool-spec +17 -0
  22. data/bin/pool-start +32 -0
  23. data/examples/basic.rb +20 -0
  24. data/examples/plugin_without_plugin_directory.rb +13 -0
  25. data/examples/poolparty.rb +12 -0
  26. data/examples/with_apache_plugin.rb +22 -0
  27. data/generators/poolspec/USAGE +5 -0
  28. data/generators/poolspec/poolspec_generator.rb +65 -0
  29. data/generators/poolspec/templates/pool_spec_template.erb +9 -0
  30. data/lib/erlang/eb_server.erl +27 -0
  31. data/lib/poolparty.rb +40 -116
  32. data/lib/poolparty/base_packages/haproxy.rb +41 -0
  33. data/lib/poolparty/base_packages/heartbeat.rb +43 -0
  34. data/lib/poolparty/base_packages/poolparty.rb +18 -0
  35. data/lib/poolparty/base_packages/ruby.rb +27 -0
  36. data/lib/poolparty/core/array.rb +24 -0
  37. data/lib/{core → poolparty/core}/exception.rb +0 -0
  38. data/lib/{core → poolparty/core}/float.rb +0 -0
  39. data/lib/poolparty/core/hash.rb +29 -0
  40. data/lib/poolparty/core/kernel.rb +34 -0
  41. data/lib/{core → poolparty/core}/module.rb +18 -0
  42. data/lib/poolparty/core/my_open_struct.rb +18 -0
  43. data/lib/poolparty/core/object.rb +54 -0
  44. data/lib/poolparty/core/proc.rb +2 -0
  45. data/lib/poolparty/core/string.rb +72 -0
  46. data/lib/poolparty/core/symbol.rb +8 -0
  47. data/lib/{core → poolparty/core}/time.rb +15 -0
  48. data/lib/poolparty/exceptions/RemoteException.rb +12 -0
  49. data/lib/poolparty/exceptions/ResourceException.rb +7 -0
  50. data/lib/poolparty/exceptions/RuntimeException.rb +7 -0
  51. data/lib/poolparty/exceptions/SpecException.rb +7 -0
  52. data/lib/poolparty/exceptions/TemplateNotFound.rb +7 -0
  53. data/lib/poolparty/helpers/binary.rb +30 -0
  54. data/lib/poolparty/helpers/console.rb +30 -0
  55. data/lib/poolparty/helpers/display.rb +25 -0
  56. data/lib/poolparty/helpers/optioner.rb +61 -0
  57. data/lib/poolparty/helpers/provisioner_base.rb +226 -0
  58. data/lib/poolparty/helpers/provisioners/master.rb +120 -0
  59. data/lib/poolparty/helpers/provisioners/slave.rb +52 -0
  60. data/lib/poolparty/modules/cloud_resourcer.rb +72 -0
  61. data/lib/poolparty/modules/configurable.rb +34 -0
  62. data/lib/poolparty/modules/definable_resource.rb +59 -0
  63. data/lib/poolparty/modules/file_writer.rb +55 -0
  64. data/lib/poolparty/modules/method_missing_sugar.rb +17 -0
  65. data/lib/poolparty/modules/output.rb +13 -0
  66. data/lib/poolparty/modules/pretty_printer.rb +38 -0
  67. data/lib/{core/string.rb → poolparty/modules/s3_string.rb} +5 -29
  68. data/lib/{modules → poolparty/modules}/safe_instance.rb +0 -0
  69. data/lib/poolparty/monitors/base_monitor.rb +16 -0
  70. data/lib/poolparty/net/remote.rb +35 -0
  71. data/lib/poolparty/net/remote_bases/ec2.rb +145 -0
  72. data/lib/poolparty/net/remote_instance.rb +68 -0
  73. data/lib/poolparty/net/remoter.rb +209 -0
  74. data/lib/poolparty/net/remoter_base.rb +117 -0
  75. data/lib/poolparty/plugins/gem_package.rb +39 -0
  76. data/lib/poolparty/plugins/line.rb +76 -0
  77. data/lib/poolparty/plugins/svn.rb +48 -0
  78. data/lib/poolparty/pool/base.rb +74 -0
  79. data/lib/poolparty/pool/cloud.rb +132 -0
  80. data/lib/poolparty/pool/custom_resource.rb +61 -0
  81. data/lib/poolparty/pool/loggable.rb +29 -0
  82. data/lib/poolparty/pool/plugin.rb +42 -0
  83. data/lib/poolparty/pool/plugin_model.rb +48 -0
  84. data/lib/poolparty/pool/pool.rb +55 -0
  85. data/lib/poolparty/pool/resource.rb +235 -0
  86. data/lib/poolparty/pool/resources/class_package.rb +60 -0
  87. data/lib/poolparty/pool/resources/cron.rb +14 -0
  88. data/lib/poolparty/pool/resources/directory.rb +23 -0
  89. data/lib/poolparty/pool/resources/exec.rb +26 -0
  90. data/lib/poolparty/pool/resources/file.rb +23 -0
  91. data/lib/poolparty/pool/resources/gem.rb +14 -0
  92. data/lib/poolparty/pool/resources/host.rb +14 -0
  93. data/lib/poolparty/pool/resources/package.rb +14 -0
  94. data/lib/poolparty/pool/resources/remote_file.rb +20 -0
  95. data/lib/poolparty/pool/resources/service.rb +21 -0
  96. data/lib/poolparty/pool/resources/sshkey.rb +19 -0
  97. data/lib/poolparty/pool/resources/variable.rb +27 -0
  98. data/lib/poolparty/pool/script.rb +21 -0
  99. data/{config/heartbeat_authkeys.conf → lib/poolparty/templates/authkeys} +0 -0
  100. data/lib/poolparty/templates/cib.xml +1 -0
  101. data/lib/poolparty/templates/fileserver.conf +4 -0
  102. data/{config/heartbeat.conf → lib/poolparty/templates/ha.cf} +3 -1
  103. data/{config → lib/poolparty/templates}/haproxy.conf +13 -6
  104. data/lib/poolparty/templates/namespaceauth.conf +19 -0
  105. data/lib/poolparty/templates/puppet.conf +13 -0
  106. data/lib/poolparty/version.rb +9 -0
  107. data/lib/poolpartycl.rb +3 -0
  108. data/script/destroy +14 -0
  109. data/script/generate +14 -0
  110. data/script/txt2html +82 -0
  111. data/{lib/poolparty/tasks → tasks}/cloud.rake +1 -1
  112. data/tasks/deployment.rake +34 -0
  113. data/tasks/development.rake +78 -0
  114. data/{lib/poolparty/tasks → tasks}/ec2.rake +1 -1
  115. data/tasks/environment.rake +7 -0
  116. data/{lib/poolparty/tasks → tasks}/instance.rake +0 -0
  117. data/{lib/poolparty/tasks → tasks}/server.rake +0 -0
  118. data/tasks/spec.rake +17 -0
  119. data/tasks/website.rake +17 -0
  120. metadata +154 -249
  121. data/CHANGELOG +0 -23
  122. data/LICENSE +0 -22
  123. data/README +0 -139
  124. data/assets/clouds.png +0 -0
  125. data/bin/instance +0 -68
  126. data/bin/poolnotify +0 -34
  127. data/config/cloud_master_takeover +0 -17
  128. data/config/create_proxy_ami.sh +0 -582
  129. data/config/installers/ubuntu_install.sh +0 -77
  130. data/config/monit.conf +0 -9
  131. data/config/monit/haproxy.monit.conf +0 -8
  132. data/config/monit/nginx.monit.conf +0 -0
  133. data/config/nginx.conf +0 -24
  134. data/config/reconfigure_instances_script.sh +0 -37
  135. data/config/sample-config.yml +0 -23
  136. data/config/scp_instances_script.sh +0 -12
  137. data/lib/core/array.rb +0 -16
  138. data/lib/core/hash.rb +0 -11
  139. data/lib/core/kernel.rb +0 -12
  140. data/lib/core/object.rb +0 -21
  141. data/lib/core/proc.rb +0 -15
  142. data/lib/helpers/plugin_spec_helper.rb +0 -58
  143. data/lib/modules/callback.rb +0 -133
  144. data/lib/modules/ec2_wrapper.rb +0 -108
  145. data/lib/modules/file_writer.rb +0 -38
  146. data/lib/modules/sprinkle_overrides.rb +0 -27
  147. data/lib/modules/vlad_override.rb +0 -83
  148. data/lib/poolparty/application.rb +0 -199
  149. data/lib/poolparty/init.rb +0 -6
  150. data/lib/poolparty/master.rb +0 -492
  151. data/lib/poolparty/monitors.rb +0 -11
  152. data/lib/poolparty/monitors/cpu.rb +0 -23
  153. data/lib/poolparty/monitors/memory.rb +0 -33
  154. data/lib/poolparty/monitors/web.rb +0 -29
  155. data/lib/poolparty/optioner.rb +0 -20
  156. data/lib/poolparty/plugin.rb +0 -78
  157. data/lib/poolparty/provider.rb +0 -104
  158. data/lib/poolparty/provider/essential.rb +0 -6
  159. data/lib/poolparty/provider/git.rb +0 -8
  160. data/lib/poolparty/provider/haproxy.rb +0 -9
  161. data/lib/poolparty/provider/heartbeat.rb +0 -6
  162. data/lib/poolparty/provider/rsync.rb +0 -8
  163. data/lib/poolparty/provider/ruby.rb +0 -65
  164. data/lib/poolparty/provider/s3fuse.rb +0 -22
  165. data/lib/poolparty/remote_instance.rb +0 -250
  166. data/lib/poolparty/remoter.rb +0 -171
  167. data/lib/poolparty/remoting.rb +0 -137
  168. data/lib/poolparty/scheduler.rb +0 -93
  169. data/lib/poolparty/tasks.rb +0 -47
  170. data/lib/poolparty/tasks/development.rake +0 -78
  171. data/lib/poolparty/tasks/plugins.rake +0 -30
  172. data/lib/poolparty/thread_pool.rb +0 -94
  173. data/lib/s3/s3_object_store_folders.rb +0 -44
  174. data/poolparty.gemspec +0 -71
  175. data/spec/files/describe_response +0 -37
  176. data/spec/files/multi_describe_response +0 -69
  177. data/spec/files/remote_desc_response +0 -37
  178. data/spec/helpers/ec2_mock.rb +0 -57
  179. data/spec/lib/core/core_spec.rb +0 -26
  180. data/spec/lib/core/kernel_spec.rb +0 -24
  181. data/spec/lib/core/string_spec.rb +0 -28
  182. data/spec/lib/modules/callback_spec.rb +0 -213
  183. data/spec/lib/modules/file_writer_spec.rb +0 -74
  184. data/spec/lib/poolparty/application_spec.rb +0 -135
  185. data/spec/lib/poolparty/ec2_wrapper_spec.rb +0 -110
  186. data/spec/lib/poolparty/master_spec.rb +0 -479
  187. data/spec/lib/poolparty/optioner_spec.rb +0 -34
  188. data/spec/lib/poolparty/plugin_spec.rb +0 -115
  189. data/spec/lib/poolparty/poolparty_spec.rb +0 -60
  190. data/spec/lib/poolparty/provider_spec.rb +0 -74
  191. data/spec/lib/poolparty/remote_instance_spec.rb +0 -178
  192. data/spec/lib/poolparty/remoter_spec.rb +0 -72
  193. data/spec/lib/poolparty/remoting_spec.rb +0 -148
  194. data/spec/lib/poolparty/scheduler_spec.rb +0 -70
  195. data/spec/monitors/cpu_monitor_spec.rb +0 -39
  196. data/spec/monitors/memory_spec.rb +0 -51
  197. data/spec/monitors/misc_monitor_spec.rb +0 -51
  198. data/spec/monitors/web_spec.rb +0 -40
  199. data/spec/spec_helper.rb +0 -53
@@ -0,0 +1,60 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ # Wrap all the resources into a class package from
5
+ def classpackage_with_self(parent=self, &block)
6
+ @cp = PoolParty::Resources::Classpackage.new(parent.options, parent, &block)
7
+ @cp.instance_eval {@resources = parent.resources}
8
+ parent.instance_eval {@resources = nil}
9
+ @cp
10
+ end
11
+
12
+ class Classpackage < Resource
13
+
14
+ default_options({
15
+ :name => nil
16
+ })
17
+
18
+ def initialize(opts={}, parent=self, &block)
19
+ # Take the options of the parents
20
+ set_vars_from_options(opts) unless opts.empty?
21
+ self.instance_eval &block if block
22
+ set_parent(parent) if parent
23
+
24
+ loaded
25
+ end
26
+
27
+ def to_string
28
+ returning String.new do |output|
29
+ output << "# #{@parent.name.sanitize}"
30
+ output << "\nclass #{@parent.name.sanitize} {\n"
31
+ output << resources_string_from_resources(resources)
32
+ output << "\n}\n"
33
+ end
34
+ end
35
+
36
+ def include_string
37
+ "include #{@parent.name.sanitize}"
38
+ end
39
+
40
+ end
41
+
42
+ def resources_string_from_resources(resources, prev="\t")
43
+ @variables = resources.extract! {|name,resource| name == :variable}
44
+ returning Array.new do |str|
45
+ unless @variables.empty?
46
+ str << "\n# Variables \n"
47
+ @variables.each do |name, variable|
48
+ str << variable.to_string("#{prev}")
49
+ end
50
+ end
51
+
52
+ resources.each do |type, resource|
53
+ str << "\n#{prev*2}# #{type}\n"
54
+ str << resource.to_string("#{prev*2}")
55
+ end
56
+ end.join("\n")
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,14 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Cron < Resource
5
+
6
+ default_options({
7
+ :command => nil,
8
+ :user => "root"
9
+ })
10
+
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Directory < Resource
5
+
6
+ default_options({
7
+ :ensure => "directory",
8
+ :mode => 644,
9
+ :owner => "#{Base.user}"
10
+ })
11
+
12
+ def class_type_name
13
+ "file"
14
+ end
15
+
16
+ def present
17
+ 'directory'
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,26 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Exec < Resource
5
+
6
+ default_options({
7
+ :path => "/usr/bin:/bin:/usr/local/bin:$PATH"
8
+ })
9
+
10
+
11
+ def disallowed_options
12
+ [:ensure, :name]
13
+ end
14
+
15
+ def key
16
+ name || command
17
+ end
18
+
19
+ def present
20
+ "running"
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class File < Resource
5
+
6
+ default_options({
7
+ :ensure => "file",
8
+ :mode => 644,
9
+ :owner => "#{Base.user}"
10
+ })
11
+
12
+ def disallowed_options
13
+ [:name, :template]
14
+ end
15
+
16
+ def source(arg=nil)
17
+ arg ? options[:source] = arg : "#{Base.fileserver_base}/#{::File.basename(name)}"
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ def gem(opts={}, &block)
5
+ add_resource(:package, opts.merge({
6
+ :provider => "gem",
7
+ :requires => "Package[rubygems]"
8
+ }), &block)
9
+ end
10
+
11
+ add_has_and_does_not_have_methods_for(:gem)
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Host < Resource
5
+
6
+ default_options({
7
+ :name => "$hostname",
8
+ :ip => "$ipaddress"
9
+ })
10
+
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Package < Resource
5
+
6
+ default_options({
7
+ :ensure => "installed",
8
+ :name => nil
9
+ })
10
+
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Remotefile < File
5
+
6
+ default_options({
7
+ :ensure => "present",
8
+ :mode => 644,
9
+ :owner => "#{Base.user}",
10
+ :source => nil
11
+ })
12
+
13
+ def class_type_name
14
+ "file"
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Service < Resource
5
+
6
+ default_options({
7
+ :ensure => "running",
8
+ :name => nil,
9
+ :enable => true
10
+ })
11
+
12
+ def present
13
+ "running"
14
+ end
15
+ def absent
16
+ "stopping"
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Sshkey < Resource
5
+
6
+ default_options({
7
+ :command => nil,
8
+ :key => "ALONGSTRINGOFDIGITS",
9
+ :target => "~/.ssh/poolparty_id_rsa"
10
+ })
11
+
12
+ def keyfile=(file)
13
+ keyfile open(file).read
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Variable < Resource
5
+
6
+ default_options({
7
+ :name => "var",
8
+ :value => ""
9
+ })
10
+
11
+ def to_string(prev="\t")
12
+ "$#{name} = #{value_string}"
13
+ end
14
+
15
+ def value_string
16
+ case value.class.to_s
17
+ when "Array"
18
+ "[ #{value.map{|a| "'#{a}'"}.join(", ")} ]"
19
+ else
20
+ "'#{value}'"
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ module PoolParty
2
+
3
+ class Script
4
+
5
+ def self.inflate_file(file)
6
+ inflate open(file).read
7
+ end
8
+
9
+ def self.inflate(script, file="__SCRIPT__")
10
+ apool = new
11
+ apool.instance_eval script, file
12
+ apool.inflate
13
+ end
14
+
15
+ def inflate
16
+ pools.map {|name,pool| pool.inflate } unless pools.empty?
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1 @@
1
+ <!-- cib.xml -->
@@ -0,0 +1,4 @@
1
+ [files]
2
+ path /var/poolparty/tmp
3
+ allow *
4
+ allow *.internal
@@ -1,8 +1,10 @@
1
+ # Haproxy conf
1
2
  keepalive 2 # Time inbetween heartbeats
2
3
  deadtime 32 # wait 32 seconds before declaring dead
3
4
  warntime 16 # issue a warning halfway through
4
5
  initdead 60 # Don't boot instances between 60 seconds of each other
5
6
  auto_failback on
6
7
  use_logd yes
8
+ crm on
7
9
 
8
- :nodes
10
+ node <%= nodenames.join(" ") %>
@@ -3,7 +3,8 @@ global
3
3
  maxconn 4096 # total max connections (dependent on ulimit)
4
4
  nbproc 1 # number of processing cores
5
5
  user haproxy
6
- chroot /var/run/haproxy
6
+ group haproxy
7
+ chroot /var/run/haproxy
7
8
  log 127.0.0.1 local0 debug
8
9
  pidfile /var/run/haproxy.pid
9
10
 
@@ -17,13 +18,19 @@ defaults
17
18
  option httplog
18
19
  option httpclose # disable keepalive (HAProxy does not yet support the HTTP keep-alive mode)
19
20
  option forwardfor # enable insert of X-Forwarded-For headers
20
- retries 3
21
+ retries 3
22
+ option redispatch
21
23
 
22
24
  balance roundrobin # each server is used in turns, according to assigned weight
23
25
 
24
-
26
+ # Stats
27
+ stats enable
25
28
  stats uri /haproxy
26
- stats realm Statistics\ for\ poolparty
29
+ stats realm Statistics\ for\ <%= name %>
27
30
 
28
- listen web_proxy 0.0.0.0::host_port
29
- :servers
31
+ listen <%= name %>
32
+ bind :<%= ports.join(",:") %>
33
+ <% node_ips.each_with_index do |ip, index| -%>
34
+ cookie POOLPARTYPARTY
35
+ server node<%= index %> <%= ip %>:<%= forwarding_port %> weight 1 check cookie
36
+ <% end -%>
@@ -0,0 +1,19 @@
1
+ [fileserver]
2
+ allow *
3
+ allow *.internal
4
+
5
+ [puppetmaster]
6
+ allow *
7
+ allow *.internal
8
+
9
+ [puppetrunner]
10
+ allow *
11
+ allow *.internal
12
+
13
+ [puppetbucket]
14
+ allow *
15
+ allow *.internal
16
+
17
+ [puppetreports]
18
+ allow *
19
+ allow *.internal
@@ -0,0 +1,13 @@
1
+ [main]
2
+ vardir = /var/lib/puppet
3
+ logdir = /var/log/puppet
4
+ templatepath = /var/lib/puppet/templates
5
+
6
+ [puppetd]
7
+ localconfig = ${vardir}/localconfig
8
+ pluginsync=false
9
+ factsync=false
10
+ report=true
11
+
12
+ [puppetmasterd]
13
+ certname = puppet
@@ -0,0 +1,9 @@
1
+ module PoolParty
2
+ module VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 2
5
+ TINY = 2
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/poolparty/helpers/**.rb"].each do |lib|
2
+ require lib
3
+ end
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)