elbas 0.19.0 → 0.21.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,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8d9387ef3cdb8dba9ce25d682855acfdcd58cdf6
4
- data.tar.gz: ef2a6444e7e23d0095097c3ef9ced294ba326c89
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZjI4YjhlOTY3ZjBjOTBmMDhlYjg3ZDcwODIzN2M0YjBlY2RkMTNmNQ==
5
+ data.tar.gz: !binary |-
6
+ YTdlMDNhMjBiZWZiOTU5MmQ3OGU0YjRkOGUwNWU5MzJiNWJhNTg3ZA==
5
7
  SHA512:
6
- metadata.gz: ec8a35adf28471878764b1f9f77f98af8e08403682624c94f7580fd060ee31e828a7110fd6b07b309ba2b8f9032cad131fb2b63413a15e12f2b1979931df9d37
7
- data.tar.gz: 4c7a50f6812e8e78033e007f0b0b2afc0a6edc08b6dfdf44c56956545a3a463555248be92f3964b19c3b3ce1a66d09f649ee7524ecdd4ccfa05c642bbd9f45dd
8
+ metadata.gz: !binary |-
9
+ OWViMWYwMGM1MjAzZGYzODE1NmNjMGNkYjkyOTdkYzczNTg1Zjc5NTFhOWQ3
10
+ OTRhMWRlYzk0NGQ0NDAyY2EzYWMxZjAxZTdlZmRjNjM2M2U2MTcwODM4MTE3
11
+ MDhlOTRlYzg5MGQ5MWVhMjU3ZGI2YjFiMmZhOTI2NzAxYTBmNTI=
12
+ data.tar.gz: !binary |-
13
+ N2E2NjgzNzhjNzU4NGZmNWE5ODgwNzEyMjQ0OGIzMjU4Y2VhMDY2ZWRjYWJl
14
+ NWFkODljMzU1Y2NiZjI3OTUxNjljZmQ4Y2RhNmYzYWViYjBjZTRlMTE3MmE0
15
+ Y2ZlODEwZGI3NzliZjlkMTYwMDM4ZmU4ODJlOTJlZWNjNmUzMGE=
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
- - 2.0.0
4
+ - 2.3.0
5
5
  sudo: false
6
6
  deploy:
7
7
  provider: rubygems
@@ -11,4 +11,4 @@ deploy:
11
11
  repo: lserman/capistrano-elbas
12
12
  branch: master
13
13
  api_key:
14
- secure: l7oX8UC0qhvbTQioFOaRy6sx3T1+JKr2MxdcEvgqZDg6hx2l2WhnZemmm0FtvjKBWC65Sk/ygT0PmeekTVzQIcK8E6Bz/mtTTbOfD/wxdOzbJfOXGYKy8amCNvPEQ+DLIkMY0hxx23t7YLj/MIu53vKCAOEwKMKMylUZrYizZWk=
14
+ secure: gRiZBVBq+/AtMoOeSsMlnCLawQVzN/SVXyOC7+5gni8iKPGDpXL+CBrUv410WStBmA2c4SYn9lNmeLOea31TOA0yIMnjfjA36jPNKzKWThRb9NuUzV8ySGqBcqp1YhvZta46Jv+d3HovGgSJ0aw5tCSfB+gPdwNvkFvqe+zIy3Y=
data/README.md CHANGED
@@ -30,6 +30,9 @@ set :aws_region, ENV['AWS_REGION']
30
30
 
31
31
  set :aws_no_reboot_on_create_ami, true
32
32
  set :aws_autoscale_instance_size, 'm1.small'
33
+
34
+ set :aws_launch_configuration_detailed_instance_monitoring, true
35
+ set :aws_launch_configuration_associate_public_ip, true
33
36
  ```
34
37
 
35
38
  ## Usage
data/bin/rspec ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rspec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require "pathname"
10
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require "rubygems"
14
+ require "bundler/setup"
15
+
16
+ load Gem.bin_path("rspec-core", "rspec")
data/elbas.gemspec CHANGED
@@ -23,8 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rspec"
24
24
  spec.add_development_dependency "webmock"
25
25
 
26
- spec.add_dependency 'aws-sdk', '~> 1'
26
+ spec.add_dependency 'aws-sdk-v1', '~> 1'
27
27
  spec.add_dependency 'capistrano', '> 3.0.0'
28
28
  spec.add_dependency 'activesupport', '>= 4.0.0'
29
-
30
29
  end
data/lib/elbas.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'aws-sdk'
1
+ require 'aws-sdk-v1'
2
2
  require 'capistrano/all'
3
3
  require 'active_support/concern'
4
4
 
data/lib/elbas/ami.rb CHANGED
@@ -7,6 +7,7 @@ module Elbas
7
7
  ami.cleanup do
8
8
  ami.save
9
9
  ami.tag 'Deployed-with' => 'ELBAS'
10
+ ami.tag 'ELBAS-Deploy-group' => ami.autoscale_group_name
10
11
  yield ami
11
12
  end
12
13
  end
@@ -27,7 +28,6 @@ module Elbas
27
28
  end
28
29
 
29
30
  private
30
-
31
31
  def name
32
32
  timestamp "#{environment}-AMI"
33
33
  end
@@ -37,6 +37,5 @@ module Elbas
37
37
  deployed_with_elbas? ami
38
38
  end
39
39
  end
40
-
41
40
  end
42
41
  end
@@ -16,7 +16,6 @@ module Elbas
16
16
  def autoscale_group_name
17
17
  fetch(:aws_autoscale_group)
18
18
  end
19
-
20
19
  end
21
20
  end
22
- end
21
+ end
@@ -15,7 +15,6 @@ module Elbas
15
15
  _credentials
16
16
  end
17
17
  end
18
-
19
18
  end
20
19
  end
21
- end
20
+ end
data/lib/elbas/aws/ec2.rb CHANGED
@@ -8,7 +8,6 @@ module Elbas
8
8
  def ec2
9
9
  @_ec2 ||= ::AWS::EC2.new(credentials)
10
10
  end
11
-
12
11
  end
13
12
  end
14
- end
13
+ end
@@ -15,8 +15,7 @@ module Elbas
15
15
  self
16
16
  end
17
17
 
18
- protected
19
-
18
+ private
20
19
  def base_ec2_instance
21
20
  @_base_ec2_instance ||= autoscale_group.ec2_instances.filter('instance-state-name', 'running').first
22
21
  end
@@ -29,11 +28,9 @@ module Elbas
29
28
  "#{str}-#{Time.now.to_i}"
30
29
  end
31
30
 
32
- private
33
-
34
31
  def deployed_with_elbas?(resource)
35
- resource.tags['Deployed-with'] == 'ELBAS'
32
+ resource.tags['Deployed-with'] == 'ELBAS' &&
33
+ resource.tags['ELBAS-Deploy-group'] == autoscale_group_name
36
34
  end
37
-
38
35
  end
39
36
  end
@@ -17,7 +17,7 @@ module Elbas
17
17
  end
18
18
 
19
19
  def attach_to_autoscale_group!
20
- info "Attaching Launch Configuration to AutoScale Group"
20
+ info 'Attaching Launch Configuration to AutoScale Group'
21
21
  autoscale_group.update(launch_configuration: aws_counterpart)
22
22
  end
23
23
 
@@ -29,9 +29,8 @@ module Elbas
29
29
  end
30
30
 
31
31
  private
32
-
33
32
  def name
34
- timestamp "ELBAS-#{environment}-LC"
33
+ timestamp "ELBAS-#{environment}-#{autoscale_group_name}-LC"
35
34
  end
36
35
 
37
36
  def instance_size
@@ -39,21 +38,21 @@ module Elbas
39
38
  end
40
39
 
41
40
  def create_options
42
- _options = {
41
+ options = {
43
42
  security_groups: base_ec2_instance.security_groups.to_a,
44
- detailed_instance_monitoring: true,
45
- associate_public_ip_address: true,
43
+ detailed_instance_monitoring: fetch(:aws_launch_configuration_detailed_instance_monitoring, true),
44
+ associate_public_ip_address: fetch(:aws_launch_configuration_associate_public_ip, true)
46
45
  }
47
46
 
48
47
  if user_data = fetch(:aws_launch_configuration_user_data, nil)
49
- _options.merge user_data: user_data
48
+ options.merge user_data: user_data
50
49
  end
51
50
 
52
- _options
51
+ options
53
52
  end
54
53
 
55
54
  def deployed_with_elbas?(lc)
56
- lc.name =~ /ELBAS-#{environment}/
55
+ lc.name.include? "ELBAS-#{environment}-#{autoscale_group_name}-LC"
57
56
  end
58
57
 
59
58
  def trash
@@ -61,6 +60,5 @@ module Elbas
61
60
  deployed_with_elbas? lc
62
61
  end
63
62
  end
64
-
65
63
  end
66
64
  end
data/lib/elbas/logger.rb CHANGED
@@ -1,9 +1,7 @@
1
1
  module Elbas
2
2
  module Logger
3
-
4
3
  def info(message)
5
4
  p "ELBAS: #{message}"
6
5
  end
7
-
8
6
  end
9
- end
7
+ end
@@ -1,6 +1,5 @@
1
1
  module Elbas
2
2
  module Retryable
3
-
4
3
  def with_retry(max: fetch(:elbas_retry_max, 3), delay: fetch(:elbas_retry_delay, 5))
5
4
  tries ||= 0
6
5
  tries += 1
@@ -13,6 +12,5 @@ module Elbas
13
12
  retry
14
13
  end
15
14
  end
16
-
17
15
  end
18
16
  end
@@ -1,11 +1,9 @@
1
1
  module Elbas
2
2
  module Taggable
3
-
4
3
  def tag(tags = {})
5
4
  with_retry do
6
5
  tags.each { |k, v| aws_counterpart.tags[k] = v }
7
6
  end
8
7
  end
9
-
10
8
  end
11
9
  end
data/lib/elbas/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Elbas
2
- VERSION = '0.19.0'
2
+ VERSION = '0.21.0'
3
3
  end
data/spec/ami_spec.rb CHANGED
@@ -3,7 +3,7 @@ describe Elbas::AMI do
3
3
  subject { Elbas::AMI.new }
4
4
 
5
5
  it 'retries the tag 3 times' do
6
- expect(subject).to receive(:aws_counterpart).exactly(3).times { OpenStruct.new(tags: nil) }
6
+ expect(subject).to receive(:aws_counterpart).exactly(3).times { fail RuntimeError }
7
7
  subject.tag 'Test' => true
8
8
  end
9
9
  end
data/spec/elbas_spec.rb CHANGED
@@ -33,6 +33,10 @@ describe 'ELBAS' do
33
33
  it 'tags the new AMI with Deployed-with=ELBAS' do
34
34
  expect(WebMock).to have_requested(:post, /ec2.(.*).amazonaws.com\/\z/).with(body: /Action=CreateTags&ResourceId.1=ami-4fa54026&Tag.1.Key=Deployed-with&Tag.1.Value=ELBAS/)
35
35
  end
36
+
37
+ it 'tags the new AMI with ELBAS-Deploy-group=<autoscale group name>' do
38
+ expect(WebMock).to have_requested(:post, /ec2.(.*).amazonaws.com\/\z/).with(body: /Action=CreateTags&ResourceId.1=ami-4fa54026&Tag.1.Key=ELBAS-Deploy-group&Tag.1.Value=production/)
39
+ end
36
40
  end
37
41
 
38
42
  describe 'Launch configuration creation & cleanup' do
@@ -48,12 +52,12 @@ describe 'ELBAS' do
48
52
  end
49
53
 
50
54
  it 'deletes any LCs with name =~ ELBAS-production' do
51
- expect(WebMock).to have_requested(:post, /autoscaling.(.*).amazonaws.com\/\z/).with(body: /Action=DeleteLaunchConfiguration&LaunchConfigurationName=ELBAS-production-LC-1234567890/)
55
+ expect(WebMock).to have_requested(:post, /autoscaling.(.*).amazonaws.com\/\z/).with(body: /Action=DeleteLaunchConfiguration&LaunchConfigurationName=ELBAS-production-production-LC-1234567890/)
52
56
  end
53
57
 
54
58
  it 'attaches the LC to the autoscale group' do
55
59
  launch_configuration.attach_to_autoscale_group!
56
- expect(WebMock).to have_requested(:post, /autoscaling.(.*).amazonaws.com\/\z/).with(body: /Action=UpdateAutoScalingGroup&AutoScalingGroupName=production&LaunchConfigurationName=ELBAS-production-LC-\d{10,}/)
60
+ expect(WebMock).to have_requested(:post, /autoscaling.(.*).amazonaws.com\/\z/).with(body: /Action=UpdateAutoScalingGroup&AutoScalingGroupName=production&LaunchConfigurationName=ELBAS-production-production-LC-\d{10,}/)
57
61
  end
58
62
  end
59
63
 
@@ -7,7 +7,7 @@
7
7
  <PlacementTenancy>dedicated</PlacementTenancy>
8
8
  <CreatedTime>2013-01-21T23:04:42.200Z</CreatedTime>
9
9
  <KernelId/>
10
- <LaunchConfigurationName>ELBAS-production-LC-1234567890</LaunchConfigurationName>
10
+ <LaunchConfigurationName>ELBAS-production-production-LC-1234567890</LaunchConfigurationName>
11
11
  <UserData/>
12
12
  <InstanceType>m1.small</InstanceType>
13
13
  <LaunchConfigurationARN>arn:aws:autoscaling:us-east-1:803981987763:launchConfiguration:
@@ -26,4 +26,4 @@
26
26
  <ResponseMetadata>
27
27
  <RequestId>d05a22f8-b690-11e2-bf8e-2113fEXAMPLE</RequestId>
28
28
  </ResponseMetadata>
29
- </DescribeLaunchConfigurationsResponse>
29
+ </DescribeLaunchConfigurationsResponse>
@@ -7,5 +7,11 @@
7
7
  <key>Deployed-with</key>
8
8
  <value>ELBAS</value>
9
9
  </item>
10
+ <item>
11
+ <resourceId>ami-1a2b3c4d</resourceId>
12
+ <resourceType>image</resourceType>
13
+ <key>ELBAS-Deploy-group</key>
14
+ <value>production</value>
15
+ </item>
10
16
  </tagSet>
11
- </DescribeTagsResponse>
17
+ </DescribeTagsResponse>
metadata CHANGED
@@ -1,111 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elbas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Logan Serman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-23 00:00:00.000000000 Z
11
+ date: 2016-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: webmock
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: aws-sdk
70
+ name: aws-sdk-v1
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: '1'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: capistrano
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">"
87
+ - - ! '>'
88
88
  - !ruby/object:Gem::Version
89
89
  version: 3.0.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">"
94
+ - - ! '>'
95
95
  - !ruby/object:Gem::Version
96
96
  version: 3.0.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: activesupport
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - ! '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: 4.0.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - ! '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: 4.0.0
111
111
  description: Capistrano plugin for deploying to AWS AutoScale Groups. Deploys to all
@@ -113,17 +113,19 @@ description: Capistrano plugin for deploying to AWS AutoScale Groups. Deploys to
113
113
  AutoScale Group.
114
114
  email:
115
115
  - logan.serman@metova.com
116
- executables: []
116
+ executables:
117
+ - rspec
117
118
  extensions: []
118
119
  extra_rdoc_files: []
119
120
  files:
120
- - ".gitignore"
121
- - ".rspec"
122
- - ".travis.yml"
121
+ - .gitignore
122
+ - .rspec
123
+ - .travis.yml
123
124
  - Gemfile
124
125
  - LICENSE.txt
125
126
  - README.md
126
127
  - Rakefile
128
+ - bin/rspec
127
129
  - elbas.gemspec
128
130
  - lib/elbas.rb
129
131
  - lib/elbas/ami.rb
@@ -162,17 +164,17 @@ require_paths:
162
164
  - lib
163
165
  required_ruby_version: !ruby/object:Gem::Requirement
164
166
  requirements:
165
- - - ">="
167
+ - - ! '>='
166
168
  - !ruby/object:Gem::Version
167
169
  version: '0'
168
170
  required_rubygems_version: !ruby/object:Gem::Requirement
169
171
  requirements:
170
- - - ">="
172
+ - - ! '>='
171
173
  - !ruby/object:Gem::Version
172
174
  version: '0'
173
175
  requirements: []
174
176
  rubyforge_project:
175
- rubygems_version: 2.4.5.1
177
+ rubygems_version: 2.4.5
176
178
  signing_key:
177
179
  specification_version: 4
178
180
  summary: Capistrano plugin for deploying to AWS AutoScale Groups.