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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ceb0f3801ef527e92ea81d31838858b713d4cdc
4
- data.tar.gz: 4914b2c8d350a735ad021c8504790f6608fefddc
3
+ metadata.gz: 3c10ea04c94a577b4dc32587cf9aee9191d7bf6a
4
+ data.tar.gz: 891e6c41c038a3ef7c575ab2daa72cc525eea7ae
5
5
  SHA512:
6
- metadata.gz: 07612bcc114e6b4b59557b7557cbed0529381629678b162f1e15b8a14d3a0f7516c7c35aa459661b26688cc032db30e57a21cd88d363086dcbcd875edbae5fd9
7
- data.tar.gz: 80f1e48934c3134b55d7a82d4816b3f6e92f677c4ac967204e35f763ecc4b97406ff37356887b085441b2ab1b05902930ec1689a251a69c60cb7f5001a2b6479
6
+ metadata.gz: d0ce28324a805225b14345ec26ae9ec9c316f12ccbcc1d4d065aa488e8ac3e25ea5c2b4bc7bd4f6a096b1397a34c1233c875e12f30eb5a784a70db4b410e7aef
7
+ data.tar.gz: 962302ec67a987eab006fe33f21c5ae2edd518f6683e4c26252be259948f697e7975fc7a02b2bec0bf362ed27946a374590a2f629ac57007f2ed5d603f3567c3
@@ -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] + settings.vm_shepherd.vapp.product_names)
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
- vdc: settings.vm_shepherd.vdc.name,
106
- catalog: settings.vm_shepherd.vdc.catalog,
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, location, logger)
7
+ def initialize(login_info, vdc_name, logger)
8
8
  @login_info = login_info
9
- @location = location
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(@location[:catalog]) if client.catalog_exists?(@location[:catalog])
66
- catalog = client.create_catalog(@location[: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(@location[:vdc], vapp_config[:name], ovf_dir)
67
+ catalog.upload_vapp_template(@vdc_name, vapp_config[:name], ovf_dir)
70
68
 
71
69
  # instantiate template
72
- network_config = VCloudSdk::NetworkConfig.new(@location[:network], 'Network 1')
70
+ network_config = VCloudSdk::NetworkConfig.new(vapp_config[:network], 'Network 1')
73
71
  catalog.instantiate_vapp_template(
74
- vapp_config[:name], @location[:vdc], vapp_config[:name], nil, nil, network_config)
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(@location[:vdc])
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(@location[:catalog]) if client.catalog_exists?(@location[:catalog])
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
@@ -1,3 +1,3 @@
1
1
  module VmShepherd
2
- VERSION = '0.5.0'.freeze
2
+ VERSION = '0.6.0'.freeze
3
3
  end
@@ -11,9 +11,10 @@ vm_shepherd:
11
11
  network: VDC_NETWORK
12
12
  vapp:
13
13
  ops_manager_name: VAPP_NAME
14
+ product_catalog: PRODUCT_CATALOG
14
15
  product_names:
15
- - PRODUCT_1
16
- - PRODUCT_2
16
+ - PRODUCT_1
17
+ - PRODUCT_2
17
18
  ip: VAPP_IP
18
19
  public_ip:
19
20
  gateway: VAPP_GATEWAY
@@ -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
- vapp_names = [settings.vm_shepherd.vapp.ops_manager_name] + settings.vm_shepherd.vapp.product_names
181
- expect(vcloud_manager).to receive(:destroy).with(vapp_names)
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
- expect(vcloud_manager).to receive(:clean_environment)
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(:location) do
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, location, logger) }
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(location.fetch(:catalog))
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(location.fetch(:catalog))
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(location.fetch(:catalog)).and_return(catalog)
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
- location.fetch(:vdc),
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
- location.fetch(:network),
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
- location.fetch(:vdc),
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(location.fetch(:catalog)).and_return(true)
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(location.fetch(:vdc)).and_return(vdc)
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(location.fetch(:catalog))
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(location.fetch(:catalog))
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(location.fetch(:catalog)).and_return(false)
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(location.fetch(:vdc)).and_return(vdc)
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(location.fetch(:catalog))
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.5.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-22 00:00:00.000000000 Z
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.5
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.