vm_shepherd 3.1.4 → 3.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vm_shepherd/aws_manager.rb +12 -1
- data/lib/vm_shepherd/version.rb +1 -1
- data/spec/vm_shepherd/aws_manager_spec.rb +25 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e062bc9d9f56f7ebaed36eaf5843e00ef1b61343
|
4
|
+
data.tar.gz: a3a2ed3f83e784d2ad0686c627505c121397a77b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f3693d16a10aa1420ee10834e453a344b7ab46f721d4f84ed1709a8eefc5f3914f77ae01253423b48981a9a9fc61a23b709a89a0a0e3602ac995c43a98f8210
|
7
|
+
data.tar.gz: 53636d6efa44563fba84a341c49596a9c7e614d417cf713ce0c802ffd264ed32f3049cbfc9cb5b82fc8d47e54681138b0dae4242e7d6017fe6d0ea11eb22c7fa
|
@@ -17,6 +17,7 @@ module VmShepherd
|
|
17
17
|
ROLLBACK_COMPLETE = 'ROLLBACK_COMPLETE'
|
18
18
|
DELETE_IN_PROGRESS = 'DELETE_IN_PROGRESS'
|
19
19
|
DELETE_COMPLETE = 'DELETE_COMPLETE'
|
20
|
+
DELETE_FAILED = 'DELETE_FAILED'
|
20
21
|
|
21
22
|
def initialize(env_config:, logger:)
|
22
23
|
AWS.config(
|
@@ -36,7 +37,7 @@ module VmShepherd
|
|
36
37
|
stack = cfm.stacks.create(env_config.fetch('stack_name'), template, parameters: env_config.fetch('parameters'), capabilities: ['CAPABILITY_IAM'])
|
37
38
|
|
38
39
|
logger.info("Waiting for status: #{CREATE_COMPLETE}")
|
39
|
-
retry_until(retry_limit:
|
40
|
+
retry_until(retry_limit: 80, retry_interval: 30) do
|
40
41
|
status = stack.status
|
41
42
|
logger.info("current stack status: #{status}")
|
42
43
|
case status
|
@@ -253,6 +254,7 @@ module VmShepherd
|
|
253
254
|
cfm = AWS::CloudFormation.new
|
254
255
|
stack = cfm.stacks[stack_name]
|
255
256
|
logger.info('deleting CloudFormation stack')
|
257
|
+
delete_retried = false
|
256
258
|
stack.delete
|
257
259
|
logger.info("waiting until status: #{DELETE_COMPLETE}")
|
258
260
|
retry_until(retry_limit: 60, retry_interval: 30) do
|
@@ -264,6 +266,15 @@ module VmShepherd
|
|
264
266
|
true
|
265
267
|
when DELETE_IN_PROGRESS
|
266
268
|
false
|
269
|
+
when DELETE_FAILED
|
270
|
+
if delete_retried
|
271
|
+
raise "Two delete retries have failed #{stack_name} : #{status}"
|
272
|
+
else
|
273
|
+
delete_retried = true
|
274
|
+
stack.delete
|
275
|
+
sleep 2 * 60
|
276
|
+
false
|
277
|
+
end
|
267
278
|
else
|
268
279
|
raise "Unexpected status for stack #{stack_name} : #{status}"
|
269
280
|
end
|
data/lib/vm_shepherd/version.rb
CHANGED
@@ -72,7 +72,7 @@ module VmShepherd
|
|
72
72
|
|
73
73
|
describe 'cloudformation' do
|
74
74
|
it 'polls the status every 30 seconds' do
|
75
|
-
expect(ami_manager).to receive(:retry_until).with(retry_limit:
|
75
|
+
expect(ami_manager).to receive(:retry_until).with(retry_limit: 80, retry_interval: 30)
|
76
76
|
|
77
77
|
ami_manager.prepare_environment(cloudformation_template_file.path)
|
78
78
|
end
|
@@ -95,9 +95,9 @@ module VmShepherd
|
|
95
95
|
ami_manager.prepare_environment(cloudformation_template_file.path)
|
96
96
|
end
|
97
97
|
|
98
|
-
it 'stops retrying after
|
98
|
+
it 'stops retrying after 80 times' do
|
99
99
|
expect(stack).to receive(:status).and_return('CREATE_IN_PROGRESS').
|
100
|
-
exactly(
|
100
|
+
exactly(80).times
|
101
101
|
|
102
102
|
expect { ami_manager.prepare_environment(cloudformation_template_file.path) }.to raise_error(AwsManager::RetryLimitExceeded)
|
103
103
|
end
|
@@ -418,7 +418,6 @@ module VmShepherd
|
|
418
418
|
expect { ami_manager.clean_environment }.to raise_error(AwsManager::RetryLimitExceeded)
|
419
419
|
end
|
420
420
|
|
421
|
-
|
422
421
|
it 'aborts if stack reports unexpected status' do
|
423
422
|
expect(stack).to receive(:status).and_return('DELETE_IN_PROGRESS', 'UNEXPECTED_STATUS').ordered
|
424
423
|
expect {
|
@@ -457,6 +456,28 @@ module VmShepherd
|
|
457
456
|
ami_manager.clean_environment
|
458
457
|
end
|
459
458
|
|
459
|
+
context 'when the stack fails to delete' do
|
460
|
+
it 'retries deletes twice' do
|
461
|
+
expect(stack).to receive(:delete).ordered
|
462
|
+
expect(stack).to receive(:status).and_return('DELETE_IN_PROGRESS', 'DELETE_FAILED').ordered
|
463
|
+
expect(stack).to receive(:delete).ordered
|
464
|
+
expect(stack).to receive(:status).and_return('DELETE_IN_PROGRESS', 'DELETE_COMPLETE').ordered
|
465
|
+
|
466
|
+
ami_manager.clean_environment
|
467
|
+
end
|
468
|
+
|
469
|
+
it 'fails after two delete retries' do
|
470
|
+
expect(stack).to receive(:delete).ordered
|
471
|
+
expect(stack).to receive(:status).and_return('DELETE_IN_PROGRESS', 'DELETE_FAILED').ordered
|
472
|
+
expect(stack).to receive(:delete).ordered
|
473
|
+
expect(stack).to receive(:status).and_return('DELETE_IN_PROGRESS', 'DELETE_FAILED').ordered
|
474
|
+
|
475
|
+
expect {
|
476
|
+
ami_manager.clean_environment
|
477
|
+
}.to raise_error(/Two delete retries have failed/)
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
460
481
|
context 'when a subnet is not provided' do
|
461
482
|
before do
|
462
483
|
env_config['outputs']['subnets'] = env_config['outputs']['subnets'][0..-2]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vm_shepherd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ops Manager Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-v1
|