vm_shepherd 1.1.0 → 1.1.1

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