vm_shepherd 1.1.0 → 1.1.1

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: 316f95673f45c873990de6c9a8313e9f7c30c14d
4
- data.tar.gz: a5cacb70390f6f42dfbac300b298cf720eaaaf96
3
+ metadata.gz: de929fb4a764180cac7a407c9af64ae3e366aa2d
4
+ data.tar.gz: 7cb4fbeab70a0a935dbf86207bac4bd4ac52a4ef
5
5
  SHA512:
6
- metadata.gz: 21c6f2e27bf812d8349adabb9c91a2f360b29c94a17a359ede7c099d927af52ce80e78ae39f071f47bd07a64ccded8b52ab060be96cf608daf38da7e5050e607
7
- data.tar.gz: c43837145203de571a44d3617e5b295036a78b2d956112ea9a5c42c34fd49e35fad534f34f6bddb09a5f7b4a2637992dcd8a655343fde52540c000e06d7894d2
6
+ metadata.gz: c88e36d8e2d33eda28ff8d8393ea30a1dab8e5fbfe02be84c38c0a9bc48d4d52c4f163a391e9a1b896de7322aec3cb649e95944eec3eb24c325581fcd604e425
7
+ data.tar.gz: df3b18222e369f83fe355d09dc5eb9c89879c3164546c3ca99b3660a1632875ca23a069f6350bada169c34338eb3ce89c47c42a6db5096cc8c078c31df875895
@@ -1,14 +1,12 @@
1
1
  require 'aws-sdk-v1'
2
+ require 'vm_shepherd/retry_helper'
2
3
 
3
4
  module VmShepherd
4
5
  class AwsManager
5
- class RetryLimitExceeded < StandardError
6
- end
6
+ include VmShepherd::RetryHelper
7
7
 
8
8
  AWS_REGION = 'us-east-1'
9
9
  OPS_MANAGER_INSTANCE_TYPE = 'm3.medium'
10
- RETRY_LIMIT = 60
11
- RETRY_INTERVAL = 5
12
10
  DO_NOT_TERMINATE_TAG_KEY = 'do_not_terminate'
13
11
 
14
12
  def initialize(env_config)
@@ -136,18 +134,5 @@ module VmShepherd
136
134
  end
137
135
  end
138
136
  end
139
-
140
- def retry_until(retry_limit: RETRY_LIMIT, &block)
141
- tries = 0
142
- condition_reached = false
143
- loop do
144
- tries += 1
145
- raise(RetryLimitExceeded) if tries > retry_limit
146
- condition_reached = block.call
147
- break if condition_reached
148
- sleep RETRY_INTERVAL
149
- end
150
- condition_reached
151
- end
152
137
  end
153
138
  end
@@ -32,7 +32,7 @@ module VmShepherd
32
32
  key_name: vm_options[:key_name],
33
33
  security_groups: security_groups,
34
34
  nics: [
35
- { net_id: network.id, v4_fixed_ip: vm_options[:private_ip] }
35
+ {net_id: network.id, v4_fixed_ip: vm_options[:private_ip]}
36
36
  ],
37
37
  )
38
38
  server.wait_for { ready? }
@@ -86,6 +86,7 @@ module VmShepherd
86
86
  say("Destroying #{service.volumes.size} volumes:")
87
87
  service.volumes.each do |volume|
88
88
  say(" Destroying volume #{volume.id}")
89
+ volume.wait_for { volume.ready? }
89
90
  volume.destroy
90
91
  end
91
92
 
@@ -0,0 +1,22 @@
1
+ module VmShepherd
2
+ module RetryHelper
3
+ class RetryLimitExceeded < StandardError
4
+ end
5
+
6
+ RETRY_LIMIT = 60
7
+ RETRY_INTERVAL = 5
8
+
9
+ def retry_until(retry_limit: RETRY_LIMIT, &block)
10
+ tries = 0
11
+ condition_reached = false
12
+ loop do
13
+ tries += 1
14
+ raise(RetryLimitExceeded) if tries > retry_limit
15
+ condition_reached = block.call
16
+ break if condition_reached
17
+ sleep RETRY_INTERVAL
18
+ end
19
+ condition_reached
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module VmShepherd
2
- VERSION = '1.1.0'.freeze
2
+ VERSION = '1.1.1'.freeze
3
3
  end
@@ -245,6 +245,7 @@ module VmShepherd
245
245
  Fog.mock!
246
246
  Fog::Mock.reset
247
247
  Fog::Mock.delay = 0
248
+ Fog.interval = 0
248
249
 
249
250
  make_server_and_image!('vm1')
250
251
  make_server_and_image!('vm2')
@@ -263,6 +264,8 @@ module VmShepherd
263
264
  b_dir = instance_double(Fog::Storage::OpenStack::Directory, key: 'b_dir')
264
265
  allow(b_dir).to receive(:files).and_return(b_dir_files)
265
266
  allow(openstack_vm_manager.storage_service).to receive(:directories).and_return([a_dir, b_dir])
267
+ allow_any_instance_of(Fog::Compute::OpenStack::Volume).to receive(:status).and_return('available')
268
+ allow(Fog).to receive(:sleep)
266
269
  end
267
270
 
268
271
  let(:a_dir_files) { [create_file_double('a_file'), create_file_double('b_file')] }
@@ -323,6 +326,26 @@ module VmShepherd
323
326
  }.to change { openstack_vm_manager.service.volumes.size }.from(2).to(0)
324
327
  end
325
328
 
329
+ context 'with stubbed volumes' do
330
+ let(:volumes) { [volume] }
331
+ let(:volume) do
332
+ openstack_vm_manager.service.volumes.create(
333
+ name: 'volume',
334
+ description: 'description',
335
+ size: 1,
336
+ )
337
+ end
338
+
339
+ before do
340
+ allow(openstack_vm_manager.service).to receive(:volumes).and_return(volumes)
341
+ end
342
+
343
+ it 'waits for volumes to be available before deleting' do
344
+ expect(volume).to receive(:status).and_return('detaching', 'detaching', 'available')
345
+ openstack_vm_manager.clean_environment
346
+ end
347
+ end
348
+
326
349
  it 'deletes everything in the correct container' do
327
350
  openstack_vm_manager.clean_environment
328
351
  expect(a_dir_files[0]).to have_received(:destroy)
@@ -0,0 +1,58 @@
1
+ require 'vm_shepherd/retry_helper'
2
+
3
+ module VmShepherd
4
+ RSpec.describe RetryHelper do
5
+ subject(:retry_helper) { TestRetryHelper.new }
6
+
7
+ class TestRetryHelper
8
+ include RetryHelper
9
+ end
10
+
11
+ before do
12
+ allow(retry_helper).to receive(:sleep) # speed up retry logic
13
+ end
14
+
15
+ it 'calls the given block 60 times by default' do
16
+ sixty_times = [true] + [false] * 59
17
+ expect {
18
+ retry_helper.retry_until { sixty_times.pop }
19
+ }.not_to raise_error
20
+
21
+ sixty_one_times = [true] + [false] * 60
22
+ expect {
23
+ retry_helper.retry_until { sixty_one_times.pop }
24
+ }.to raise_error(RetryHelper::RetryLimitExceeded)
25
+ end
26
+
27
+ it 'throws an error if the block never returns true' do
28
+ expect {
29
+ retry_helper.retry_until { false }
30
+ }.to raise_error(RetryHelper::RetryLimitExceeded)
31
+ end
32
+
33
+ it 'returns early if the block returns a truthy value' do
34
+ counter = 0
35
+ retry_helper.retry_until do
36
+ counter += 1
37
+ counter == 6
38
+ end
39
+ expect(counter).to eq(6)
40
+ end
41
+
42
+ it 'returns the value of the block' do
43
+ expect(retry_helper.retry_until { 'retrying' }).to eq('retrying')
44
+ end
45
+
46
+ it 'calls the given block the given number of times' do
47
+ forty_two_times = [true] + [false] * 41
48
+ expect {
49
+ retry_helper.retry_until(retry_limit: 42) { forty_two_times.pop }
50
+ }.not_to raise_error
51
+
52
+ forty_three_times = [true] + [false] * 42
53
+ expect {
54
+ retry_helper.retry_until(retry_limit: 42) { forty_three_times.pop }
55
+ }.to raise_error(RetryHelper::RetryLimitExceeded)
56
+ end
57
+ end
58
+ end
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: 1.1.0
4
+ version: 1.1.1
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: 2015-05-19 00:00:00.000000000 Z
11
+ date: 2015-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-v1
@@ -155,6 +155,7 @@ files:
155
155
  - lib/vm_shepherd.rb
156
156
  - lib/vm_shepherd/aws_manager.rb
157
157
  - lib/vm_shepherd/openstack_manager.rb
158
+ - lib/vm_shepherd/retry_helper.rb
158
159
  - lib/vm_shepherd/shepherd.rb
159
160
  - lib/vm_shepherd/vcloud_manager.rb
160
161
  - lib/vm_shepherd/version.rb
@@ -169,6 +170,7 @@ files:
169
170
  - spec/support/patched_fog.rb
170
171
  - spec/vm_shepherd/aws_manager_spec.rb
171
172
  - spec/vm_shepherd/openstack_manager_spec.rb
173
+ - spec/vm_shepherd/retry_helper_spec.rb
172
174
  - spec/vm_shepherd/shepherd_spec.rb
173
175
  - spec/vm_shepherd/vcloud_manager_spec.rb
174
176
  - spec/vm_shepherd/vsphere_manager_spec.rb
@@ -207,6 +209,7 @@ test_files:
207
209
  - spec/support/patched_fog.rb
208
210
  - spec/vm_shepherd/aws_manager_spec.rb
209
211
  - spec/vm_shepherd/openstack_manager_spec.rb
212
+ - spec/vm_shepherd/retry_helper_spec.rb
210
213
  - spec/vm_shepherd/shepherd_spec.rb
211
214
  - spec/vm_shepherd/vcloud_manager_spec.rb
212
215
  - spec/vm_shepherd/vsphere_manager_spec.rb