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 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