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 +4 -4
- data/lib/vm_shepherd/aws_manager.rb +2 -17
- data/lib/vm_shepherd/openstack_manager.rb +2 -1
- data/lib/vm_shepherd/retry_helper.rb +22 -0
- data/lib/vm_shepherd/version.rb +1 -1
- data/spec/vm_shepherd/openstack_manager_spec.rb +23 -0
- data/spec/vm_shepherd/retry_helper_spec.rb +58 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de929fb4a764180cac7a407c9af64ae3e366aa2d
|
4
|
+
data.tar.gz: 7cb4fbeab70a0a935dbf86207bac4bd4ac52a4ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
{
|
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
|
data/lib/vm_shepherd/version.rb
CHANGED
@@ -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.
|
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-
|
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
|