vm_shepherd 3.1.4 → 3.1.5
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 +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
|