dpl 1.8.17.travis.1402.4 → 1.8.17.travis.1416.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NmViNDJlN2QwNDM3MWExODI4ZDU1YWM0NDZmMTUyNzFhOTVmZGM5NQ==
4
+ OWJkNjc1NjczZGJhMTRjZDAwMDEyOTA4MjYzNzRiNjBlNTUxOThjYQ==
5
5
  data.tar.gz: !binary |-
6
- MDYwY2U1NTZhYjEyYTk0NGUxOTc5YmRhYTc4YWUzMmI0NzYyYjU5OA==
6
+ MWVlYjE4ZjNjNTFhNTQxNTFiZGU5ZmU1NzI0M2M4ZmE3ZTY1YmIxNA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDE4MzEwODc0NDc5NTllYjFkM2RmMTQ0Y2U1MzJhMWM4MzBiMDYzNGMxMGY3
10
- YWVkZWJkYzhjNzQ5OTJmYzVlMzkxMzFhZjJkMmU1YjY4ZjA1OTQ1OTk1Yjgx
11
- YjZjZDcwMjQxMWY4ZTRjOGFiZjZmM2QzNjc3YzZiOWRiMTVmOGM=
9
+ NDZlZDdiZmI0OTE0NzljNTkwZmQwZDZhNDY1ZDlkY2ZiNzA1MTdhMTVkNWYx
10
+ MDhlZjRkN2ZiMTJhMThlNmUxNjA0MTdiMDE0Zjc5YjU2MjFhMDA5MjljN2Nh
11
+ ZDhkMDE1MTVlMWZkZDM1NWJjZWZhN2MzNTQ3ZmYxMWY2ZjdhN2I=
12
12
  data.tar.gz: !binary |-
13
- MjE1MDlmYjY1M2I4YmRiYTVmZWE0OTlmZWMwNmVmZGRkZDczNTIyYmNiNDQw
14
- OTM3MzRiMDBmYzAyNDZmYWM0OWVjNDY4M2U4OTA5Y2JmM2NhZGMwMjlkMDVm
15
- MGZkMzNkNDdmODM2OTk4Mjg1ODI5ZmQyMjQyNjliNWRkMWIxYTE=
13
+ MDdkYjc0OWQ0ODkzNTE0N2FkZDZhMzQ3NGM4YzI1NzBkNWJiNWY2M2IzM2Y5
14
+ OWVlMmIyNTU0MDYyZjM3NWE3Y2Y0MDE5MjM2ODFkY2UxY2MxNzUyZTExYzZk
15
+ ZjA5MTIwNTlhNzNjYTM5ZTUzYTQ2MGVhZTIyZDA1OTAzYmI4YzU=
@@ -1,3 +1,5 @@
1
+ require 'time'
2
+
1
3
  module DPL
2
4
  class Provider
3
5
  class ElasticBeanstalk < Provider
@@ -32,6 +34,7 @@ module DPL
32
34
  end
33
35
 
34
36
  def push_app
37
+ @start_time = Time.now
35
38
  create_bucket unless bucket_exists?
36
39
 
37
40
  if options[:zip_file]
@@ -45,6 +48,7 @@ module DPL
45
48
  version = create_app_version(s3_object)
46
49
  if !only_create_app_version
47
50
  update_app(version)
51
+ wait_until_deployed if options[:wait_until_deployed]
48
52
  end
49
53
  end
50
54
 
@@ -138,6 +142,40 @@ module DPL
138
142
  eb.create_application_version(options)
139
143
  end
140
144
 
145
+ # Wait until EB environment update finishes
146
+ def wait_until_deployed
147
+ errorEvents = 0 # errors counter, should remain 0 for successful deployment
148
+ events = []
149
+
150
+ loop do
151
+ environment = eb.describe_environments({
152
+ :application_name => app_name,
153
+ :environment_names => [env_name]
154
+ })[:environments].first
155
+
156
+ eb.describe_events({
157
+ :environment_name => env_name,
158
+ :start_time => @start_time.utc.iso8601,
159
+ })[:events].reverse.each do |event|
160
+ message = "#{event[:event_date]} [#{event[:severity]}] #{event[:message]}"
161
+ unless events.include?(message)
162
+ events.push(message)
163
+ if event[:severity] == "ERROR"
164
+ errorEvents += 1
165
+ warn(message)
166
+ else
167
+ log(message)
168
+ end
169
+ end
170
+ end
171
+
172
+ break if environment[:status] == "Ready"
173
+ sleep 5
174
+ end
175
+
176
+ if errorEvents > 0 then error("Deployment failed.") end
177
+ end
178
+
141
179
  def update_app(version)
142
180
  options = {
143
181
  :environment_name => env_name,
@@ -17,6 +17,7 @@ describe DPL::Provider::ElasticBeanstalk do
17
17
  let(:bucket_name) { "travis-elasticbeanstalk-test-builds-#{region}" }
18
18
  let(:bucket_path) { "some/app"}
19
19
  let(:only_create_app_version) { nil }
20
+ let(:wait_until_deployed) { nil }
20
21
 
21
22
  let(:bucket_mock) do
22
23
  dbl = double("bucket mock", write: nil)
@@ -33,7 +34,8 @@ describe DPL::Provider::ElasticBeanstalk do
33
34
  described_class.new(
34
35
  DummyContext.new, :access_key_id => access_key_id, :secret_access_key => secret_access_key,
35
36
  :region => region, :app => app, :env => env, :bucket_name => bucket_name, :bucket_path => bucket_path,
36
- :only_create_app_version => only_create_app_version
37
+ :only_create_app_version => only_create_app_version,
38
+ :wait_until_deployed => wait_until_deployed
37
39
  )
38
40
  end
39
41
 
@@ -84,12 +86,12 @@ describe DPL::Provider::ElasticBeanstalk do
84
86
 
85
87
  provider.push_app
86
88
  end
87
-
89
+
88
90
  context 'only creates app version' do
89
91
  let(:only_create_app_version) { true }
90
-
92
+
91
93
  example 'verify the app is not updated' do
92
-
94
+
93
95
  expect(provider).to receive(:s3).and_return(s3_mock).twice
94
96
  expect(provider).to receive(:create_bucket)
95
97
  expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
@@ -121,5 +123,23 @@ describe DPL::Provider::ElasticBeanstalk do
121
123
  provider_without_bucket_path.push_app
122
124
  end
123
125
  end
126
+
127
+ context 'When wait_until_deployed option is set' do
128
+ let(:wait_until_deployed) { true }
129
+
130
+ example 'Waits until deployment completes' do
131
+ expect(provider).to receive(:s3).and_return(s3_mock).twice
132
+ expect(provider).to receive(:create_bucket)
133
+ expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
134
+ expect(provider).to receive(:archive_name).and_return('file.zip')
135
+ expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
136
+ expect(provider).to receive(:sleep).with(5)
137
+ expect(provider).to receive(:create_app_version).with(bucket_mock).and_return(app_version)
138
+ expect(provider).to receive(:update_app).with(app_version)
139
+ expect(provider).to receive(:wait_until_deployed)
140
+
141
+ provider.push_app
142
+ end
143
+ end
124
144
  end
125
145
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dpl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.17.travis.1402.4
4
+ version: 1.8.17.travis.1416.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Haase
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-02 00:00:00.000000000 Z
11
+ date: 2016-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec