auser-poolparty 0.2.42 → 0.2.44

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.
data/bin/cloud-maintain CHANGED
@@ -26,7 +26,7 @@ include Remote
26
26
  vputs "#{list_of_running_instances.size} running instances of between #{minimum_instances} and #{maximum_instances}"
27
27
  vputs "Launching new instance"
28
28
  launch_minimum_number_of_instances
29
- elsif !maximum_number_of_instances_are_not_running?
29
+ elsif maximum_number_of_instances_are_running?
30
30
  vputs "#{list_of_running_instances.size} running instances of between #{minimum_instances} and #{maximum_instances}"
31
31
  vputs "Shutting down non-master instance"
32
32
  contract_cloud_if_necessary( !testing )
data/bin/cloud-provision CHANGED
@@ -21,7 +21,6 @@ include Remote
21
21
 
22
22
  if instance_num
23
23
  @instance = get_instance_by_number( instance_num )
24
- vputs "Provisioning instance: #{@instance.name} (#{instance_num})"
25
24
  instance_num == 0 ? Provisioner.provision_master(self, testing) : Provisioner.provision_slave(@instance, self, testing)
26
25
  else
27
26
  if provision_slave
@@ -6,9 +6,12 @@
6
6
  % erl -pa ./ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -setcookie poolparty -boot pm_node_rel-0.1 -sname node1
7
7
 
8
8
  % Starting the client on the master
9
- % erl -pa /var/lib/gems/1.8/gems/poolparty-0.2.37/lib/erlang/messenger/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname client -setcookie poolparty -run pm_client start
9
+ % erl -pa /var/lib/gems/1.8/gems/poolparty-0.2.42/lib/erlang/messenger/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname client -setcookie poolparty -run pm_client start
10
10
 
11
11
  % Get the load
12
- % erl -pa /var/lib/gems/1.8/gems/poolparty-0.2.40/lib/erlang/messenger/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname client -setcookie poolparty -run pm_client start -run pm_client get_load cpu -run erlang init stop
12
+ % erl -pa /var/lib/gems/1.8/gems/poolparty-0.2.42/lib/erlang/messenger/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname client -setcookie poolparty -run pm_client start -run pm_client get_load cpu -run erlang init stop
13
13
 
14
- % cd /var/poolparty && gem uninstall poolparty && wget http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true -O poolparty-latest.gem 2>&1 && gem install --no-ri --no-rdoc poolparty-latest.gem
14
+ % cd /var/poolparty && gem uninstall poolparty && wget http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty-latest.gem?raw=true -O poolparty-latest.gem 2>&1 && gem install --no-ri --no-rdoc poolparty-latest.gem
15
+
16
+ % LOAD TESTING
17
+ % ab -n 10000 -c 5 http://75.101.162.232/
@@ -27,12 +27,14 @@ module PoolParty
27
27
 
28
28
  # Service is required
29
29
  has_service(:name => "haproxy", :ensures => "running")
30
+
31
+ has_exec(:name => "reloadhaproxy", :command => "/etc/init.d/haproxy reload", :requires => get_package("haproxy"))
30
32
 
31
33
  # These can also be passed in via hash
32
34
  has_remotefile(:name => "/etc/haproxy.cfg") do
33
35
  mode 644
34
36
  requires get_package("haproxy")
35
- notify get_service("haproxy")
37
+ notify get_exec("reloadhaproxy")
36
38
  template File.join(File.dirname(__FILE__), "..", "templates/haproxy.conf")
37
39
  end
38
40
  end
@@ -60,6 +60,10 @@ module PoolParty
60
60
  requires get_gempackage("poolparty-latest")
61
61
  command(PoolParty::Remote::RemoteInstance.puppet_master_rerun_command)
62
62
  end
63
+ has_cron(:name => "Load handler", :user => Base.user, :minute => "*/4") do
64
+ requires get_gempackage("poolparty-latest")
65
+ command(". /etc/profile && cloud-handle-load")
66
+ end
63
67
  end
64
68
  execute_on_node do
65
69
  has_cron(:name => "puppetd runner", :user => Base.user, :minute => "*/5") do
@@ -12,7 +12,7 @@ module PoolParty
12
12
  self.class.send :attr_reader, :remote_base
13
13
  mod = "#{t}".preserved_module_constant
14
14
 
15
- mod.send :include, PoolParty::Remote::RemoterBase
15
+ # mod.send :include, PoolParty::Remote::RemoterBase
16
16
  self.class.send :include, mod
17
17
  self.extend mod
18
18
 
@@ -18,11 +18,12 @@ module PoolParty
18
18
  :availability_zone => nil,
19
19
  :size => "#{size || Base.size}")
20
20
  begin
21
- item = instance#.instancesSet.item
22
- inst = EC2ResponseObject.get_hash_from_response(item)
21
+ h = EC2ResponseObject.get_hash_from_response(instance)
22
+ h = instance.instancesSet.item.first
23
23
  rescue Exception => e
24
+ h = instance
24
25
  end
25
- inst
26
+ h
26
27
  end
27
28
  # Terminate an instance by id
28
29
  def terminate_instance!(instance_id=nil)
@@ -46,15 +47,22 @@ module PoolParty
46
47
  :hostname => h[:ip],
47
48
  :ip => h[:ip].convert_from_ec2_to_ip
48
49
  })
49
- end
50
+ end
50
51
  end
51
52
  # Get the s3 description for the response in a hash format
52
53
  def get_instances_description
53
54
  EC2ResponseObject.get_descriptions(ec2.describe_instances).sort_by {|a| a[:launching_time]}
54
55
  end
55
56
 
56
- def after_launch_master(instance=nil)
57
- ec2.associate_address(:instance_id => instance.instance_id, :public_ip => set_master_ip_to) if set_master_ip_to && instance
57
+ def after_launch_master(instance=nil)
58
+ begin
59
+ when_no_pending_instances do
60
+ ec2.associate_address(:instance_id => instance.instanceId, :public_ip => set_master_ip_to) if set_master_ip_to && instance
61
+ end
62
+ rescue Exception => e
63
+ end
64
+ reset_remoter_base!
65
+ when_all_assigned_ips {wait "2.seconds"}
58
66
  end
59
67
 
60
68
  # Help create a keypair for the cloud
@@ -92,7 +100,7 @@ module PoolParty
92
100
  ]
93
101
  end
94
102
 
95
- def reset!
103
+ def reset_base!
96
104
  @describe_instances = @cached_descriptions = nil
97
105
  end
98
106
  end
@@ -131,6 +139,7 @@ class EC2ResponseObject
131
139
  rs ||= rs.respond_to?(:instancesSet) ? rs.instancesSet : rs
132
140
  rs.reject! {|a| a.nil? || a.empty? }
133
141
  rescue Exception => e
142
+ resp
134
143
  end
135
144
  rs
136
145
  end
@@ -105,9 +105,12 @@ module PoolParty
105
105
  out
106
106
  end
107
107
  def request_launch_master_instance
108
- after_launch_master(launch_new_instance!)
108
+ inst = launch_new_instance!
109
+ wait "5.seconds"
110
+ when_no_pending_instances {after_launch_master(inst)}
109
111
  end
110
- def after_launch_master(h={})
112
+ def after_launch_master(h={})
113
+ vputs "After launch master in remoter"
111
114
  end
112
115
  # Let's terminate an instance that is not the master instance
113
116
  def request_termination_of_non_master_instance
@@ -116,12 +119,16 @@ module PoolParty
116
119
  end
117
120
  # Can we start a new instance?
118
121
  def can_start_a_new_instance?
119
- maximum_number_of_instances_are_not_running?
122
+ maximum_number_of_instances_are_not_running? && list_of_pending_instances.size == 0
120
123
  end
121
- # Are the maximum number of instances running?
124
+ # Are the maximum number of instances not running?
122
125
  def maximum_number_of_instances_are_not_running?
123
126
  list_of_running_instances.size < maximum_instances.to_i
124
127
  end
128
+ # Are the maximum number of instances running?
129
+ def maximum_number_of_instances_are_running?
130
+ list_of_running_instances.size >= maximum_instances.to_i
131
+ end
125
132
  # Launch new instance while waiting for the number of pending instances
126
133
  # to be zero before actually launching. This ensures that we only
127
134
  # launch one instance at a time
@@ -140,6 +147,19 @@ module PoolParty
140
147
  when_no_pending_instances(&block)
141
148
  end
142
149
  end
150
+ # A convenience method for waiting until all the instances have an ip
151
+ # assigned to them. This is useful when shifting the ip addresses
152
+ # around on the instances
153
+ def when_all_assigned_ips(&block)
154
+ reset!
155
+ if list_of_nonterminated_instances.select {|a| a.ip == "not.assigned" }.empty?
156
+ block.call if block
157
+ else
158
+ vprint "."
159
+ wait "5.seconds"
160
+ when_all_assigned_ips(&block)
161
+ end
162
+ end
143
163
 
144
164
  # This will launch the minimum_instances if the minimum number of instances are not running
145
165
  # If the minimum number of instances are not running and if we can start a new instance
@@ -158,13 +178,14 @@ module PoolParty
158
178
  when_no_pending_instances do
159
179
  wait "10.seconds" # Give some time for ssh to startup
160
180
  @num_instances = list_of_running_instances.size
181
+ vputs "(@num_instances - (num))..(@num_instances): #{(@num_instances - (num))..(@num_instances)}"
161
182
  last_instances = nonmaster_nonterminated_instances[(@num_instances - (num))..(@num_instances)]
162
183
  last_instances.each do |inst|
163
184
  PoolParty::Provisioner.provision_slave(inst, self, false) unless inst.master?
164
185
  cmd = ". /etc/profile && cloud-provision -i #{inst.name.gsub(/node/, '')} #{unix_hide_string} &"
165
186
  Kernel.system cmd
166
187
  end
167
- PoolParty::Provisioner.reconfigure_master(self, force)
188
+ PoolParty::Provisioner.reconfigure_master(self)
168
189
  end
169
190
  end
170
191
  # Launch the master and let the master handle the starting of the cloud
@@ -176,6 +197,7 @@ module PoolParty
176
197
  vputs "Requesting to launch new instance"
177
198
  logger.debug "Launching master"
178
199
  request_launch_master_instance if list_of_pending_instances.size.zero? && can_start_a_new_instance? && !is_master_running?
200
+ reset!
179
201
 
180
202
  vputs "Waiting for there to be no pending instances..."
181
203
  when_no_pending_instances do
@@ -77,7 +77,7 @@ module PoolParty
77
77
  # If no keypair is passed, select them all
78
78
  def list_of_instances(keyp=nil)
79
79
  key = keyp ? keyp : keypair
80
- @describe_instances ||= describe_instances.select {|a| key ? a[:keypair] == key : true } if describe_instances
80
+ @describe_instances ||= describe_instances.select {|a| key ? a[:keypair] == key : true }
81
81
  end
82
82
  # Instances
83
83
  # Get the master from the cloud
@@ -90,8 +90,9 @@ module PoolParty
90
90
  def create_keypair
91
91
  end
92
92
  # Reset the cache of descriptions
93
- def reset!
93
+ def reset_remoter_base!
94
94
  @describe_instances = nil
95
+ reset_base!
95
96
  end
96
97
  def self.included(other)
97
98
  PoolParty.register_remote_base(self.class.to_s.downcase.to_sym)
@@ -185,6 +185,7 @@ module PoolParty
185
185
  end
186
186
 
187
187
  def reset!
188
+ reset_remoter_base!
188
189
  @build_manifest = @describe_instances = nil
189
190
  end
190
191
 
@@ -2,7 +2,7 @@ module PoolParty
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 42
5
+ TINY = 44
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/poolparty.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poolparty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.42
4
+ version: 0.2.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ari Lerner
@@ -41,7 +41,7 @@ describe "ec2 remote base" do
41
41
  @tr.launch_new_instance!
42
42
  end
43
43
  it "should get the hash response from EC2ResponseObject" do
44
- EC2ResponseObject.should_receive(:get_hash_from_response).with(true).and_return true
44
+ EC2ResponseObject.should_receive(:get_hash_from_response).and_return true
45
45
  @tr.launch_new_instance!
46
46
  end
47
47
  end
@@ -12,6 +12,7 @@ module Hype
12
12
  end
13
13
  class TestClass
14
14
  include Remote
15
+ include RemoterBase
15
16
 
16
17
  def keypair
17
18
  "fake_keypair"
@@ -134,7 +135,7 @@ describe "Remote" do
134
135
  end
135
136
  describe "can_start_a_new_instance?" do
136
137
  it "should be true because the maximum instances are not running" do
137
- @tc.can_start_a_new_instance?.should == true
138
+ @tc.can_start_a_new_instance?.should == false
138
139
  end
139
140
  it "should say that we cannot start a new instance because we are at the maximum instances" do
140
141
  add_stub_instance_to(@tc, 7)
data/website/index.html CHANGED
@@ -34,7 +34,7 @@
34
34
  <h1>PoolParty</h1>
35
35
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/poolparty"; return false'>
36
36
  <p>Get Version</p>
37
- <a href="http://rubyforge.org/projects/poolparty" class="numbers">0.2.42</a>
37
+ <a href="http://rubyforge.org/projects/poolparty" class="numbers">0.2.44</a>
38
38
  </div>
39
39
  <h1>&#8216;Easy cloud computing&#8217;</h1>
40
40
  <h2>What</h2>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auser-poolparty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.42
4
+ version: 0.2.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ari Lerner