vm_shepherd 0.5.0 → 0.6.0
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/shepherd.rb +5 -13
- data/lib/vm_shepherd/vcloud_manager.rb +14 -16
- data/lib/vm_shepherd/version.rb +1 -1
- data/spec/fixtures/shepherd/vcloud.yml +3 -2
- data/spec/vm_shepherd/shepherd_spec.rb +12 -13
- data/spec/vm_shepherd/vcloud_manager_spec.rb +36 -26
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c10ea04c94a577b4dc32587cf9aee9191d7bf6a
|
4
|
+
data.tar.gz: 891e6c41c038a3ef7c575ab2daa72cc525eea7ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0ce28324a805225b14345ec26ae9ec9c316f12ccbcc1d4d065aa488e8ac3e25ea5c2b4bc7bd4f6a096b1397a34c1233c875e12f30eb5a784a70db4b410e7aef
|
7
|
+
data.tar.gz: 962302ec67a987eab006fe33f21c5ae2edd518f6683e4c26252be259948f697e7975fc7a02b2bec0bf362ed27946a374590a2f629ac57007f2ed5d603f3567c3
|
data/lib/vm_shepherd/shepherd.rb
CHANGED
@@ -68,13 +68,9 @@ module VmShepherd
|
|
68
68
|
user: settings.vm_shepherd.creds.user,
|
69
69
|
password: settings.vm_shepherd.creds.password,
|
70
70
|
},
|
71
|
-
|
72
|
-
vdc: settings.vm_shepherd.vdc.name,
|
73
|
-
catalog: settings.vm_shepherd.vdc.catalog,
|
74
|
-
network: settings.vm_shepherd.vdc.network,
|
75
|
-
},
|
71
|
+
settings.vm_shepherd.vdc.name,
|
76
72
|
error_logger
|
77
|
-
).destroy([settings.vm_shepherd.vapp.ops_manager_name]
|
73
|
+
).destroy([settings.vm_shepherd.vapp.ops_manager_name], settings.vm_shepherd.vdc.catalog)
|
78
74
|
when VmShepherd::VSPHERE_IAAS_TYPE then
|
79
75
|
VmShepherd::VsphereManager.new(
|
80
76
|
settings.vm_shepherd.vcenter_creds.ip,
|
@@ -101,13 +97,9 @@ module VmShepherd
|
|
101
97
|
user: settings.vm_shepherd.creds.user,
|
102
98
|
password: settings.vm_shepherd.creds.password,
|
103
99
|
},
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
network: settings.vm_shepherd.vdc.network,
|
108
|
-
},
|
109
|
-
error_logger
|
110
|
-
).clean_environment
|
100
|
+
settings.vm_shepherd.vdc.name,
|
101
|
+
error_logger,
|
102
|
+
).clean_environment(settings.vm_shepherd.vapp.product_names, settings.vm_shepherd.vapp.product_catalog)
|
111
103
|
when VmShepherd::VSPHERE_IAAS_TYPE then
|
112
104
|
VmShepherd::VsphereManager.new(
|
113
105
|
settings.vm_shepherd.vcenter_creds.ip,
|
@@ -4,13 +4,10 @@ require 'ruby_vcloud_sdk'
|
|
4
4
|
|
5
5
|
module VmShepherd
|
6
6
|
class VcloudManager
|
7
|
-
def initialize(login_info,
|
7
|
+
def initialize(login_info, vdc_name, logger)
|
8
8
|
@login_info = login_info
|
9
|
-
@
|
9
|
+
@vdc_name = vdc_name
|
10
10
|
@logger = logger
|
11
|
-
raise 'VDC must be set' unless @location[:vdc]
|
12
|
-
raise 'Catalog must be set' unless @location[:catalog]
|
13
|
-
raise 'Network must be set' unless @location[:network]
|
14
11
|
end
|
15
12
|
|
16
13
|
def deploy(vapp_template_tar_path, vapp_config)
|
@@ -27,12 +24,13 @@ module VmShepherd
|
|
27
24
|
FileUtils.remove_entry_secure(tmpdir, force: true)
|
28
25
|
end
|
29
26
|
|
30
|
-
def destroy(vapp_names)
|
27
|
+
def destroy(vapp_names, catalog)
|
31
28
|
delete_vapps(vapp_names)
|
32
|
-
delete_catalog
|
29
|
+
delete_catalog(catalog)
|
33
30
|
end
|
34
31
|
|
35
|
-
def clean_environment
|
32
|
+
def clean_environment(vapp_names, catalog)
|
33
|
+
destroy(vapp_names, catalog)
|
36
34
|
end
|
37
35
|
|
38
36
|
private
|
@@ -62,16 +60,16 @@ module VmShepherd
|
|
62
60
|
|
63
61
|
def deploy_vapp(ovf_dir, vapp_config)
|
64
62
|
# setup the catalog
|
65
|
-
client.delete_catalog_by_name(
|
66
|
-
catalog = client.create_catalog(
|
63
|
+
client.delete_catalog_by_name(vapp_config[:catalog]) if client.catalog_exists?(vapp_config[:catalog])
|
64
|
+
catalog = client.create_catalog(vapp_config[:catalog])
|
67
65
|
|
68
66
|
# upload template and instantiate vapp
|
69
|
-
catalog.upload_vapp_template(@
|
67
|
+
catalog.upload_vapp_template(@vdc_name, vapp_config[:name], ovf_dir)
|
70
68
|
|
71
69
|
# instantiate template
|
72
|
-
network_config = VCloudSdk::NetworkConfig.new(
|
70
|
+
network_config = VCloudSdk::NetworkConfig.new(vapp_config[:network], 'Network 1')
|
73
71
|
catalog.instantiate_vapp_template(
|
74
|
-
vapp_config[:name], @
|
72
|
+
vapp_config[:name], @vdc_name, vapp_config[:name], nil, nil, network_config)
|
75
73
|
rescue => e
|
76
74
|
@logger.error(e.http_body) if e.respond_to?(:http_body)
|
77
75
|
raise e
|
@@ -155,7 +153,7 @@ module VmShepherd
|
|
155
153
|
end
|
156
154
|
|
157
155
|
def vdc
|
158
|
-
@vdc ||= client.find_vdc_by_name(@
|
156
|
+
@vdc ||= client.find_vdc_by_name(@vdc_name)
|
159
157
|
end
|
160
158
|
|
161
159
|
def delete_vapps(vapp_names)
|
@@ -170,8 +168,8 @@ module VmShepherd
|
|
170
168
|
end
|
171
169
|
end
|
172
170
|
|
173
|
-
def delete_catalog
|
174
|
-
client.delete_catalog_by_name(
|
171
|
+
def delete_catalog(catalog)
|
172
|
+
client.delete_catalog_by_name(catalog) if client.catalog_exists?(catalog)
|
175
173
|
end
|
176
174
|
end
|
177
175
|
end
|
data/lib/vm_shepherd/version.rb
CHANGED
@@ -170,15 +170,14 @@ module VmShepherd
|
|
170
170
|
user: settings.vm_shepherd.creds.user,
|
171
171
|
password: settings.vm_shepherd.creds.password,
|
172
172
|
},
|
173
|
-
|
174
|
-
vdc: settings.vm_shepherd.vdc.name,
|
175
|
-
catalog: settings.vm_shepherd.vdc.catalog,
|
176
|
-
network: settings.vm_shepherd.vdc.network,
|
177
|
-
},
|
173
|
+
settings.vm_shepherd.vdc.name,
|
178
174
|
instance_of(Logger)
|
179
175
|
).and_return(vcloud_manager)
|
180
|
-
|
181
|
-
expect(vcloud_manager).to receive(:destroy).with(
|
176
|
+
|
177
|
+
expect(vcloud_manager).to receive(:destroy).with(
|
178
|
+
[settings.vm_shepherd.vapp.ops_manager_name],
|
179
|
+
settings.vm_shepherd.vdc.catalog,
|
180
|
+
)
|
182
181
|
|
183
182
|
manager.destroy
|
184
183
|
end
|
@@ -291,14 +290,14 @@ module VmShepherd
|
|
291
290
|
user: settings.vm_shepherd.creds.user,
|
292
291
|
password: settings.vm_shepherd.creds.password,
|
293
292
|
},
|
294
|
-
|
295
|
-
vdc: settings.vm_shepherd.vdc.name,
|
296
|
-
catalog: settings.vm_shepherd.vdc.catalog,
|
297
|
-
network: settings.vm_shepherd.vdc.network,
|
298
|
-
},
|
293
|
+
settings.vm_shepherd.vdc.name,
|
299
294
|
instance_of(Logger)
|
300
295
|
).and_return(vcloud_manager)
|
301
|
-
|
296
|
+
|
297
|
+
expect(vcloud_manager).to receive(:clean_environment).with(
|
298
|
+
settings.vm_shepherd.vapp.product_names,
|
299
|
+
settings.vm_shepherd.vapp.product_catalog,
|
300
|
+
)
|
302
301
|
|
303
302
|
manager.clean_environment
|
304
303
|
end
|
@@ -10,16 +10,11 @@ module VmShepherd
|
|
10
10
|
password: 'FAKE_PASSWORD',
|
11
11
|
}
|
12
12
|
end
|
13
|
-
let(:
|
14
|
-
|
15
|
-
catalog: 'FAKE_CATALOG',
|
16
|
-
network: 'FAKE_NETWORK',
|
17
|
-
vdc: 'FAKE_VDC',
|
18
|
-
}
|
19
|
-
end
|
13
|
+
let(:vdc_name) { 'FAKE_VDC_NAME' }
|
14
|
+
|
20
15
|
let(:logger) { instance_double(Logger).as_null_object }
|
21
16
|
|
22
|
-
let(:vcloud_manager) { VcloudManager.new(login_info,
|
17
|
+
let(:vcloud_manager) { VcloudManager.new(login_info, vdc_name, logger) }
|
23
18
|
|
24
19
|
describe '#deploy' do
|
25
20
|
let(:vapp_config) do
|
@@ -30,8 +25,11 @@ module VmShepherd
|
|
30
25
|
dns: 'FAKE_DNS',
|
31
26
|
ntp: 'FAKE_NTP',
|
32
27
|
netmask: 'FAKE_NETMASK',
|
28
|
+
catalog: 'FAKE_VAPP_CATALOG',
|
29
|
+
network: 'FAKE_NETWORK',
|
33
30
|
}
|
34
31
|
end
|
32
|
+
|
35
33
|
let(:vapp_template_path) { 'FAKE_VAPP_TEMPLATE_PATH' }
|
36
34
|
let(:tmpdir) { 'FAKE_TMP_DIR' }
|
37
35
|
|
@@ -163,7 +161,7 @@ module VmShepherd
|
|
163
161
|
let(:catalog_exists) { true }
|
164
162
|
|
165
163
|
it 'deletes the catalog' do
|
166
|
-
expect(client).to receive(:delete_catalog_by_name).with(
|
164
|
+
expect(client).to receive(:delete_catalog_by_name).with(vapp_config.fetch(:catalog))
|
167
165
|
|
168
166
|
vcloud_manager.deploy(vapp_template_path, vapp_config)
|
169
167
|
end
|
@@ -173,7 +171,7 @@ module VmShepherd
|
|
173
171
|
let(:catalog_exists) { false }
|
174
172
|
|
175
173
|
it 'does not delete the catalog' do
|
176
|
-
expect(client).not_to receive(:delete_catalog_by_name).with(
|
174
|
+
expect(client).not_to receive(:delete_catalog_by_name).with(vapp_config.fetch(:catalog))
|
177
175
|
|
178
176
|
vcloud_manager.deploy(vapp_template_path, vapp_config)
|
179
177
|
end
|
@@ -181,14 +179,14 @@ module VmShepherd
|
|
181
179
|
end
|
182
180
|
|
183
181
|
it 'creates the catalog' do
|
184
|
-
expect(client).to receive(:create_catalog).with(
|
182
|
+
expect(client).to receive(:create_catalog).with(vapp_config.fetch(:catalog)).and_return(catalog)
|
185
183
|
|
186
184
|
vcloud_manager.deploy(vapp_template_path, vapp_config)
|
187
185
|
end
|
188
186
|
|
189
187
|
it 'uploads the vApp template' do
|
190
188
|
expect(catalog).to receive(:upload_vapp_template).with(
|
191
|
-
|
189
|
+
vdc_name,
|
192
190
|
vapp_config.fetch(:name),
|
193
191
|
tmpdir,
|
194
192
|
).and_return(catalog)
|
@@ -198,7 +196,7 @@ module VmShepherd
|
|
198
196
|
|
199
197
|
it 'creates a VCloudSdk::NetworkConfig' do
|
200
198
|
expect(VCloudSdk::NetworkConfig).to receive(:new).with(
|
201
|
-
|
199
|
+
vapp_config.fetch(:network),
|
202
200
|
'Network 1',
|
203
201
|
).and_return(network_config)
|
204
202
|
|
@@ -208,7 +206,7 @@ module VmShepherd
|
|
208
206
|
it 'instantiates the vApp template' do
|
209
207
|
expect(catalog).to receive(:instantiate_vapp_template).with(
|
210
208
|
vapp_config.fetch(:name),
|
211
|
-
|
209
|
+
vdc_name,
|
212
210
|
vapp_config.fetch(:name),
|
213
211
|
nil,
|
214
212
|
nil,
|
@@ -280,24 +278,25 @@ module VmShepherd
|
|
280
278
|
end
|
281
279
|
end
|
282
280
|
end
|
283
|
-
|
281
|
+
|
284
282
|
describe '#destroy' do
|
285
283
|
let(:client) { instance_double(VCloudSdk::Client) }
|
286
284
|
let(:vdc) { instance_double(VCloudSdk::VDC) }
|
287
285
|
let(:vapp) { instance_double(VCloudSdk::VApp) }
|
288
286
|
let(:vapp_name) { 'FAKE_VAPP_NAME' }
|
287
|
+
let(:vapp_catalog) { 'FAKE_VAPP_CATALOG' }
|
289
288
|
|
290
289
|
context 'when the catalog exists' do
|
291
290
|
before do
|
292
|
-
allow(client).to receive(:catalog_exists?).with(
|
291
|
+
allow(client).to receive(:catalog_exists?).with(vapp_catalog).and_return(true)
|
293
292
|
end
|
294
293
|
|
295
294
|
it 'uses VCloudSdk::Client to delete the vApp' do
|
296
|
-
expect(client).to receive(:find_vdc_by_name).with(
|
295
|
+
expect(client).to receive(:find_vdc_by_name).with(vdc_name).and_return(vdc)
|
297
296
|
expect(vdc).to receive(:find_vapp_by_name).with(vapp_name).and_return(vapp)
|
298
297
|
expect(vapp).to receive(:power_off)
|
299
298
|
expect(vapp).to receive(:delete)
|
300
|
-
expect(client).to receive(:delete_catalog_by_name).with(
|
299
|
+
expect(client).to receive(:delete_catalog_by_name).with(vapp_catalog)
|
301
300
|
|
302
301
|
expect(VCloudSdk::Client).to receive(:new).with(
|
303
302
|
login_info.fetch(:url),
|
@@ -307,7 +306,7 @@ module VmShepherd
|
|
307
306
|
logger,
|
308
307
|
).and_return(client)
|
309
308
|
|
310
|
-
vcloud_manager.destroy([vapp_name])
|
309
|
+
vcloud_manager.destroy([vapp_name], vapp_catalog)
|
311
310
|
end
|
312
311
|
|
313
312
|
context 'when an VCloudSdk::ObjectNotFoundError is thrown' do
|
@@ -324,28 +323,28 @@ module VmShepherd
|
|
324
323
|
it 'catches the error' do
|
325
324
|
allow(client).to receive(:find_vdc_by_name).and_raise(VCloudSdk::ObjectNotFoundError)
|
326
325
|
|
327
|
-
expect { vcloud_manager.destroy([vapp_name]) }.not_to raise_error
|
326
|
+
expect { vcloud_manager.destroy([vapp_name], vapp_catalog) }.not_to raise_error
|
328
327
|
end
|
329
328
|
|
330
329
|
it 'deletes to catalog' do
|
331
|
-
expect(client).to receive(:delete_catalog_by_name).with(
|
330
|
+
expect(client).to receive(:delete_catalog_by_name).with(vapp_catalog)
|
332
331
|
|
333
|
-
vcloud_manager.destroy([vapp_name])
|
332
|
+
vcloud_manager.destroy([vapp_name], vapp_catalog)
|
334
333
|
end
|
335
334
|
end
|
336
335
|
end
|
337
336
|
|
338
337
|
context 'when the catalog does not exist' do
|
339
338
|
before do
|
340
|
-
allow(client).to receive(:catalog_exists?).with(
|
339
|
+
allow(client).to receive(:catalog_exists?).with(vapp_catalog).and_return(false)
|
341
340
|
end
|
342
341
|
|
343
342
|
it 'uses VCloudSdk::Client to delete the vApp' do
|
344
|
-
expect(client).to receive(:find_vdc_by_name).with(
|
343
|
+
expect(client).to receive(:find_vdc_by_name).with(vdc_name).and_return(vdc)
|
345
344
|
expect(vdc).to receive(:find_vapp_by_name).with(vapp_name).and_return(vapp)
|
346
345
|
expect(vapp).to receive(:power_off)
|
347
346
|
expect(vapp).to receive(:delete)
|
348
|
-
expect(client).not_to receive(:delete_catalog_by_name).with(
|
347
|
+
expect(client).not_to receive(:delete_catalog_by_name).with(vapp_catalog)
|
349
348
|
|
350
349
|
expect(VCloudSdk::Client).to receive(:new).with(
|
351
350
|
login_info.fetch(:url),
|
@@ -355,9 +354,20 @@ module VmShepherd
|
|
355
354
|
logger,
|
356
355
|
).and_return(client)
|
357
356
|
|
358
|
-
vcloud_manager.destroy([vapp_name])
|
357
|
+
vcloud_manager.destroy([vapp_name], vapp_catalog)
|
359
358
|
end
|
360
359
|
end
|
361
360
|
end
|
361
|
+
|
362
|
+
describe '#clean_environment' do
|
363
|
+
let(:vapp_names) { ['VAPP_ONE', 'VAPP_TWO'] }
|
364
|
+
let(:vapp_catalog) { 'VAPP_CATALOG' }
|
365
|
+
|
366
|
+
it 'calls #destroy' do
|
367
|
+
expect(vcloud_manager).to receive(:destroy).with(vapp_names, vapp_catalog)
|
368
|
+
|
369
|
+
vcloud_manager.clean_environment(vapp_names, vapp_catalog)
|
370
|
+
end
|
371
|
+
end
|
362
372
|
end
|
363
373
|
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: 0.
|
4
|
+
version: 0.6.0
|
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-04-
|
11
|
+
date: 2015-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-v1
|
@@ -191,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
191
|
version: '0'
|
192
192
|
requirements: []
|
193
193
|
rubyforge_project:
|
194
|
-
rubygems_version: 2.4.
|
194
|
+
rubygems_version: 2.4.6
|
195
195
|
signing_key:
|
196
196
|
specification_version: 4
|
197
197
|
summary: A tool for booting and tearing down Ops Manager VMs on various Infrastructures.
|