eb_deployer 0.4.4.beta4 → 0.4.4.beta5
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/lib/eb_deployer.rb +3 -1
- data/lib/eb_deployer/eb_environment.rb +3 -1
- data/lib/eb_deployer/event_poller.rb +1 -3
- data/lib/eb_deployer/throttling_handling.rb +17 -0
- data/lib/eb_deployer/version.rb +1 -1
- data/test/aws_driver_stubs.rb +28 -3
- data/test/deploy_test.rb +1 -0
- data/test/inplace_update_deploy_test.rb +11 -1
- data/test/test_helper.rb +1 -1
- metadata +3 -2
data/lib/eb_deployer.rb
CHANGED
@@ -15,6 +15,7 @@ require 'eb_deployer/deployment_strategy'
|
|
15
15
|
require 'eb_deployer/cloud_formation_provisioner'
|
16
16
|
require 'eb_deployer/application'
|
17
17
|
require 'eb_deployer/resource_stacks'
|
18
|
+
require 'eb_deployer/throttling_handling'
|
18
19
|
require 'eb_deployer/eb_environment'
|
19
20
|
require 'eb_deployer/environment'
|
20
21
|
require 'eb_deployer/default_component'
|
@@ -175,6 +176,7 @@ module EbDeployer
|
|
175
176
|
bs = opts[:bs_driver] || AWSDriver::Beanstalk.new
|
176
177
|
s3 = opts[:s3_driver] || AWSDriver::S3Driver.new
|
177
178
|
cf = opts[:cf_driver] || AWSDriver::CloudFormationDriver.new
|
179
|
+
|
178
180
|
app_name = opts[:application]
|
179
181
|
version_prefix = opts[:version_prefix].to_s.strip
|
180
182
|
version_label = "#{version_prefix}#{opts[:version_label].to_s.strip}"
|
@@ -183,7 +185,7 @@ module EbDeployer
|
|
183
185
|
resource_stacks = ResourceStacks.new(opts[:resources],
|
184
186
|
cf,
|
185
187
|
opts[:skip_resource_stack_update])
|
186
|
-
|
188
|
+
bs = ThrottlingHandling.new(bs, AWS::ElasticBeanstalk::Errors::Throttling)
|
187
189
|
environment = Environment.new(application, opts[:environment], bs) do |env|
|
188
190
|
env.resource_stacks = resource_stacks
|
189
191
|
env.settings = opts[:option_settings] || opts[:settings] || []
|
@@ -41,7 +41,9 @@ module EbDeployer
|
|
41
41
|
|
42
42
|
def swap_cname_with(another)
|
43
43
|
log("Swap CNAME with env #{another.name}")
|
44
|
-
|
44
|
+
with_polling_events(/Completed swapping CNAMEs for environments/i) do
|
45
|
+
@bs.environment_swap_cname(self.app, self.name, another.name)
|
46
|
+
end
|
45
47
|
end
|
46
48
|
|
47
49
|
def log(msg)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module EbDeployer
|
2
|
+
class ThrottlingHandling
|
3
|
+
include Utils
|
4
|
+
|
5
|
+
def initialize(delegatee, throttling_error)
|
6
|
+
@delegatee = delegatee
|
7
|
+
@throttling_error = throttling_error
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(method, *args, &block)
|
11
|
+
super unless @delegatee.respond_to?(method)
|
12
|
+
backoff(@throttling_error) do
|
13
|
+
@delegatee.send(method, *args, &block)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/eb_deployer/version.rb
CHANGED
data/test/aws_driver_stubs.rb
CHANGED
@@ -33,7 +33,8 @@ class EBStub
|
|
33
33
|
:version => version,
|
34
34
|
:cname_prefix => cname_prefix,
|
35
35
|
:tier => tier,
|
36
|
-
:settings => settings}
|
36
|
+
:settings => settings }
|
37
|
+
set_env_ready(app, env, false)
|
37
38
|
end
|
38
39
|
|
39
40
|
def delete_environment(app, env)
|
@@ -43,7 +44,9 @@ class EBStub
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def update_environment(app, env, version, tier, settings)
|
47
|
+
raise "not in ready state, consider waiting for previous action finish by pulling envents" unless env_ready?(app, env)
|
46
48
|
@envs[env_key(app, env)].merge!(:version => version, :settings => settings, :tier => tier)
|
49
|
+
set_env_ready(app, env, false)
|
47
50
|
end
|
48
51
|
|
49
52
|
def environment_exists?(app_name, env_name)
|
@@ -79,13 +82,18 @@ class EBStub
|
|
79
82
|
end
|
80
83
|
|
81
84
|
def fetch_events(app_name, env_name, options={})
|
85
|
+
set_env_ready(app_name, env_name, true)
|
86
|
+
|
82
87
|
unless @events # unrestricted mode for testing if no explicit events set
|
83
88
|
return generate_event_from_messages(['Environment update completed successfully',
|
84
|
-
|
85
|
-
|
89
|
+
'terminateEnvironment completed successfully',
|
90
|
+
'Successfully launched environment',
|
91
|
+
'Completed swapping CNAMEs for environments'
|
92
|
+
])
|
86
93
|
end
|
87
94
|
|
88
95
|
@events[env_key(app_name, env_name)]
|
96
|
+
# assume env become ready after it spit out all the events
|
89
97
|
end
|
90
98
|
|
91
99
|
|
@@ -101,10 +109,14 @@ class EBStub
|
|
101
109
|
|
102
110
|
|
103
111
|
def environment_swap_cname(app_name, env1_name, env2_name)
|
112
|
+
raise "#{env1_name} not in ready state, consider to wait for previous action finsish by pulling events" unless env_ready?(app_name, env1_name)
|
113
|
+
|
104
114
|
env1, env2 = @envs[env_key(app_name, env1_name)], @envs[env_key(app_name, env2_name)]
|
105
115
|
temp = env1[:cname_prefix]
|
106
116
|
env1[:cname_prefix] = env2[:cname_prefix]
|
107
117
|
env2[:cname_prefix] = temp
|
118
|
+
set_env_ready(app_name, env1_name, false)
|
119
|
+
set_env_ready(app_name, env2_name, false)
|
108
120
|
end
|
109
121
|
|
110
122
|
def environment_health_state(app_name, env_name)
|
@@ -116,6 +128,9 @@ class EBStub
|
|
116
128
|
end
|
117
129
|
|
118
130
|
#test only
|
131
|
+
def mark_all_envs_ready
|
132
|
+
@envs.values.each { |env| set_env_ready(env[:application], env[:name], true) }
|
133
|
+
end
|
119
134
|
|
120
135
|
def environment_tier(app_name, env_name)
|
121
136
|
@envs[env_key(app_name, env_name)][:tier]
|
@@ -149,6 +164,16 @@ class EBStub
|
|
149
164
|
|
150
165
|
private
|
151
166
|
|
167
|
+
def set_env_ready(app, env, ready)
|
168
|
+
if record = @envs[env_key(app, env)]
|
169
|
+
record[:ready] = ready
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def env_ready?(app, env)
|
174
|
+
@envs[env_key(app, env)][:ready]
|
175
|
+
end
|
176
|
+
|
152
177
|
def generate_event_from_messages(messages)
|
153
178
|
[messages.reverse.map do |m|
|
154
179
|
{:event_date => Time.now.utc,
|
data/test/deploy_test.rb
CHANGED
@@ -87,7 +87,7 @@ class InplaceUpdateDeployTest < DeployTest
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
def
|
90
|
+
def test_deploy_should_retry_on_temporary_throttling_error_from_fetch_events
|
91
91
|
throttling_error = AWS::ElasticBeanstalk::Errors::Throttling.new("bang!")
|
92
92
|
error_seq = [throttling_error] * 5
|
93
93
|
@eb.set_error_generator(:fetch_events) do
|
@@ -97,4 +97,14 @@ class InplaceUpdateDeployTest < DeployTest
|
|
97
97
|
assert @eb.environment_exists?('simple', t('production', 'simple'))
|
98
98
|
end
|
99
99
|
|
100
|
+
def test_deploy_should_retry_on_temporary_throttling_error_from_create_env
|
101
|
+
throttling_error = AWS::ElasticBeanstalk::Errors::Throttling.new("bang!")
|
102
|
+
error_seq = [throttling_error] * 5
|
103
|
+
@eb.set_error_generator(:create_environment) do
|
104
|
+
error_seq.pop
|
105
|
+
end
|
106
|
+
deploy(:application => 'simple', :environment => "production")
|
107
|
+
assert @eb.environment_exists?('simple', t('production', 'simple'))
|
108
|
+
end
|
109
|
+
|
100
110
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eb_deployer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.4.
|
4
|
+
version: 0.4.4.beta5
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-04-
|
13
|
+
date: 2014-04-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: aws-sdk
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- lib/eb_deployer/package.rb
|
70
70
|
- lib/eb_deployer/resource_stacks.rb
|
71
71
|
- lib/eb_deployer/smoke_test.rb
|
72
|
+
- lib/eb_deployer/throttling_handling.rb
|
72
73
|
- lib/eb_deployer/utils.rb
|
73
74
|
- lib/eb_deployer/version.rb
|
74
75
|
- lib/eb_deployer/version_cleaner.rb
|