auser-poolparty 0.2.79 → 0.2.80

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/Manifest.txt +38 -33
  2. data/PostInstall.txt +1 -1
  3. data/bin/cloud-provision +1 -1
  4. data/bin/cloud-spec +40 -0
  5. data/lib/poolparty.rb +2 -2
  6. data/lib/poolparty/base_packages/poolparty.rb +1 -1
  7. data/lib/poolparty/extra/deployments.rb +31 -0
  8. data/lib/poolparty/helpers/binary.rb +9 -0
  9. data/lib/poolparty/modules/cloud_dsl.rb +1 -1
  10. data/lib/poolparty/modules/cloud_resourcer.rb +2 -0
  11. data/lib/poolparty/modules/file_writer.rb +2 -2
  12. data/lib/poolparty/net/messenger.rb +1 -1
  13. data/lib/poolparty/net/remote_bases/ec2.rb +5 -2
  14. data/lib/poolparty/net/remoter.rb +2 -4
  15. data/lib/poolparty/net/remoter_base.rb +7 -0
  16. data/lib/poolparty/poolparty/cloud.rb +22 -7
  17. data/lib/poolparty/poolparty/plugin_model.rb +4 -4
  18. data/lib/poolparty/poolparty/pool.rb +1 -0
  19. data/lib/poolparty/poolparty/resource.rb +1 -1
  20. data/lib/poolparty/poolparty/resources/directory.rb +2 -2
  21. data/lib/poolparty/poolparty/resources/file.rb +2 -2
  22. data/lib/poolparty/poolparty/resources/remote_file.rb +1 -1
  23. data/lib/poolparty/poolparty/resources/remote_user.rb +17 -0
  24. data/lib/poolparty/{helpers → provisioners}/provisioner_base.rb +10 -4
  25. data/lib/poolparty/{helpers → provisioners}/provisioners/master.rb +11 -7
  26. data/lib/poolparty/{helpers → provisioners}/provisioners/slave.rb +0 -0
  27. data/lib/poolparty/templates/puppetrerun +2 -1
  28. data/lib/poolparty/version.rb +1 -1
  29. data/poolparty.gemspec +42 -36
  30. data/spec/poolparty/extra/deployments_spec.rb +64 -0
  31. data/spec/poolparty/helpers/provisioner_base_spec.rb +0 -1
  32. data/spec/poolparty/helpers/provisioners/master_spec.rb +0 -1
  33. data/spec/poolparty/helpers/provisioners/slave_spec.rb +0 -1
  34. data/spec/poolparty/{pool → poolparty}/base_spec.rb +0 -0
  35. data/spec/poolparty/{pool → poolparty}/cloud_spec.rb +37 -0
  36. data/spec/poolparty/{pool → poolparty}/configurers/files/ruby_basic.rb +0 -0
  37. data/spec/poolparty/{pool → poolparty}/configurers/files/ruby_plugins.rb +0 -0
  38. data/spec/poolparty/{pool → poolparty}/configurers/ruby_spec.rb +0 -0
  39. data/spec/poolparty/{pool → poolparty}/custom_resource_spec.rb +0 -0
  40. data/spec/poolparty/{pool → poolparty}/example_spec.rb +0 -0
  41. data/spec/poolparty/{pool → poolparty}/plugin_model_spec.rb +0 -0
  42. data/spec/poolparty/{pool → poolparty}/plugin_spec.rb +0 -0
  43. data/spec/poolparty/{pool → poolparty}/pool_spec.rb +0 -0
  44. data/spec/poolparty/{pool → poolparty}/resource_spec.rb +0 -0
  45. data/spec/poolparty/{pool → poolparty}/resources/class_package_spec.rb +0 -0
  46. data/spec/poolparty/{pool → poolparty}/resources/conditional_spec.rb +0 -0
  47. data/spec/poolparty/{pool → poolparty}/resources/cron_spec.rb +0 -0
  48. data/spec/poolparty/{pool → poolparty}/resources/directory_spec.rb +0 -0
  49. data/spec/poolparty/{pool → poolparty}/resources/exec_spec.rb +0 -0
  50. data/spec/poolparty/{pool → poolparty}/resources/file_spec.rb +0 -0
  51. data/spec/poolparty/{pool → poolparty}/resources/gem_spec.rb +0 -0
  52. data/spec/poolparty/{pool → poolparty}/resources/host_spec.rb +0 -0
  53. data/spec/poolparty/{pool → poolparty}/resources/package_spec.rb +0 -0
  54. data/spec/poolparty/{pool → poolparty}/resources/remote_file_spec.rb +0 -0
  55. data/spec/poolparty/{pool → poolparty}/resources/service_spec.rb +0 -0
  56. data/spec/poolparty/{pool → poolparty}/resources/sshkey_spec.rb +0 -0
  57. data/spec/poolparty/{pool → poolparty}/resources/symlink_spec.rb +0 -0
  58. data/spec/poolparty/poolparty/resources/user_spec.rb +38 -0
  59. data/spec/poolparty/{pool → poolparty}/resources/variable_spec.rb +0 -0
  60. data/spec/poolparty/{pool → poolparty}/script_spec.rb +0 -0
  61. data/spec/poolparty/{pool → poolparty}/test_plugins/sshkey_test +0 -0
  62. data/spec/poolparty/{pool → poolparty}/test_plugins/virtual_host_template.erb +0 -0
  63. data/spec/poolparty/{pool → poolparty}/test_plugins/webserver.rb +0 -0
  64. data/website/index.html +107 -0
  65. metadata +42 -36
  66. data/lib/erlang/messenger/src/pm_client_old.erl +0 -52
data/Manifest.txt CHANGED
@@ -18,6 +18,7 @@ bin/cloud-provision
18
18
  bin/cloud-refresh
19
19
  bin/cloud-rsync
20
20
  bin/cloud-run
21
+ bin/cloud-spec
21
22
  bin/cloud-ssh
22
23
  bin/cloud-start
23
24
  bin/cloud-stats
@@ -152,7 +153,6 @@ lib/erlang/messenger/src/client_server.erl
152
153
  lib/erlang/messenger/src/master_app.erl
153
154
  lib/erlang/messenger/src/node_app.erl
154
155
  lib/erlang/messenger/src/pm_client.erl
155
- lib/erlang/messenger/src/pm_client_old.erl
156
156
  lib/erlang/messenger/src/pm_client_supervisor.erl
157
157
  lib/erlang/messenger/src/pm_cluster.erl
158
158
  lib/erlang/messenger/src/pm_event_manager.erl
@@ -199,14 +199,12 @@ lib/poolparty/exceptions/RuntimeException.rb
199
199
  lib/poolparty/exceptions/SpecException.rb
200
200
  lib/poolparty/exceptions/TemplateNotFound.rb
201
201
  lib/poolparty/exceptions/UnacceptableCommand.rb
202
+ lib/poolparty/extra/deployments.rb
202
203
  lib/poolparty/helpers/binary.rb
203
204
  lib/poolparty/helpers/console.rb
204
205
  lib/poolparty/helpers/display.rb
205
206
  lib/poolparty/helpers/nice_printer.rb
206
207
  lib/poolparty/helpers/optioner.rb
207
- lib/poolparty/helpers/provisioner_base.rb
208
- lib/poolparty/helpers/provisioners/master.rb
209
- lib/poolparty/helpers/provisioners/slave.rb
210
208
  lib/poolparty/helpers/ruberl.rb
211
209
  lib/poolparty/modules/cloud_dsl.rb
212
210
  lib/poolparty/modules/cloud_resourcer.rb
@@ -257,11 +255,15 @@ lib/poolparty/poolparty/resources/host.rb
257
255
  lib/poolparty/poolparty/resources/mount.rb
258
256
  lib/poolparty/poolparty/resources/package.rb
259
257
  lib/poolparty/poolparty/resources/remote_file.rb
258
+ lib/poolparty/poolparty/resources/remote_user.rb
260
259
  lib/poolparty/poolparty/resources/service.rb
261
260
  lib/poolparty/poolparty/resources/sshkey.rb
262
261
  lib/poolparty/poolparty/resources/symlink.rb
263
262
  lib/poolparty/poolparty/resources/variable.rb
264
263
  lib/poolparty/poolparty/script.rb
264
+ lib/poolparty/provisioners/provisioner_base.rb
265
+ lib/poolparty/provisioners/provisioners/master.rb
266
+ lib/poolparty/provisioners/provisioners/slave.rb
265
267
  lib/poolparty/spec/core/string.rb
266
268
  lib/poolparty/spec/matchers/a_spec_extensions_base.rb
267
269
  lib/poolparty/spec/matchers/have_cron.rb
@@ -325,6 +327,7 @@ spec/poolparty/core/object_spec.rb
325
327
  spec/poolparty/core/string_spec.rb
326
328
  spec/poolparty/core/time_spec.rb
327
329
  spec/poolparty/dependency_resolutions/base_spec.rb
330
+ spec/poolparty/extra/deployments_spec.rb
328
331
  spec/poolparty/helpers/binary_spec.rb
329
332
  spec/poolparty/helpers/display_spec.rb
330
333
  spec/poolparty/helpers/optioner_spec.rb
@@ -349,35 +352,36 @@ spec/poolparty/plugins/deploydirectory_spec.rb
349
352
  spec/poolparty/plugins/git_spec.rb
350
353
  spec/poolparty/plugins/line_spec.rb
351
354
  spec/poolparty/plugins/svn_spec.rb
352
- spec/poolparty/pool/base_spec.rb
353
- spec/poolparty/pool/cloud_spec.rb
354
- spec/poolparty/pool/configurers/files/ruby_basic.rb
355
- spec/poolparty/pool/configurers/files/ruby_plugins.rb
356
- spec/poolparty/pool/configurers/ruby_spec.rb
357
- spec/poolparty/pool/custom_resource_spec.rb
358
- spec/poolparty/pool/example_spec.rb
359
- spec/poolparty/pool/plugin_model_spec.rb
360
- spec/poolparty/pool/plugin_spec.rb
361
- spec/poolparty/pool/pool_spec.rb
362
- spec/poolparty/pool/resource_spec.rb
363
- spec/poolparty/pool/resources/class_package_spec.rb
364
- spec/poolparty/pool/resources/conditional_spec.rb
365
- spec/poolparty/pool/resources/cron_spec.rb
366
- spec/poolparty/pool/resources/directory_spec.rb
367
- spec/poolparty/pool/resources/exec_spec.rb
368
- spec/poolparty/pool/resources/file_spec.rb
369
- spec/poolparty/pool/resources/gem_spec.rb
370
- spec/poolparty/pool/resources/host_spec.rb
371
- spec/poolparty/pool/resources/package_spec.rb
372
- spec/poolparty/pool/resources/remote_file_spec.rb
373
- spec/poolparty/pool/resources/service_spec.rb
374
- spec/poolparty/pool/resources/sshkey_spec.rb
375
- spec/poolparty/pool/resources/symlink_spec.rb
376
- spec/poolparty/pool/resources/variable_spec.rb
377
- spec/poolparty/pool/script_spec.rb
378
- spec/poolparty/pool/test_plugins/sshkey_test
379
- spec/poolparty/pool/test_plugins/virtual_host_template.erb
380
- spec/poolparty/pool/test_plugins/webserver.rb
355
+ spec/poolparty/poolparty/base_spec.rb
356
+ spec/poolparty/poolparty/cloud_spec.rb
357
+ spec/poolparty/poolparty/configurers/files/ruby_basic.rb
358
+ spec/poolparty/poolparty/configurers/files/ruby_plugins.rb
359
+ spec/poolparty/poolparty/configurers/ruby_spec.rb
360
+ spec/poolparty/poolparty/custom_resource_spec.rb
361
+ spec/poolparty/poolparty/example_spec.rb
362
+ spec/poolparty/poolparty/plugin_model_spec.rb
363
+ spec/poolparty/poolparty/plugin_spec.rb
364
+ spec/poolparty/poolparty/pool_spec.rb
365
+ spec/poolparty/poolparty/resource_spec.rb
366
+ spec/poolparty/poolparty/resources/class_package_spec.rb
367
+ spec/poolparty/poolparty/resources/conditional_spec.rb
368
+ spec/poolparty/poolparty/resources/cron_spec.rb
369
+ spec/poolparty/poolparty/resources/directory_spec.rb
370
+ spec/poolparty/poolparty/resources/exec_spec.rb
371
+ spec/poolparty/poolparty/resources/file_spec.rb
372
+ spec/poolparty/poolparty/resources/gem_spec.rb
373
+ spec/poolparty/poolparty/resources/host_spec.rb
374
+ spec/poolparty/poolparty/resources/package_spec.rb
375
+ spec/poolparty/poolparty/resources/remote_file_spec.rb
376
+ spec/poolparty/poolparty/resources/service_spec.rb
377
+ spec/poolparty/poolparty/resources/sshkey_spec.rb
378
+ spec/poolparty/poolparty/resources/symlink_spec.rb
379
+ spec/poolparty/poolparty/resources/user_spec.rb
380
+ spec/poolparty/poolparty/resources/variable_spec.rb
381
+ spec/poolparty/poolparty/script_spec.rb
382
+ spec/poolparty/poolparty/test_plugins/sshkey_test
383
+ spec/poolparty/poolparty/test_plugins/virtual_host_template.erb
384
+ spec/poolparty/poolparty/test_plugins/webserver.rb
381
385
  spec/poolparty/poolparty_spec.rb
382
386
  spec/poolparty/spec/core/string_spec.rb
383
387
  spec/poolparty/spec_helper.rb
@@ -394,6 +398,7 @@ test/test_generator_helper.rb
394
398
  test/test_helper.rb
395
399
  test/test_pool_spec_generator.rb
396
400
  test/test_poolparty.rb
401
+ website/index.html
397
402
  website/index.txt
398
403
  website/javascripts/rounded_corners_lite.inc.js
399
404
  website/stylesheets/code.css
data/PostInstall.txt CHANGED
@@ -1,4 +1,4 @@
1
- Get ready to jump in the pool, you just installed PoolParty! (Updated at 13:46 12/06/08)
1
+ Get ready to jump in the pool, you just installed PoolParty! (Updated at 15:39 12/09/08)
2
2
 
3
3
  To get started, run the generator:
4
4
 
data/bin/cloud-provision CHANGED
@@ -18,7 +18,7 @@ o.loaded_clouds.each do |cloud|
18
18
  if instance_num
19
19
  @instance = get_instance_by_number( instance_num )
20
20
  instance_num == 0 ? Provisioner.provision_master(self, testing) : Provisioner.provision_slave(@instance, self, testing)
21
- Provisioner.process_clean_reconfigure_for!(@instance, self, testing)
21
+ # Provisioner.process_clean_reconfigure_for!(@instance, self, testing)
22
22
  else
23
23
  if provision_slave
24
24
  vputs "Provisioning slaves"
data/bin/cloud-spec ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
+ require "poolparty"
4
+ require "poolpartycl"
5
+
6
+ available_tests = {
7
+ :launch => "Launches a cloud and ensures it is accessible at port 80"
8
+ }
9
+
10
+ available_tests_string = available_tests.map {|k,v| "#{k}: #{v}"}.join("\n")
11
+
12
+ o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
13
+ optioner.cloudnames
14
+ optioner.daemonizeable
15
+ opts.on('--type type',
16
+ "Run type of test. Available tests: #{available_tests_string} (default: launch)") { |c| optioner.testtype c }
17
+ end
18
+
19
+ o.loaded_clouds.each do |cloud|
20
+ with_cloud(cloud) do
21
+ puts "Are you sure you want to live test?"
22
+ body = ["Normal charges for running instances will apply"]
23
+ body << "as this will run instances"
24
+ body.each {|st| puts "\t#{st}"}
25
+ print "(y|n): "
26
+ input = gets.downcase.chomp
27
+ do_test = input.downcase == "y" ? true : false
28
+ if do_test
29
+ case testtype
30
+ when "launch"
31
+ when nil
32
+ print_with_nice_printer("Starting live specing cloud #{name}")
33
+ # hide_output {launch_and_configure_master!}
34
+ print_with_nice_printer("Waiting for cloud to provision")
35
+
36
+ end
37
+ end
38
+ end
39
+
40
+ end
data/lib/poolparty.rb CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  # Load required gems
4
4
  @required_software = Array.new
5
- %w(activesupport ftools logging resolv ruby2ruby).each do |lib|
5
+ %w(activesupport ftools logging resolv ruby2ruby digest/sha2).each do |lib|
6
6
  begin
7
7
  require lib
8
8
  rescue Exception => e
@@ -38,7 +38,7 @@ ActiveSupport::Dependencies.load_paths << File.dirname(__FILE__)
38
38
  ## Load PoolParty
39
39
  require "#{File.dirname(__FILE__)}/poolparty/version"
40
40
 
41
- %w(core modules exceptions dependency_resolutions aska monitors net).each do |dir|
41
+ %w(core modules exceptions dependency_resolutions aska monitors provisioners extra net).each do |dir|
42
42
  Dir[File.dirname(__FILE__) + "/poolparty/#{dir}/**.rb"].each do |file|
43
43
  require file
44
44
  end
@@ -50,7 +50,7 @@ module PoolParty
50
50
  end
51
51
 
52
52
  # execute_on_node do
53
- has_cron(:name => "node puppetd runner", :user => Base.user, :minute => "*/11") do
53
+ has_cron(:name => "node puppetd runner", :user => Base.user, :minute => "*/15") do
54
54
  requires get_gempackage("poolparty")
55
55
  command "/usr/bin/puppetrunner"
56
56
  end
@@ -0,0 +1,31 @@
1
+ module PoolParty
2
+ module Extra
3
+ class Deployments
4
+
5
+ class << self
6
+
7
+ def include_deployment(filename)
8
+ return nil unless ::File.file? filename
9
+ name = ::File.basename(filename, ::File.extname(filename))
10
+ contents = open(filename).read
11
+
12
+ plugin_klass = PoolParty::PluginModel::PluginModel.new(name)
13
+ plugin_klass.klass.class_eval <<-EOE
14
+ def enable
15
+ #{contents}
16
+ end
17
+ EOE
18
+ plugin_klass
19
+ end
20
+
21
+ def include_deployments(dir)
22
+ return nil unless ::File.directory? dir
23
+ Dir["#{dir}/*"].each do |fi|
24
+ include_deployment fi
25
+ end
26
+ dir
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -13,6 +13,15 @@ module PoolParty
13
13
  end
14
14
  end
15
15
 
16
+ def print_with_nice_printer(header=nil, strs=[])
17
+ returning NicePrinter.new do |printer|
18
+ printer.header
19
+ printer.center(header) if header
20
+ strs.each {|st| printer << st if st}
21
+ printer.footer
22
+ end.print
23
+ end
24
+
16
25
  def pool_specfile
17
26
  $pool_specfile
18
27
  end
@@ -6,7 +6,7 @@ module PoolParty
6
6
  ebs_volume_mount_point loc
7
7
  ebs_volume_device "/dev/#{id.sanitize}"
8
8
 
9
- has_mount(:name => loc, :device => ebs_volume_device, :onlyif => "test -d #{loc}")
9
+ has_mount(:name => loc, :device => ebs_volume_device)
10
10
  has_directory(:name => loc)
11
11
  end
12
12
 
@@ -55,6 +55,8 @@ module PoolParty
55
55
  return nil
56
56
  end
57
57
 
58
+ # The keypair name can be one name or another including id_rsa or not
59
+ # So let's get the name that exists as a keypair
58
60
  def full_keypair_name
59
61
  keypair_paths.each do |path|
60
62
  possible_keypair_basenames.each do |base|
@@ -26,11 +26,11 @@ module PoolParty
26
26
  path = ::File.join( Base.storage_directory, dirname )
27
27
  make_base_path path
28
28
  end
29
- def write_to_file_in_storage_directory(file, str, preceded="", &block)
29
+ def write_to_file_in_storage_directory(file, str="", preceded="", &block)
30
30
  path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
31
31
  write_to_file(path, str, &block)
32
32
  end
33
- def write_to_file(file, str, preceded="", &block)
33
+ def write_to_file(file, str="", preceded="", &block)
34
34
  path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
35
35
  make_base_path( Base.storage_directory )
36
36
  ::File.open(path, "w+") do |f|
@@ -16,7 +16,7 @@ module PoolParty
16
16
  end
17
17
  # TODO: Fix cookie setting
18
18
  def self.erl_command(hostname, extra="", min_ports=7000, max_ports=7050)
19
- command_line_opts = "-pa #{append_dir}/ebin -kernel inet_dist_listen_min #{min_ports} inet_dist_listen_max #{max_ports} -sname #{hostname} -setcookie poolparty"
19
+ command_line_opts = "-pa #{append_dir}/ebin -kernel inet_dist_listen_min #{min_ports} inet_dist_listen_max #{max_ports} -sname #{hostname} -cookie"
20
20
 
21
21
  "erl #{command_line_opts} #{extra}"
22
22
  end
@@ -125,8 +125,7 @@ begin
125
125
  pub_key && private_key
126
126
  end
127
127
  # The keys are used only for puppet certificates
128
- # and are only used for EC2. These should be abstracted
129
- # eventually into the ec2 remoter_base
128
+ # and are only used for EC2.
130
129
  # Public key
131
130
  def pub_key
132
131
  @pub_key ||= ENV["EC2_CERT"] ? ENV["EC2_CERT"] : nil
@@ -135,6 +134,10 @@ begin
135
134
  def private_key
136
135
  @private_key ||= ENV["EC2_PRIVATE_KEY"] ? ENV["EC2_PRIVATE_KEY"] : nil
137
136
  end
137
+
138
+ def custom_minimum_runnable_options
139
+ [:ami, :availabilty_zone, :security_group]
140
+ end
138
141
 
139
142
  # Callback
140
143
  def custom_install_tasks_for(o)
@@ -2,8 +2,6 @@
2
2
  This module is included by the remote module and defines the remoting methods
3
3
  that the clouds can use to rsync or run remote commands
4
4
  =end
5
- require File.dirname(__FILE__) + "/../helpers/provisioner_base"
6
-
7
5
  module PoolParty
8
6
  module Remote
9
7
  module Remoter
@@ -189,9 +187,9 @@ module PoolParty
189
187
  last_instances = nonmaster_nonterminated_instances[(@num_instances - (num))..(@num_instances)]
190
188
  last_instances.each do |inst|
191
189
  vputs "Provision slave: #{inst}"
192
- hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
190
+ # hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
193
191
  PoolParty::Provisioner.provision_slave(inst, self, false) unless inst.master? rescue vputs "Error"
194
- hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
192
+ # hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
195
193
  # cmd = ". /etc/profile && cloud-provision -i #{inst.name.gsub(/node/, '')} &"
196
194
  # vputs "Provision slave with command #{cmd}"
197
195
  end
@@ -140,6 +140,13 @@ module PoolParty
140
140
  # Callback after loaded
141
141
  def loaded_remoter_base
142
142
  end
143
+
144
+ # Custom minimum runnable options
145
+ # Extend the minimum runnable options that are necessary
146
+ # for poolparty to run on the remote base
147
+ def custom_minimum_runnable_options
148
+ []
149
+ end
143
150
 
144
151
  # Custom installation tasks
145
152
  # Allow the remoter bases to attach their own tasks on the
@@ -54,9 +54,9 @@ module PoolParty
54
54
  # set_parent(parent) if parent && !@parent
55
55
  # self.run_in_context parent, &block if block
56
56
  setup_defaults
57
- realize_plugins!
58
- reset! # reset the clouds
59
- reset_remoter_base!
57
+ # realize_plugins!
58
+ # reset! # reset the clouds
59
+ # reset_remoter_base!
60
60
  end
61
61
 
62
62
  def setup_defaults
@@ -79,7 +79,7 @@ module PoolParty
79
79
  def generate_keypair(*args)
80
80
  options[:keypair] = "#{parent && parent.is_a?(PoolParty::Pool::Pool) ? parent.name : "poolparty"}_#{name}" unless has_keypair?
81
81
  end
82
-
82
+
83
83
  # Prepare to send the new configuration to the instances
84
84
  # First, let's make sure that our base directory is made
85
85
  # Then copy the templates that have no other reference in
@@ -97,6 +97,7 @@ module PoolParty
97
97
  Script.save!(self)
98
98
  # not my favorite...
99
99
  copy_ssh_key
100
+ write_unique_cookie
100
101
  before_configuration_tasks
101
102
  end
102
103
 
@@ -112,6 +113,20 @@ module PoolParty
112
113
  Base.store_keys_in_file_for(self)
113
114
  end
114
115
 
116
+ # Let's write the cookie into the tmp path
117
+ def write_unique_cookie
118
+ write_to_file_in_storage_directory("cookie") do
119
+ generate_unique_cookie_string
120
+ end
121
+ end
122
+
123
+ # Generate a unique cookie string so that our erlang modules can
124
+ # talk to each other safely. This is based off the keypair
125
+ # and the name of the cloud
126
+ def generate_unique_cookie_string
127
+ Digest::SHA256.hexdigest("#{full_keypair_name}#{name}")
128
+ end
129
+
115
130
  # Build the new poolparty manifest
116
131
  # Wrapping all of these requirements into the one
117
132
  # poolparty class.
@@ -201,10 +216,10 @@ module PoolParty
201
216
  # they need a few options to run, these are the required options
202
217
  # to be saved on the remote "master" machine
203
218
  def minimum_runnable_options
204
- [
205
- :keypair, :minimum_instances, :maximum_instances, :ami, :security_group,
219
+ ([
220
+ :keypair, :minimum_instances, :maximum_instances,
206
221
  :expand_when, :contract_when, :set_master_ip_to
207
- ]
222
+ ]<< custom_minimum_runnable_options).flatten
208
223
  end
209
224
 
210
225
  # Add all the poolparty requirements here
@@ -4,7 +4,7 @@ module PoolParty
4
4
  module PluginModel
5
5
 
6
6
  def plugin(name=:plugin, cloud=nil, &block)
7
- plugins.has_key?(name) ? plugins[name] : (plugins[name] = PluginModel.new(name, cloud, &block))
7
+ plugins.has_key?(name) ? plugins[name] : (plugins[name] = PluginModel.new(name, &block))
8
8
  end
9
9
  alias_method :register_plugin, :plugin
10
10
 
@@ -18,15 +18,15 @@ module PoolParty
18
18
  include Configurable
19
19
  include PrettyPrinter
20
20
 
21
- def initialize(name,cld,&block)
21
+ def initialize(name,&block)
22
22
  @name = name
23
23
  # @parent = cld
24
24
  class_string_name = "#{name}"
25
25
 
26
26
  # Create the class to evaluate the plugin on the implemented call
27
- klass = class_string_name.class_constant(PoolParty::Plugin::Plugin)
27
+ @klass = klass = class_string_name.class_constant(PoolParty::Plugin::Plugin)
28
28
  mod = class_string_name.module_constant(&block)
29
-
29
+
30
30
  klass.send :include, mod
31
31
 
32
32
  # Store the name of the class for pretty printing later