vm_shepherd 1.11.3 → 1.11.4
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:
|
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
|