eb_deployer 0.6.6 → 0.7.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61bce2cf3c9e823994645f76257fe43b360f3dfa
4
- data.tar.gz: 0446b95ef9b12a138b495fd847118981c22452cf
3
+ metadata.gz: 289171f2547c967c1eae9bc6d0f563dc21f22171
4
+ data.tar.gz: 45b726f54907a691b25bf9c7d988cef95033ad9f
5
5
  SHA512:
6
- metadata.gz: 86ab2af9a6e5beaa906486a9929f75914a4f425169d39dd32c077ea63310951ea7c83ca93ff4e3c7aec11fe4bcf00b7ee5b0e5675bc1b01175776eaa6021d8ee
7
- data.tar.gz: a699f697841d6e07c2d1b0ee7b682d65431f2d24b1e26a4602e7bb72303eead2866ce9e7014e7652052005a9b30d151481c4909f290e2d97e9b8f63f16777d53
6
+ metadata.gz: 56223ac7b25c78454895e56da1c8d2ffbb1f472fcdf33410630a3ad5e7ca67c001c22974a5633a958ececaa114bca3972925e03b1c023749d7e2792c0795cfda
7
+ data.tar.gz: d4adf02b72603f9ce2ee50cd7fa48ad8736c3d659a4426bee6476a9053a0522cc5548f8f51838966a4c5b34d86fd093f84fd65296bb2ceed3bd12bb3fa74c3df
@@ -1,8 +1,18 @@
1
+ 0.7.0
2
+ =====
3
+
4
+ * Add service specific AWS sdk gems
5
+ * [#79](https://github.com/ThoughtWorksStudios/eb_deployer/pull/79): Environment updates can complete with errors
6
+ * [#82](https://github.com/ThoughtWorksStudios/eb_deployer/pull/82): Added a line to force STDOUT output every line
7
+ * [#85](https://github.com/ThoughtWorksStudios/eb_deployer/pull/85): Improve package not found error message
8
+ * [#86](https://github.com/ThoughtWorksStudios/eb_deployer/pull/86): Fix to for inactive stack updates when instances are 0
9
+
1
10
  0.6.6
2
11
  =====
3
12
 
4
- * Add support for specifying (and overriding) a [stack policy](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html) for the CloudFormation resource stack
5
- * Fix issue where deployment hangs if resource stack update fails and stack is rolled back, deployment will now fail when the resource stack update fails
13
+ * Add support for specifying (and overriding) a [stack policy](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html) for the CloudFormation resource stack. (contributed by @jlabrecque)
14
+ * Fix issue where deployment hangs if resource stack update fails and stack is rolled back, deployment will now fail when the resource stack update fails. (contributed by @jlabrecque)
15
+ * Add support for creating environment base on a elasticbeanstalk template. (contributed by @djpate)
6
16
 
7
17
  0.6.5
8
18
  =====
data/Gemfile CHANGED
@@ -6,5 +6,5 @@ gemspec
6
6
  gem 'redcarpet', :platform => :mri
7
7
  gem 'yard'
8
8
  gem 'rake'
9
- gem 'railties'
9
+ gem 'railties', '~> 4.1'
10
10
  gem 'test-unit'
@@ -7,5 +7,7 @@ if File.exists?(git_path)
7
7
  $:.unshift(lib_path)
8
8
  end
9
9
 
10
+ STDOUT.sync = true # Forces output after every line.
11
+
10
12
  require 'eb_deployer'
11
- EbDeployer.cli
13
+ EbDeployer.cli
@@ -9,7 +9,9 @@ Gem::Specification.new do |gem|
9
9
  gem.homepage = "https://github.com/ThoughtWorksStudios/eb_deployer"
10
10
  gem.license = 'MIT'
11
11
 
12
- gem.add_runtime_dependency 'aws-sdk', '~> 2', '>= 2.0.0'
12
+ gem.add_runtime_dependency 'aws-sdk-cloudformation', '~> 1.4', '>= 1.4.0'
13
+ gem.add_runtime_dependency 'aws-sdk-elasticbeanstalk', '~> 1.5', '~> 1.5.0'
14
+ gem.add_runtime_dependency 'aws-sdk-s3', '~> 1', '~> 1.0.0'
13
15
 
14
16
  gem.files = `git ls-files`.split($\).reject {|f| f =~ /^samples\// }
15
17
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -3,7 +3,9 @@ require 'set'
3
3
  require 'time'
4
4
  require 'json'
5
5
  require 'timeout'
6
- require 'aws-sdk'
6
+ require 'aws-sdk-s3'
7
+ require 'aws-sdk-elasticbeanstalk'
8
+ require 'aws-sdk-cloudformation'
7
9
  require 'optparse'
8
10
  require 'erb'
9
11
  require 'fileutils'
@@ -242,7 +244,6 @@ module EbDeployer
242
244
  app = opts[:application]
243
245
  bs = opts[:bs_driver] || AWSDriver::Beanstalk.new
244
246
  s3 = opts[:s3_driver] || AWSDriver::S3Driver.new
245
- cf = opts[:cf_driver] || AWSDriver::CloudFormationDriver.new
246
247
 
247
248
  Application.new(app, bs, s3).delete(opts[:environment])
248
249
  end
@@ -316,7 +317,6 @@ module EbDeployer
316
317
 
317
318
  opts.on("--debug", "Output AWS debug log") do |d|
318
319
  require 'logger'
319
- require 'aws-sdk'
320
320
  logger = Logger.new($stdout)
321
321
  logger.level = Logger::DEBUG
322
322
  Aws.config.update(:logger => logger)
@@ -14,7 +14,7 @@ module EbDeployer
14
14
  def create_version(version_label, package)
15
15
  create_application_if_not_exists
16
16
 
17
- source_bundle = if File.exists?(package)
17
+ source_bundle = if File.exist?(package)
18
18
  if File.extname(package) == '.yml'
19
19
  YAML.load(File.read(package))
20
20
  else
@@ -26,7 +26,7 @@ module EbDeployer
26
26
  bucket, obj_key = package.split(':')
27
27
  {'s3_bucket' => bucket, 's3_key' => obj_key}
28
28
  else
29
- raise "Unknown package file/format: #{package.inspect}"
29
+ raise "Neither the file exists nor it is a valid s3 url: #{package.inspect}"
30
30
  end
31
31
 
32
32
  unless @eb_driver.application_version_labels(@name).include?(version_label)
@@ -57,7 +57,7 @@ module EbDeployer
57
57
 
58
58
  def package_digest(package)
59
59
  return nil unless package
60
- return package unless File.exists?(package)
60
+ return package unless File.exist?(package)
61
61
  Digest::MD5.file(package).hexdigest
62
62
  end
63
63
  end
@@ -19,7 +19,6 @@ module EbDeployer
19
19
  return
20
20
  end
21
21
 
22
- active_ebenv = ebenvs.detect(&method(:active_ebenv?))
23
22
  inactive_ebenv = ebenvs.reject(&method(:active_ebenv?)).first
24
23
 
25
24
  inactive_ebenv.deploy(version_label, env_settings)
@@ -17,6 +17,7 @@ module EbDeployer
17
17
  @bs = eb_driver
18
18
  @creation_opts = default_create_options.merge(reject_nil(creation_opts))
19
19
  @accepted_healthy_states = @creation_opts[:accepted_healthy_states]
20
+ @event_poller = nil
20
21
  end
21
22
 
22
23
  def deploy(version_label, settings={})
@@ -35,7 +36,7 @@ module EbDeployer
35
36
  def apply_settings(settings)
36
37
  raise "Env #{self.name} not exists for applying settings" unless @bs.environment_exists?(@app, @name)
37
38
  wait_for_env_status_to_be_ready
38
- with_polling_events(/Environment update completed successfully/i) do
39
+ with_polling_events(/Successfully deployed new configuration to environment/i) do
39
40
  @bs.update_environment_settings(@app, @name, settings)
40
41
  end
41
42
  end
@@ -103,7 +104,7 @@ module EbDeployer
103
104
  end
104
105
 
105
106
  def update_eb_env(settings, version_label)
106
- with_polling_events(/Environment update completed successfully/i) do
107
+ with_polling_events(/Successfully deployed new configuration to environment/i) do
107
108
  @bs.update_environment(@app,
108
109
  @name,
109
110
  version_label,
@@ -135,6 +136,10 @@ module EbDeployer
135
136
  raise "Elasticbeanstalk instance provision failed (maybe a problem with your .ebextension files). The original message: #{event[:message]}"
136
137
  end
137
138
 
139
+ if event[:message] =~ /complete, but with errors/
140
+ raise event[:message]
141
+ end
142
+
138
143
  if event[:message] =~ /However, there were issues during launch\. See event log for details\./
139
144
  raise "Environment launched, but with errors. The original message: #{event[:message]}"
140
145
  end
@@ -3,7 +3,7 @@ module EbDeployer
3
3
  include Utils
4
4
  attr_accessor :creation_opts, :strategy_name
5
5
 
6
- attr_writer :resource_stacks, :settings, :inactive_settings, :components, :component_under_deploy
6
+ attr_writer :resource_stacks, :settings, :inactive_settings, :component_under_deploy
7
7
 
8
8
  attr_reader :name
9
9
 
@@ -16,6 +16,7 @@ module EbDeployer
16
16
  @settings = []
17
17
  @inactive_settings = []
18
18
  @strategy_name = :blue_green
19
+ @components = nil
19
20
  yield(self) if block_given?
20
21
  unless @components
21
22
  @components = [DefaultComponent.new(self, @creation_opts, @strategy_name, @eb_driver)]
@@ -1,3 +1,3 @@
1
1
  module EbDeployer
2
- VERSION = "0.6.6"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -19,7 +19,7 @@ module EbDeployer
19
19
  end
20
20
 
21
21
  all_versions.sort! { |x, y| y[:date_updated] <=> x[:date_updated] }
22
- versions_to_keep = all_versions.slice!(range_to_keep)
22
+ all_versions.slice!(range_to_keep)
23
23
  all_versions.map { |apv| apv[:version] }
24
24
  end
25
25
 
@@ -1,6 +1,6 @@
1
1
  require 'rails/generators'
2
2
  require 'eb_deployer/default_config'
3
- require 'aws-sdk'
3
+ require 'aws-sdk-elasticbeanstalk'
4
4
  require 'securerandom'
5
5
 
6
6
  module EbDeployer
@@ -8,6 +8,7 @@ class EBStub
8
8
  @versions_deleted = {}
9
9
  @event_fetched_times = 0
10
10
  @envs_health_states = {}
11
+ @events = nil
11
12
  end
12
13
 
13
14
  def create_application(app)
@@ -25,7 +26,7 @@ class EBStub
25
26
  end
26
27
 
27
28
  def create_environment(app, env, solution_stack, cname_prefix, version, tier, tags, settings, template_name)
28
- raise 'cname prefix is not avaible' if @envs.values.detect { |env| env[:cname_prefix] == cname_prefix }
29
+ raise 'cname prefix is not avaible' if @envs.values.detect { |value| value[:cname_prefix] == cname_prefix }
29
30
  raise "env name #{env} is longer than 23 chars" if env.size > 23
30
31
  raise "app not exists" unless application_exists?(app)
31
32
  @envs[env_key(app, env)] = {
@@ -98,7 +99,7 @@ class EBStub
98
99
  set_env_ready(app_name, env_name, true) # assume env become ready after it spit out all the events
99
100
 
100
101
  unless @events # unrestricted mode for testing if no explicit events set
101
- return [generate_event_from_messages(['Environment update completed successfully',
102
+ return [generate_event_from_messages(['Successfully deployed new configuration to environment',
102
103
  'terminateEnvironment completed successfully',
103
104
  'Successfully launched environment',
104
105
  'Completed swapping CNAMEs for environments'
@@ -176,7 +177,7 @@ class EBStub
176
177
  end
177
178
 
178
179
  def list_solution_stack_names
179
- @solution_stacks || ["64bit Amazon Linux 2014.09 v1.1.0 running Tomcat 7 Java 7"]
180
+ ["64bit Amazon Linux 2014.09 v1.1.0 running Tomcat 7 Java 7"]
180
181
  end
181
182
 
182
183
  #test only
@@ -207,7 +208,7 @@ class EBStub
207
208
 
208
209
  def environment_names_for_application(app)
209
210
  @envs.inject([]) do |memo, pair|
210
- key, env = pair
211
+ _, env = pair
211
212
  memo << env[:name] if env[:application] == app
212
213
  memo
213
214
  end
@@ -340,10 +341,10 @@ class CFStub
340
341
 
341
342
  def generate_event_from_messages(stack, messages)
342
343
  messages.map do |message|
343
- event = OpenStruct.new(timestamp: Time.now,
344
- resource_type: 'AWS::CloudFormation::Stack',
345
- logical_resource_id: stack,
346
- resource_status: message)
344
+ OpenStruct.new(timestamp: Time.now,
345
+ resource_type: 'AWS::CloudFormation::Stack',
346
+ logical_resource_id: stack,
347
+ resource_status: message)
347
348
  end.reverse
348
349
  end
349
350
  end
@@ -61,6 +61,17 @@ class EbEnvironmentTest < Test::Unit::TestCase
61
61
  assert_raises(RuntimeError) { env.deploy("version 1") }
62
62
  end
63
63
 
64
+ def test_should_raise_runtime_error_when_issues_during_environment_update
65
+ env = EbDeployer::EbEnvironment.new("myapp", "production", @eb_driver, :cname_prefix => 'myapp-production')
66
+ @eb_driver.set_events("myapp", t("production", 'myapp'),
67
+ [],
68
+ ["start deploying",
69
+ "create environment",
70
+ "Update environment operation is complete, but with errors. For more information, see troubleshooting documentation."])
71
+
72
+ assert_raises(RuntimeError) { env.deploy("version 1") }
73
+ end
74
+
64
75
  def test_should_raise_runtime_error_when_issues_during_launch
65
76
  env = EbDeployer::EbEnvironment.new("myapp", "production", @eb_driver, :cname_prefix => 'myapp-production')
66
77
  @eb_driver.set_events("myapp", t("production", 'myapp'),
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.6.6
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - wpc
@@ -10,28 +10,68 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-03-18 00:00:00.000000000 Z
13
+ date: 2018-04-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: aws-sdk
16
+ name: aws-sdk-cloudformation
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '2'
21
+ version: '1.4'
22
22
  - - ">="
23
23
  - !ruby/object:Gem::Version
24
- version: 2.0.0
24
+ version: 1.4.0
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
29
  - - "~>"
30
30
  - !ruby/object:Gem::Version
31
- version: '2'
31
+ version: '1.4'
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 2.0.0
34
+ version: 1.4.0
35
+ - !ruby/object:Gem::Dependency
36
+ name: aws-sdk-elasticbeanstalk
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.5'
42
+ - - "~>"
43
+ - !ruby/object:Gem::Version
44
+ version: 1.5.0
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - "~>"
50
+ - !ruby/object:Gem::Version
51
+ version: '1.5'
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.5.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: aws-sdk-s3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: 1.0.0
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1'
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 1.0.0
35
75
  description: For automating Blue-Green deployment flows on Elastic Beanstalk.
36
76
  email:
37
77
  - alex.hal9000@gmail.com
@@ -153,4 +193,3 @@ test_files:
153
193
  - test/test_helper.rb
154
194
  - test/tier_setting_deploy_test.rb
155
195
  - test/versions_deploy_test.rb
156
- has_rdoc: