vm_shepherd 0.5.0 → 0.6.0

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: 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.