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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 32cc9f496785d39b7c220ce6b64d8664c7de8768
4
- data.tar.gz: bcb21b3a0ed017a5141de5d9947ca4f5ceef6577
3
+ metadata.gz: e062bc9d9f56f7ebaed36eaf5843e00ef1b61343
4
+ data.tar.gz: a3a2ed3f83e784d2ad0686c627505c121397a77b
5
5
  SHA512:
6
- metadata.gz: 7951b966a53745015b015d83e22400e2da8938ec7382bccbec5b00ede38a9d50c1620087e9b20e544e89994038d27111ed86fba795d405fd24ac84ae1074556b
7
- data.tar.gz: ba1a4a420d41d6d091879a6e2afd91156a8561783bafe868cea2e9f181b9548ac20831a90268433752bdb96e76059aff0a5f4e11e805acc769160d85ff3f0beb
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: 60, retry_interval: 30) do
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
@@ -1,3 +1,3 @@
1
1
  module VmShepherd
2
- VERSION = '3.1.4'.freeze
2
+ VERSION = '3.1.5'.freeze
3
3
  end
@@ -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: 60, retry_interval: 30)
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 30 times' do
98
+ it 'stops retrying after 80 times' do
99
99
  expect(stack).to receive(:status).and_return('CREATE_IN_PROGRESS').
100
- exactly(60).times
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
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-16 00:00:00.000000000 Z
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