capify-ec2 1.4.2.pre4 → 1.4.3.pre5

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/Changelog.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 1.4.3.pre5 (Apr 9, 2013)
2
+
3
+ Features:
4
+
5
+ - Allowed the expected result for the rolling deployment healthcheck to be specified as a regex or an array in addition to a string.
6
+
7
+ Bugfixes:
8
+
9
+ - Fixed an issue which was preventing the main deployment task from being executed during a rolling deployment.
10
+
1
11
  ## 1.4.2.pre4 (Mar 28, 2013)
2
12
 
3
13
  Features:
@@ -105,7 +105,7 @@ Capistrano::Configuration.instance(:must_exist).load do
105
105
  load_balancer_to_reregister = capify_ec2.deregister_instance_from_elb_by_dns(server_dns) if is_load_balanced
106
106
 
107
107
  # Call the standard 'cap deploy' task with our redefined role containing a single server.
108
- # top.deploy.default
108
+ top.deploy.default
109
109
 
110
110
  server_roles.each do |a_role|
111
111
 
@@ -1,6 +1,6 @@
1
1
  module Capify
2
2
  module Ec2
3
- VERSION = "1.4.2.pre4"
3
+ VERSION = "1.4.3.pre5"
4
4
  end
5
5
  end
6
6
 
data/lib/capify-ec2.rb CHANGED
@@ -219,6 +219,16 @@ class CapifyEc2
219
219
  end
220
220
 
221
221
  def instance_health_by_url(dns, port, path, expected_response, options = {})
222
+ def response_matches_expected?(response, expected_response)
223
+ if expected_response.kind_of?(Array)
224
+ expected_response.any?{ |r| response_matches_expected?(response, r) }
225
+ elsif expected_response.kind_of?(Regexp)
226
+ (response =~ expected_response) != nil
227
+ else
228
+ response == expected_response
229
+ end
230
+ end
231
+
222
232
  protocol = options[:https] ? 'https://' : 'http://'
223
233
  uri = URI("#{protocol}#{dns}:#{port}#{path}")
224
234
 
@@ -231,7 +241,7 @@ class CapifyEc2
231
241
  Timeout::timeout(options[:timeout]) do
232
242
  begin
233
243
  result = http.get(uri.path)
234
- raise "Server responded with '#{result.code}: #{result.body}', expected '#{expected_response}'" unless result.body == expected_response
244
+ raise "Server responded with '#{result.code}: #{result.body}', expected '#{expected_response}'" unless response_matches_expected?(result.body, expected_response)
235
245
  rescue => e
236
246
  puts "[Capify-EC2] Unexpected response: #{e}..."
237
247
  sleep 1
@@ -240,7 +250,7 @@ class CapifyEc2
240
250
  end
241
251
  rescue Timeout::Error => e
242
252
  end
243
- result ? result.body == expected_response : false
253
+ result ? response_matches_expected?(result.body, expected_response) : false
244
254
  end
245
255
  end
246
256
 
data/readme.md CHANGED
@@ -341,7 +341,33 @@ In this example, the following URL would be generated:
341
341
  http://EC2_INSTANCE_PUBLIC_DNS_HERE:80/status
342
342
  ```
343
343
 
344
- And the contents of the page at that URL must match 'OK' for the healthcheck to pass. If unsuccessful, the healthcheck is repeated every second, until a timeout of 60 seconds is reached, at which point the rolling deployment is aborted, and a progress summary displayed.
344
+ And the contents of the page at that URL must match 'OK' exactly for the healthcheck to pass. If unsuccessful, the healthcheck is repeated every second, until a timeout of 60 seconds is reached, at which point the rolling deployment is aborted, and a progress summary displayed.
345
+
346
+ The result can also be specified as a regular expression, which gives more flexibility. For example:
347
+
348
+ ```ruby
349
+ ec2_roles :name => "web",
350
+ :variables => {
351
+ :healthcheck => {
352
+ :path => '/status',
353
+ :port => 80,
354
+ :result => /^(OK|Success)$/
355
+ }
356
+ }
357
+ ```
358
+
359
+ The result can also be specified as an array (of strings and/or regular expressions), in which case the result of the health check is successful if the response matches any of the items in the array. For example:
360
+
361
+ ```ruby
362
+ ec2_roles :name => "web",
363
+ :variables => {
364
+ :healthcheck => {
365
+ :path => '/status',
366
+ :port => 80,
367
+ :result => ['OK', /^\s*Success/]
368
+ }
369
+ }
370
+ ```
345
371
 
346
372
  The default timeout of 60 seconds can be overridden by setting ':timeout' to a custom value in seconds. The protocol used defaults to 'http://', however you can switch to 'https://' by setting ':https' equal to 'true'. For example:
347
373
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capify-ec2
3
3
  version: !ruby/object:Gem::Version
4
- hash: 967365859
4
+ hash: -4040006510
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 1
8
8
  - 4
9
- - 2
9
+ - 3
10
10
  - pre
11
- - 4
12
- version: 1.4.2.pre4
11
+ - 5
12
+ version: 1.4.3.pre5
13
13
  platform: ruby
14
14
  authors:
15
15
  - Noah Cantor
@@ -20,7 +20,7 @@ autorequire:
20
20
  bindir: bin
21
21
  cert_chain: []
22
22
 
23
- date: 2013-03-28 00:00:00 Z
23
+ date: 2013-04-09 00:00:00 Z
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: fog