elbas 0.19.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
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.