automan 2.3.5 → 2.3.6

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +0 -5
  3. data/automan.gemspec +3 -3
  4. data/lib/automan.rb +0 -1
  5. data/lib/automan/base.rb +3 -7
  6. data/lib/automan/beanstalk/deployer.rb +1 -1
  7. data/lib/automan/beanstalk/package.rb +1 -1
  8. data/lib/automan/beanstalk/router.rb +1 -1
  9. data/lib/automan/cli/snapper.rb +23 -3
  10. data/lib/automan/cli/stacker.rb +0 -19
  11. data/lib/automan/cloudformation/launcher.rb +3 -6
  12. data/lib/automan/cloudformation/replacer.rb +1 -1
  13. data/lib/automan/cloudformation/terminator.rb +1 -1
  14. data/lib/automan/ec2/image.rb +3 -3
  15. data/lib/automan/mixins/aws_caller.rb +7 -21
  16. data/lib/automan/rds/snapshot.rb +25 -35
  17. data/lib/automan/s3/downloader.rb +1 -10
  18. data/lib/automan/version.rb +1 -1
  19. data/spec/beanstalk/application_spec.rb +17 -17
  20. data/spec/beanstalk/configuration_spec.rb +24 -24
  21. data/spec/beanstalk/deployer_spec.rb +65 -65
  22. data/spec/beanstalk/router_spec.rb +19 -18
  23. data/spec/beanstalk/terminator_spec.rb +16 -16
  24. data/spec/beanstalk/uploader_spec.rb +13 -13
  25. data/spec/beanstalk/version_spec.rb +10 -8
  26. data/spec/cloudformation/launcher_spec.rb +65 -63
  27. data/spec/cloudformation/replacer_spec.rb +10 -10
  28. data/spec/cloudformation/terminator_spec.rb +23 -23
  29. data/spec/cloudformation/uploader_spec.rb +13 -13
  30. data/spec/ec2/image_spec.rb +55 -55
  31. data/spec/ec2/instance_spec.rb +17 -17
  32. data/spec/mixins/aws_caller_spec.rb +9 -9
  33. data/spec/mixins/utils_spec.rb +28 -27
  34. data/spec/rds/snapshot_spec.rb +46 -44
  35. metadata +9 -22
  36. data/.ruby-gemset +0 -1
  37. data/.ruby-version +0 -1
  38. data/.travis.yml +0 -5
  39. data/lib/automan/elasticache/router.rb +0 -79
  40. data/spec/elasticache/router_spec.rb +0 -29
  41. data/templates/stacker/.env.example +0 -14
  42. data/templates/stacker/.gitignore +0 -2
  43. data/templates/stacker/.ruby-gemset.tt +0 -1
  44. data/templates/stacker/.ruby-version +0 -1
  45. data/templates/stacker/Gemfile +0 -4
  46. data/templates/stacker/bin/%app_name%.tt +0 -62
  47. data/templates/stacker/bin/launch_%app_name%.sh.tt +0 -12
@@ -4,35 +4,35 @@ require 'logger'
4
4
  ENV['MAX_SNAPSHOTS'] = "50"
5
5
 
6
6
  describe Automan::RDS::Snapshot do
7
- it { is_expected.to respond_to :rds }
8
- it { is_expected.to respond_to :create }
9
- it { is_expected.to respond_to :delete }
10
- it { is_expected.to respond_to :prune }
11
- it { is_expected.to respond_to :latest }
12
- it { is_expected.to respond_to :default_snapshot_name }
7
+ it { should respond_to :rds }
8
+ it { should respond_to :create }
9
+ it { should respond_to :delete }
10
+ it { should respond_to :prune }
11
+ it { should respond_to :latest }
12
+ it { should respond_to :default_snapshot_name }
13
13
 
14
14
  describe '#default_snapshot_name' do
15
- subject() do
15
+ subject(:s) do
16
16
  AWS.stub!
17
17
  s = Automan::RDS::Snapshot.new
18
18
  s.logger = Logger.new('/dev/null')
19
- allow(s).to receive(:db_environment).and_return('dev1')
19
+ s.stub(:db_environment).and_return('dev1')
20
20
  s
21
21
  end
22
22
 
23
23
  it "never returns nil" do
24
- expect(subject.default_snapshot_name('somedb')).to_not be_nil
24
+ s.default_snapshot_name('somedb').should_not be_nil
25
25
  end
26
26
 
27
- it "returns environment dash time string" do
28
- name = subject.default_snapshot_name('somedb')
29
- expect(name).to match /^dev1-(\d{4})-(\d{2})-(\d{2})T(\d{2})-(\d{2})/
27
+ it "returns environment dash iso8601 string" do
28
+ name = s.default_snapshot_name('somedb')
29
+ name.should match /^dev1-(\d{4})-(\d{2})-(\d{2})T(\d{2})-(\d{2})-(\d{2})[+-](\d{2})-(\d{2})/
30
30
  end
31
31
 
32
32
  end
33
33
 
34
34
  describe '#create' do
35
- subject() do
35
+ subject(:s) do
36
36
  AWS.stub!
37
37
  s = Automan::RDS::Snapshot.new
38
38
  s.logger = Logger.new('/dev/null')
@@ -40,56 +40,56 @@ describe Automan::RDS::Snapshot do
40
40
  end
41
41
 
42
42
  it "raises error if could not find database" do
43
- allow(subject).to receive(:find_db).and_return(nil)
43
+ s.stub(:find_db).and_return(nil)
44
44
  expect {
45
- subject.create
45
+ s.create
46
46
  }.to raise_error Automan::RDS::DatabaseDoesNotExistError
47
47
  end
48
48
 
49
49
  it "raises error if RDS says database does not exist" do
50
50
  db = double(:db)
51
- allow(db).to receive(:exists?).and_return(false)
52
- allow(subject).to receive(:find_db).and_return(db)
51
+ db.stub(:exists?).and_return(false)
52
+ s.stub(:find_db).and_return(db)
53
53
 
54
54
  expect {
55
- subject.create
55
+ s.create
56
56
  }.to raise_error Automan::RDS::DatabaseDoesNotExistError
57
57
  end
58
58
 
59
59
  end
60
60
 
61
61
  describe '#tagged_can_prune?' do
62
- subject() do
62
+ subject(:s) do
63
63
  AWS.stub!
64
64
  s = Automan::RDS::Snapshot.new
65
65
  s.logger = Logger.new('/dev/null')
66
- allow(s).to receive(:snapshot_arn)
66
+ s.stub(:snapshot_arn)
67
67
  s
68
68
  end
69
69
 
70
70
  it 'returns true if snapshot is tagged with CanPrune=yes' do
71
- allow(subject).to receive(:tags).and_return( {'CanPrune' => 'yes'} )
72
- expect(subject.tagged_can_prune?( double() )).to be_truthy
71
+ s.stub(:tags).and_return( {'CanPrune' => 'yes'} )
72
+ s.tagged_can_prune?( double() ).should be_true
73
73
  end
74
74
 
75
75
  it 'returns false if snapshot is missing CanPrune tag' do
76
- allow(subject).to receive(:tags).and_return( {} )
77
- expect(subject.tagged_can_prune?( double() )).to be_falsey
76
+ s.stub(:tags).and_return( {} )
77
+ s.tagged_can_prune?( double() ).should be_false
78
78
  end
79
79
 
80
80
  it 'returns false if snapshot is tagged with CanPrune=nil' do
81
- allow(subject).to receive(:tags).and_return( {'CanPrune' => nil} )
82
- expect(subject.tagged_can_prune?( double() )).to be_falsey
81
+ s.stub(:tags).and_return( {'CanPrune' => nil} )
82
+ s.tagged_can_prune?( double() ).should be_false
83
83
  end
84
84
 
85
85
  it 'returns false if snapshot is tagged with CanPrune=foo' do
86
- allow(subject).to receive(:tags).and_return( {'CanPrune' => 'foo'} )
87
- expect(subject.tagged_can_prune?( double() )).to be_falsey
86
+ s.stub(:tags).and_return( {'CanPrune' => 'foo'} )
87
+ s.tagged_can_prune?( double() ).should be_false
88
88
  end
89
89
  end
90
90
 
91
91
  describe '#available?' do
92
- subject() do
92
+ subject(:s) do
93
93
  AWS.stub!
94
94
  s = Automan::RDS::Snapshot.new
95
95
  s.logger = Logger.new('/dev/null')
@@ -97,19 +97,21 @@ describe Automan::RDS::Snapshot do
97
97
  end
98
98
 
99
99
  it 'returns true if status is "available"' do
100
- snap = double(status: 'available')
101
- expect(subject.available?(snap)).to be_truthy
100
+ snap = double(:snap)
101
+ snap.stub(:status).and_return('available')
102
+ s.available?(snap).should be_true
102
103
  end
103
104
 
104
105
  it 'returns false if status is foo' do
105
- snap = double(status: 'foo')
106
- expect(subject.available?(snap)).to be_falsey
106
+ snap = double(:snap)
107
+ snap.stub(:status).and_return('foo')
108
+ s.available?(snap).should be_false
107
109
  end
108
110
  end
109
111
 
110
112
  describe '#manual?' do
111
113
  let(:snap) { double }
112
- subject() do
114
+ subject(:s) do
113
115
  AWS.stub!
114
116
  s = Automan::RDS::Snapshot.new
115
117
  s.logger = Logger.new('/dev/null')
@@ -117,34 +119,34 @@ describe Automan::RDS::Snapshot do
117
119
  end
118
120
 
119
121
  it 'returns true if type is "manual"' do
120
- allow(snap).to receive(:snapshot_type).and_return('manual')
121
- expect(subject.manual?(snap)).to be_truthy
122
+ snap.stub(:snapshot_type).and_return('manual')
123
+ s.manual?(snap).should be_true
122
124
  end
123
125
 
124
126
  it 'returns false if type is foo' do
125
- allow(snap).to receive(:snapshot_type).and_return('foo')
126
- expect(subject.manual?(snap)).to be_falsey
127
+ snap.stub(:snapshot_type).and_return('foo')
128
+ s.manual?(snap).should be_false
127
129
  end
128
130
  end
129
131
 
130
132
  describe '#prunable_snapshots' do
131
133
  let(:snap) { double }
132
- subject() do
134
+ subject(:s) do
133
135
  AWS.stub!
134
136
  s = Automan::RDS::Snapshot.new
135
137
  s.logger = Logger.new('/dev/null')
136
- allow(s).to receive(:get_all_snapshots).and_return( [ snap ] )
138
+ s.stub(:get_all_snapshots).and_return( [ snap ] )
137
139
  s
138
140
  end
139
141
 
140
142
  it 'includes snapshots which can be pruned' do
141
- allow(subject).to receive(:can_prune?).and_return(true)
142
- expect(subject.prunable_snapshots).to include(snap)
143
+ s.stub(:can_prune?).and_return(true)
144
+ s.prunable_snapshots.should include(snap)
143
145
  end
144
146
 
145
147
  it 'excludes snapshots which should not be pruned' do
146
- allow(subject).to receive(:can_prune?).and_return(false)
147
- expect(subject.prunable_snapshots).to_not include(snap)
148
+ s.stub(:can_prune?).and_return(false)
149
+ s.prunable_snapshots.should_not include(snap)
148
150
  end
149
151
  end
150
152
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: automan
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.5
4
+ version: 2.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Chalfant
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-08-28 00:00:00.000000000 Z
12
+ date: 2015-10-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -45,42 +45,42 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '3'
48
+ version: 2.12.2
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '3'
55
+ version: 2.12.2
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec-mocks
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '3'
62
+ version: 2.12.2
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '3'
69
+ version: 2.12.2
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec-expectations
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '3'
76
+ version: 2.12.1
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '3'
83
+ version: 2.12.1
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: aws-sdk
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -166,9 +166,6 @@ extensions: []
166
166
  extra_rdoc_files: []
167
167
  files:
168
168
  - ".gitignore"
169
- - ".ruby-gemset"
170
- - ".ruby-version"
171
- - ".travis.yml"
172
169
  - Gemfile
173
170
  - LICENSE.txt
174
171
  - README.md
@@ -207,7 +204,6 @@ files:
207
204
  - lib/automan/ec2/errors.rb
208
205
  - lib/automan/ec2/image.rb
209
206
  - lib/automan/ec2/instance.rb
210
- - lib/automan/elasticache/router.rb
211
207
  - lib/automan/mixins/aws_caller.rb
212
208
  - lib/automan/mixins/utils.rb
213
209
  - lib/automan/rds/errors.rb
@@ -232,17 +228,9 @@ files:
232
228
  - spec/cloudformation/uploader_spec.rb
233
229
  - spec/ec2/image_spec.rb
234
230
  - spec/ec2/instance_spec.rb
235
- - spec/elasticache/router_spec.rb
236
231
  - spec/mixins/aws_caller_spec.rb
237
232
  - spec/mixins/utils_spec.rb
238
233
  - spec/rds/snapshot_spec.rb
239
- - templates/stacker/.env.example
240
- - templates/stacker/.gitignore
241
- - templates/stacker/.ruby-gemset.tt
242
- - templates/stacker/.ruby-version
243
- - templates/stacker/Gemfile
244
- - templates/stacker/bin/%app_name%.tt
245
- - templates/stacker/bin/launch_%app_name%.sh.tt
246
234
  homepage: ''
247
235
  licenses: []
248
236
  metadata: {}
@@ -262,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
262
250
  version: '0'
263
251
  requirements: []
264
252
  rubyforge_project:
265
- rubygems_version: 2.2.2
253
+ rubygems_version: 2.4.8
266
254
  signing_key:
267
255
  specification_version: 4
268
256
  summary: Automates common AWS ops
@@ -283,7 +271,6 @@ test_files:
283
271
  - spec/cloudformation/uploader_spec.rb
284
272
  - spec/ec2/image_spec.rb
285
273
  - spec/ec2/instance_spec.rb
286
- - spec/elasticache/router_spec.rb
287
274
  - spec/mixins/aws_caller_spec.rb
288
275
  - spec/mixins/utils_spec.rb
289
276
  - spec/rds/snapshot_spec.rb
@@ -1 +0,0 @@
1
- automan
@@ -1 +0,0 @@
1
- ruby-2.1.2
@@ -1,5 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - "2.1.2"
4
- # uncomment this line if your project needs to run something other than `rake`:
5
- # script: bundle exec rspec spec
@@ -1,79 +0,0 @@
1
- require 'automan'
2
-
3
- module Automan::ElastiCache
4
- class Router < Automan::Base
5
-
6
- add_option :environment,
7
- :hosted_zone_name,
8
- :redis_host
9
-
10
- def node_name_from_elasticache_environment(env)
11
-
12
- opts = {
13
- cache_cluster_id: "redis-#{env}",
14
- show_cache_node_info: true
15
- }
16
-
17
- response = ec.client.describe_cache_clusters opts
18
-
19
- unless response.successful?
20
- raise RequestFailedError, "describe_cache_clusters failed: #{response.error}"
21
- end
22
-
23
- cluster=response.data[:cache_clusters]
24
- if cluster.empty?
25
- return nil
26
- end
27
-
28
- nodes=Hash[*cluster][:cache_nodes]
29
- if nodes.empty?
30
- return nil
31
- end
32
-
33
- endpoint=Hash[*nodes][:endpoint]
34
- if endpoint.empty?
35
- return nil
36
- end
37
-
38
- logger.info "found redis endpoint at #{endpoint[:address]}"
39
- endpoint[:address]
40
- end
41
-
42
- # be sure alias_name ends in period
43
- def update_dns_alias(zone_name, redis_cname, primary_endpoint)
44
- zone = r53.hosted_zones.select {|z| z.name == zone_name}.first
45
- rrset = zone.rrsets[redis_cname + '.', 'CNAME']
46
-
47
- if rrset.exists?
48
- logger.info "removing old record at #{redis_cname}"
49
- rrset.delete
50
- end
51
-
52
- logger.info "creating record #{redis_cname} -> #{primary_endpoint}"
53
- zone.rrsets.create(
54
- redis_cname + '.',
55
- 'CNAME',
56
- :ttl => 300,
57
- :resource_records => [{:value => primary_endpoint}]
58
- )
59
- end
60
-
61
- def run
62
- log_options
63
-
64
- logger.info "getting redis primary node name..."
65
- primary_endpoint = node_name_from_elasticache_environment environment
66
-
67
- if primary_endpoint.nil?
68
- false
69
- else
70
- update_dns_alias(
71
- hosted_zone_name,
72
- redis_host,
73
- primary_endpoint
74
- )
75
- true
76
- end
77
- end
78
- end
79
- end
@@ -1,29 +0,0 @@
1
- require 'automan'
2
-
3
- describe Automan::ElastiCache::Router do
4
- it { is_expected.to respond_to :run }
5
- it { is_expected.to respond_to :environment }
6
- it { is_expected.to respond_to :hosted_zone_name }
7
- it { is_expected.to respond_to :redis_host }
8
-
9
- describe '#run' do
10
- subject() do
11
- AWS.stub!
12
- r = Automan::ElastiCache::Router.new
13
- r.ec = AWS::ElastiCache::Client.new
14
- r.environment = 'foo'
15
- r.hosted_zone_name = 'foo.com'
16
- r.redis_host = 'redis.foo.com'
17
- r.logger = Logger.new('/dev/null')
18
- r
19
- end
20
-
21
- it "raises error if it never finds a name" do
22
- allow(subject).to receive(:node_name_from_elasticache_environment).and_return(nil)
23
- expect {
24
- subject.run
25
- }.not_to raise_error
26
- end
27
-
28
- end
29
- end
@@ -1,14 +0,0 @@
1
- #
2
- # example .env file
3
- # cp .env.example .env
4
- #
5
- # Set environment variables for all template parameters here.
6
- # This .env file is in gitignore to help keep application
7
- # secrets from leaking out into source code control.
8
- #
9
- export VPC_ID=vpc-foo
10
- export SUBNET_ID=subnet-foo
11
- export REMOTE_ACCESS_SG=sg-foo
12
- export KEYPAIR_NAME=fookey
13
- export INSTANCE_TYPE=m3.medium
14
- export IMAGE_ID=ami-foo
@@ -1,2 +0,0 @@
1
- .env
2
- *.json