vm_shepherd 1.11.3 → 1.11.4
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82f7c7627b1e94f6470ded478ab7ea83b2c29416
|
4
|
+
data.tar.gz: 6724ee44b46ca3e1a5ca046425cbda5070ccfd4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df11263d19bdeb301a263a1892a749c243ab55ed333a968d9d309fb5fce2c942219705fc9afe3c6ae1742a4344d5fe012c9d0bc8ae5fb9ee3db39eb387576bd0
|
7
|
+
data.tar.gz: 845334333f9acd9fc64051142e169a060b7934600ea7f3c02716333495fda93adb2b312e7dea5c945db84fdbf1fd4eef110517a4f943ef5833e203ec5070203c
|
@@ -2,12 +2,12 @@ module VmShepherd
|
|
2
2
|
module Vcloud
|
3
3
|
class Destroyer
|
4
4
|
def initialize(client:, vdc_name:)
|
5
|
-
@client
|
5
|
+
@client = client
|
6
6
|
@vdc_name = vdc_name
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
9
|
+
def clean_catalog_and_vapps(catalog:, vapp_names:, logger:, delete_vapps:)
|
10
|
+
clean_vapps(vapp_names, logger, delete_vapps)
|
11
11
|
delete_catalog(catalog)
|
12
12
|
end
|
13
13
|
|
@@ -17,21 +17,18 @@ module VmShepherd
|
|
17
17
|
@vdc ||= @client.find_vdc_by_name(@vdc_name)
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
20
|
+
def clean_vapps(vapp_names, logger, delete_vapps)
|
21
21
|
vapp_names.each do |vapp_name|
|
22
22
|
begin
|
23
|
-
|
23
|
+
clean_vapp(vapp_name)
|
24
|
+
delete_vapp(vapp_name) if delete_vapps
|
24
25
|
rescue VCloudSdk::ObjectNotFoundError => e
|
25
26
|
logger.debug "Could not delete vapp '#{vapp_name}': #{e.inspect}"
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
|
-
def
|
31
|
-
@client.delete_catalog_by_name(catalog) if @client.catalog_exists?(catalog)
|
32
|
-
end
|
33
|
-
|
34
|
-
def delete_vms_in_vapp(vapp_name)
|
31
|
+
def clean_vapp(vapp_name)
|
35
32
|
vapp = vdc.find_vapp_by_name(vapp_name)
|
36
33
|
vapp.vms.map do |vm|
|
37
34
|
vm.independent_disks.map do |disk|
|
@@ -40,6 +37,16 @@ module VmShepherd
|
|
40
37
|
end
|
41
38
|
end
|
42
39
|
end
|
40
|
+
|
41
|
+
def delete_vapp(vapp_name)
|
42
|
+
vapp = vdc.find_vapp_by_name(vapp_name)
|
43
|
+
vapp.power_off
|
44
|
+
vapp.delete
|
45
|
+
end
|
46
|
+
|
47
|
+
def delete_catalog(catalog)
|
48
|
+
@client.delete_catalog_by_name(catalog) if @client.catalog_exists?(catalog)
|
49
|
+
end
|
43
50
|
end
|
44
51
|
end
|
45
52
|
end
|
@@ -35,11 +35,12 @@ module VmShepherd
|
|
35
35
|
|
36
36
|
def destroy(vapp_names, catalog)
|
37
37
|
VmShepherd::Vcloud::Destroyer.new(client: client, vdc_name: @vdc_name).
|
38
|
-
|
38
|
+
clean_catalog_and_vapps(catalog: catalog, vapp_names: vapp_names, logger: @logger, delete_vapps: true)
|
39
39
|
end
|
40
40
|
|
41
41
|
def clean_environment(vapp_names, catalog)
|
42
|
-
|
42
|
+
VmShepherd::Vcloud::Destroyer.new(client: client, vdc_name: @vdc_name).
|
43
|
+
clean_catalog_and_vapps(catalog: catalog, vapp_names: vapp_names, logger: @logger, delete_vapps: false)
|
43
44
|
end
|
44
45
|
|
45
46
|
private
|
data/lib/vm_shepherd/version.rb
CHANGED
@@ -28,14 +28,14 @@ module VmShepherd
|
|
28
28
|
allow(vm).to receive(:detach_disk)
|
29
29
|
end
|
30
30
|
|
31
|
-
describe '#
|
31
|
+
describe '#clean_catalog_and_vapps' do
|
32
32
|
context 'when the catalog exists' do
|
33
33
|
before do
|
34
34
|
allow(client).to receive(:catalog_exists?).with('CATALOG_NAME').and_return(true)
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'deletes the catalog' do
|
38
|
-
destroyer.
|
38
|
+
destroyer.clean_catalog_and_vapps(catalog: 'CATALOG_NAME', vapp_names: [], logger: fake_logger, delete_vapps: false)
|
39
39
|
|
40
40
|
expect(client).to have_received(:delete_catalog_by_name).with('CATALOG_NAME')
|
41
41
|
end
|
@@ -47,18 +47,36 @@ module VmShepherd
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'skips deleting the catalog' do
|
50
|
-
destroyer.
|
50
|
+
destroyer.clean_catalog_and_vapps(catalog: 'CATALOG_NAME', vapp_names: [], logger: fake_logger, delete_vapps: false)
|
51
51
|
|
52
52
|
expect(client).not_to have_received(:delete_catalog_by_name).with('CATALOG_NAME')
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'detaches and deletes persistent disks' do
|
57
|
-
destroyer.
|
57
|
+
destroyer.clean_catalog_and_vapps(catalog: 'CATALOG_NAME', vapp_names: ['VAPP_NAME'], logger: fake_logger, delete_vapps: false)
|
58
58
|
|
59
59
|
expect(vm).to have_received(:detach_disk).with(disk)
|
60
60
|
expect(vdc).to have_received(:delete_disk_by_name).with('DISK_NAME')
|
61
61
|
end
|
62
|
+
|
63
|
+
context 'when the delete_vapps flag is true' do
|
64
|
+
it 'deletes the vapps' do
|
65
|
+
destroyer.clean_catalog_and_vapps(catalog: 'CATALOG_NAME', vapp_names: ['VAPP_NAME'], logger: fake_logger, delete_vapps: true)
|
66
|
+
|
67
|
+
expect(vapp).to have_received(:power_off).ordered
|
68
|
+
expect(vapp).to have_received(:delete).ordered
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'when the delete_vapps flag is false' do
|
73
|
+
it 'does not delete the vapps' do
|
74
|
+
destroyer.clean_catalog_and_vapps(catalog: 'CATALOG_NAME', vapp_names: ['VAPP_NAME'], logger: fake_logger, delete_vapps: false)
|
75
|
+
|
76
|
+
expect(vapp).not_to have_received(:power_off)
|
77
|
+
expect(vapp).not_to have_received(:delete)
|
78
|
+
end
|
79
|
+
end
|
62
80
|
end
|
63
81
|
end
|
64
82
|
end
|
@@ -264,101 +264,37 @@ module VmShepherd
|
|
264
264
|
|
265
265
|
describe '#destroy' do
|
266
266
|
let(:client) { instance_double(VCloudSdk::Client) }
|
267
|
-
let(:vdc) { instance_double(VCloudSdk::VDC) }
|
268
|
-
let(:vapp) { instance_double(VCloudSdk::VApp) }
|
269
267
|
let(:vapp_name) { 'FAKE_VAPP_NAME' }
|
270
268
|
let(:vapp_catalog) { 'FAKE_VAPP_CATALOG' }
|
271
|
-
let(:vm) { instance_double(VCloudSdk::VM) }
|
272
|
-
let(:disk) { instance_double(VCloudSdk::InternalDisk, name: 'disk name') }
|
273
269
|
|
274
270
|
before do
|
275
|
-
allow(
|
276
|
-
allow(vm).to receive(:independent_disks).and_return([disk])
|
271
|
+
allow(VCloudSdk::Client).to receive(:new).and_return(client)
|
277
272
|
end
|
278
273
|
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
it 'uses VCloudSdk::Client to delete the vApp' do
|
285
|
-
expect(client).to receive(:find_vdc_by_name).with(vdc_name).and_return(vdc)
|
286
|
-
expect(vdc).to receive(:find_vapp_by_name).with(vapp_name).and_return(vapp)
|
287
|
-
expect(vm).to receive(:detach_disk).with(disk)
|
288
|
-
expect(vdc).to receive(:delete_disk_by_name).with('disk name')
|
289
|
-
expect(client).to receive(:delete_catalog_by_name).with(vapp_catalog)
|
290
|
-
|
291
|
-
expect(VCloudSdk::Client).to receive(:new).with(
|
292
|
-
login_info.fetch(:url),
|
293
|
-
[login_info.fetch(:user), login_info.fetch(:organization)].join('@'),
|
294
|
-
login_info.fetch(:password),
|
295
|
-
{},
|
296
|
-
logger,
|
297
|
-
).and_return(client)
|
298
|
-
|
299
|
-
vcloud_manager.destroy([vapp_name], vapp_catalog)
|
300
|
-
end
|
301
|
-
|
302
|
-
context 'when an VCloudSdk::ObjectNotFoundError is thrown' do
|
303
|
-
before do
|
304
|
-
allow(VCloudSdk::Client).to receive(:new).and_return(client)
|
305
|
-
allow(client).to receive(:find_vdc_by_name).and_return(vdc)
|
306
|
-
allow(vdc).to receive(:find_vapp_by_name).and_return(vapp)
|
307
|
-
allow(vm).to receive(:detach_disk)
|
308
|
-
allow(vdc).to receive(:delete_disk_by_name)
|
309
|
-
allow(vapp).to receive(:power_off)
|
310
|
-
allow(vapp).to receive(:delete)
|
311
|
-
|
312
|
-
allow(client).to receive(:delete_catalog_by_name)
|
313
|
-
end
|
314
|
-
|
315
|
-
it 'catches the error' do
|
316
|
-
allow(vdc).to receive(:find_vapp_by_name).and_raise(VCloudSdk::ObjectNotFoundError)
|
317
|
-
|
318
|
-
expect { vcloud_manager.destroy([vapp_name], vapp_catalog) }.not_to raise_error
|
319
|
-
end
|
320
|
-
|
321
|
-
it 'deletes to catalog' do
|
322
|
-
expect(client).to receive(:delete_catalog_by_name).with(vapp_catalog)
|
274
|
+
it 'destroys everything including vapps' do
|
275
|
+
destroyer = instance_double(VmShepherd::Vcloud::Destroyer)
|
276
|
+
expect(VmShepherd::Vcloud::Destroyer).to receive(:new).with(client: client, vdc_name: vdc_name).and_return(destroyer)
|
277
|
+
expect(destroyer).to receive(:clean_catalog_and_vapps).with(catalog: vapp_catalog, vapp_names: [vapp_name], logger: logger, delete_vapps: true)
|
323
278
|
|
324
|
-
|
325
|
-
end
|
326
|
-
end
|
327
|
-
end
|
328
|
-
|
329
|
-
context 'when the catalog does not exist' do
|
330
|
-
before do
|
331
|
-
allow(client).to receive(:catalog_exists?).with(vapp_catalog).and_return(false)
|
332
|
-
end
|
333
|
-
|
334
|
-
it 'uses VCloudSdk::Client to delete the vApp' do
|
335
|
-
expect(client).to receive(:find_vdc_by_name).with(vdc_name).and_return(vdc)
|
336
|
-
expect(vdc).to receive(:find_vapp_by_name).with(vapp_name).and_return(vapp)
|
337
|
-
expect(vm).to receive(:detach_disk).with(disk)
|
338
|
-
expect(vdc).to receive(:delete_disk_by_name).with('disk name')
|
339
|
-
expect(client).not_to receive(:delete_catalog_by_name).with(vapp_catalog)
|
340
|
-
|
341
|
-
expect(VCloudSdk::Client).to receive(:new).with(
|
342
|
-
login_info.fetch(:url),
|
343
|
-
[login_info.fetch(:user), login_info.fetch(:organization)].join('@'),
|
344
|
-
login_info.fetch(:password),
|
345
|
-
{},
|
346
|
-
logger,
|
347
|
-
).and_return(client)
|
348
|
-
|
349
|
-
vcloud_manager.destroy([vapp_name], vapp_catalog)
|
350
|
-
end
|
279
|
+
vcloud_manager.destroy([vapp_name], vapp_catalog)
|
351
280
|
end
|
352
281
|
end
|
353
282
|
|
354
283
|
describe '#clean_environment' do
|
355
|
-
let(:
|
284
|
+
let(:client) { instance_double(VCloudSdk::Client) }
|
285
|
+
let(:vapp_name) { ['VAPP_ONE', 'VAPP_TWO'] }
|
356
286
|
let(:vapp_catalog) { 'VAPP_CATALOG' }
|
357
287
|
|
358
|
-
|
359
|
-
|
288
|
+
before do
|
289
|
+
allow(VCloudSdk::Client).to receive(:new).and_return(client)
|
290
|
+
end
|
291
|
+
|
292
|
+
it 'destroys the environment expect for vapps' do
|
293
|
+
destroyer = instance_double(VmShepherd::Vcloud::Destroyer)
|
294
|
+
expect(VmShepherd::Vcloud::Destroyer).to receive(:new).with(client: client, vdc_name: vdc_name).and_return(destroyer)
|
295
|
+
expect(destroyer).to receive(:clean_catalog_and_vapps).with(catalog: vapp_catalog, vapp_names: [vapp_name], logger: logger, delete_vapps: false)
|
360
296
|
|
361
|
-
vcloud_manager.clean_environment(
|
297
|
+
vcloud_manager.clean_environment([vapp_name], vapp_catalog)
|
362
298
|
end
|
363
299
|
end
|
364
300
|
end
|