vm_shepherd 3.5.0 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vm_shepherd/shepherd.rb +16 -5
- data/lib/vm_shepherd/version.rb +1 -1
- data/spec/fixtures/shepherd/vsphere-one-vm-config.yml +35 -0
- data/spec/vm_shepherd/shepherd_spec.rb +139 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 756d9a70d96ccda7ec70f94f6696609f891ca919
|
4
|
+
data.tar.gz: 8de386223858e604289442480c2afc2ec13b1a2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aeca796706b5cadc48fef207c01f27025dc53d7a042caa1d2e02d5734ac41f6b179c171be2ac107262989390ab58f0f786933fa0f6ad23795686fec4718bf787
|
7
|
+
data.tar.gz: ba4b1dc89e6bf841b0081722120e39a23672e17a2c687383e283d4069ae59c9335c4afbd92a2eb82d93048e97565f653b0b380b9f29d6dd0fa6c0c491f12c166
|
data/lib/vm_shepherd/shepherd.rb
CHANGED
@@ -38,7 +38,7 @@ module VmShepherd
|
|
38
38
|
path,
|
39
39
|
vcloud_deploy_options(vm_shepherd_config),
|
40
40
|
)
|
41
|
-
|
41
|
+
when VmShepherd::VSPHERE_IAAS_TYPE then
|
42
42
|
VmShepherd::VsphereManager.new(
|
43
43
|
vm_shepherd_config.dig('vcenter_creds', 'ip'),
|
44
44
|
vm_shepherd_config.dig('vcenter_creds', 'username'),
|
@@ -182,20 +182,31 @@ module VmShepherd
|
|
182
182
|
end
|
183
183
|
|
184
184
|
def vsphere_vm_options(input_config)
|
185
|
-
{
|
185
|
+
vsphere_vm_options = {
|
186
186
|
ip: input_config.dig('vm', 'ip'),
|
187
187
|
gateway: input_config.dig('vm', 'gateway'),
|
188
188
|
netmask: input_config.dig('vm', 'netmask'),
|
189
189
|
dns: input_config.dig('vm', 'dns'),
|
190
190
|
ntp_servers: input_config.dig('vm', 'ntp_servers'),
|
191
191
|
cpus: input_config.dig('vm', 'cpus'),
|
192
|
-
ram_mb: input_config.dig('vm', 'ram_mb')
|
193
|
-
vm_password: (input_config.dig('vm', 'vm_password') || 'tempest'),
|
194
|
-
public_ssh_key: read_assets_home(input_config.dig('vm', 'public_ssh_key')),
|
192
|
+
ram_mb: input_config.dig('vm', 'ram_mb')
|
195
193
|
}.tap do |result|
|
196
194
|
hostname = input_config.dig('vm', 'custom_hostname')
|
197
195
|
result[:custom_hostname] = hostname unless hostname.nil?
|
198
196
|
end
|
197
|
+
|
198
|
+
vsphere_vm_options.merge!(vm_password: get_vsphere_vm_password(input_config))
|
199
|
+
vsphere_vm_options.merge!(public_ssh_key: get_vsphere_vm_public_ssh_key(input_config))
|
200
|
+
|
201
|
+
vsphere_vm_options
|
202
|
+
end
|
203
|
+
|
204
|
+
def get_vsphere_vm_password(input_config)
|
205
|
+
ENV['PROVISION_WITH_PASSWORD'] == 'false' ? nil : (input_config.dig('vm', 'vm_password') || 'tempest')
|
206
|
+
end
|
207
|
+
|
208
|
+
def get_vsphere_vm_public_ssh_key(input_config)
|
209
|
+
ENV['PROVISION_WITH_SSH_KEY'] == 'false' ? nil : (read_assets_home(input_config.dig('vm', 'public_ssh_key')))
|
199
210
|
end
|
200
211
|
|
201
212
|
def read_assets_home(path_or_value)
|
data/lib/vm_shepherd/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
iaas_type: vsphere
|
2
|
+
vm_shepherd:
|
3
|
+
vm_configs:
|
4
|
+
- vcenter_creds:
|
5
|
+
ip: OVA_URL
|
6
|
+
username: OVA_ORGANIZATION
|
7
|
+
password: OVA_PASSWORD
|
8
|
+
vsphere:
|
9
|
+
datacenter: VSPHERE_DATACENTER
|
10
|
+
cluster: VSPHERE_CLUSTER
|
11
|
+
network: VSPHERE_NETWORK
|
12
|
+
resource_pool: VSPHERE_RESOURCE_POOL
|
13
|
+
datastore: VSPHERE_DATASTORE
|
14
|
+
folder: VSPHERE_FOLDER
|
15
|
+
vm:
|
16
|
+
ip: OVA_IP
|
17
|
+
gateway: OVA_GATEWAY
|
18
|
+
netmask: OVA_NETMASK
|
19
|
+
dns: OVA_DNS
|
20
|
+
ntp_servers: OVA_NTP
|
21
|
+
public_ssh_key: OVA_SSH_KEY
|
22
|
+
cpus: OVA_CPUS
|
23
|
+
ram_mb: OVA_RAM_MB
|
24
|
+
vm_password: not-tempest
|
25
|
+
custom_hostname: not-default-hostname
|
26
|
+
cleanup:
|
27
|
+
datacenter: VSPHERE_OTHER_DATACENTER
|
28
|
+
datastores:
|
29
|
+
- VSPHERE_DATASTORE_ONE
|
30
|
+
- VSPHERE_DATASTORE_TWO
|
31
|
+
datacenter_folders_to_clean:
|
32
|
+
- DC_FOLDER_ONE
|
33
|
+
- DC_FOLDER_TWO
|
34
|
+
datastore_folders_to_clean:
|
35
|
+
- DS_DISK_FOLDER
|
@@ -281,6 +281,145 @@ module VmShepherd
|
|
281
281
|
manager.deploy(paths: ['FIRST_FAKE_PATH', 'LAST_FAKE_PATH'])
|
282
282
|
end
|
283
283
|
end
|
284
|
+
|
285
|
+
context 'when provision environment variables are set' do
|
286
|
+
before do
|
287
|
+
allow(VsphereManager).to receive(:new).with(
|
288
|
+
first_config.dig('vcenter_creds', 'ip'),
|
289
|
+
first_config.dig('vcenter_creds', 'username'),
|
290
|
+
first_config.dig('vcenter_creds', 'password'),
|
291
|
+
first_config.dig('vsphere', 'datacenter'),
|
292
|
+
instance_of(Logger),
|
293
|
+
).and_return(first_ova_manager)
|
294
|
+
|
295
|
+
allow_any_instance_of(Shepherd).to receive(:read_assets_home).and_return('A PUBLIC KEY')
|
296
|
+
end
|
297
|
+
let(:settings_fixture_name) { 'vsphere-one-vm-config.yml' }
|
298
|
+
|
299
|
+
context 'when the PROVISION_WITH_PASSWORD environment variable is set' do
|
300
|
+
context 'and it is true' do
|
301
|
+
before { stub_const('ENV', {'PROVISION_WITH_PASSWORD' => 'true'}) }
|
302
|
+
|
303
|
+
it 'deploys with the set vm password' do
|
304
|
+
expect(first_ova_manager).to receive(:deploy).with(
|
305
|
+
'FIRST_FAKE_PATH',
|
306
|
+
{
|
307
|
+
ip: first_config.dig('vm', 'ip'),
|
308
|
+
gateway: first_config.dig('vm', 'gateway'),
|
309
|
+
netmask: first_config.dig('vm', 'netmask'),
|
310
|
+
dns: first_config.dig('vm', 'dns'),
|
311
|
+
ntp_servers: first_config.dig('vm', 'ntp_servers'),
|
312
|
+
cpus: first_config.dig('vm', 'cpus'),
|
313
|
+
ram_mb: first_config.dig('vm', 'ram_mb'),
|
314
|
+
vm_password: first_config.dig('vm', 'vm_password'),
|
315
|
+
public_ssh_key: 'A PUBLIC KEY',
|
316
|
+
custom_hostname: first_config.dig('vm', 'custom_hostname')
|
317
|
+
},
|
318
|
+
{
|
319
|
+
cluster: first_config.dig('vsphere', 'cluster'),
|
320
|
+
resource_pool: first_config.dig('vsphere', 'resource_pool'),
|
321
|
+
datastore: first_config.dig('vsphere', 'datastore'),
|
322
|
+
network: first_config.dig('vsphere', 'network'),
|
323
|
+
folder: first_config.dig('vsphere', 'folder'),
|
324
|
+
},
|
325
|
+
)
|
326
|
+
manager.deploy(paths: ['FIRST_FAKE_PATH'])
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
context 'and it is false' do
|
331
|
+
before { stub_const('ENV', {'PROVISION_WITH_PASSWORD' => 'false'}) }
|
332
|
+
|
333
|
+
it 'deploys with a nil vm password' do
|
334
|
+
expect(first_ova_manager).to receive(:deploy).with(
|
335
|
+
'FIRST_FAKE_PATH',
|
336
|
+
{
|
337
|
+
ip: first_config.dig('vm', 'ip'),
|
338
|
+
gateway: first_config.dig('vm', 'gateway'),
|
339
|
+
netmask: first_config.dig('vm', 'netmask'),
|
340
|
+
dns: first_config.dig('vm', 'dns'),
|
341
|
+
ntp_servers: first_config.dig('vm', 'ntp_servers'),
|
342
|
+
cpus: first_config.dig('vm', 'cpus'),
|
343
|
+
ram_mb: first_config.dig('vm', 'ram_mb'),
|
344
|
+
vm_password: nil,
|
345
|
+
public_ssh_key: 'A PUBLIC KEY',
|
346
|
+
custom_hostname: first_config.dig('vm', 'custom_hostname')
|
347
|
+
},
|
348
|
+
{
|
349
|
+
cluster: first_config.dig('vsphere', 'cluster'),
|
350
|
+
resource_pool: first_config.dig('vsphere', 'resource_pool'),
|
351
|
+
datastore: first_config.dig('vsphere', 'datastore'),
|
352
|
+
network: first_config.dig('vsphere', 'network'),
|
353
|
+
folder: first_config.dig('vsphere', 'folder'),
|
354
|
+
},
|
355
|
+
)
|
356
|
+
manager.deploy(paths: ['FIRST_FAKE_PATH'])
|
357
|
+
end
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
context 'when the PROVISION_WITH_SSH_KEY environment variable is set' do
|
362
|
+
context 'and it is true' do
|
363
|
+
before { stub_const('ENV', {'PROVISION_WITH_SSH_KEY' => 'true'}) }
|
364
|
+
|
365
|
+
it 'deploys with the set public ssh key' do
|
366
|
+
expect(first_ova_manager).to receive(:deploy).with(
|
367
|
+
'FIRST_FAKE_PATH',
|
368
|
+
{
|
369
|
+
ip: first_config.dig('vm', 'ip'),
|
370
|
+
gateway: first_config.dig('vm', 'gateway'),
|
371
|
+
netmask: first_config.dig('vm', 'netmask'),
|
372
|
+
dns: first_config.dig('vm', 'dns'),
|
373
|
+
ntp_servers: first_config.dig('vm', 'ntp_servers'),
|
374
|
+
cpus: first_config.dig('vm', 'cpus'),
|
375
|
+
ram_mb: first_config.dig('vm', 'ram_mb'),
|
376
|
+
vm_password: first_config.dig('vm', 'vm_password'),
|
377
|
+
public_ssh_key: 'A PUBLIC KEY',
|
378
|
+
custom_hostname: first_config.dig('vm', 'custom_hostname')
|
379
|
+
},
|
380
|
+
{
|
381
|
+
cluster: first_config.dig('vsphere', 'cluster'),
|
382
|
+
resource_pool: first_config.dig('vsphere', 'resource_pool'),
|
383
|
+
datastore: first_config.dig('vsphere', 'datastore'),
|
384
|
+
network: first_config.dig('vsphere', 'network'),
|
385
|
+
folder: first_config.dig('vsphere', 'folder'),
|
386
|
+
},
|
387
|
+
)
|
388
|
+
manager.deploy(paths: ['FIRST_FAKE_PATH'])
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
392
|
+
context 'and it is false' do
|
393
|
+
before { stub_const('ENV', {'PROVISION_WITH_SSH_KEY' => 'false'}) }
|
394
|
+
|
395
|
+
it 'deploys with a nil public ssh key' do
|
396
|
+
expect(first_ova_manager).to receive(:deploy).with(
|
397
|
+
'FIRST_FAKE_PATH',
|
398
|
+
{
|
399
|
+
ip: first_config.dig('vm', 'ip'),
|
400
|
+
gateway: first_config.dig('vm', 'gateway'),
|
401
|
+
netmask: first_config.dig('vm', 'netmask'),
|
402
|
+
dns: first_config.dig('vm', 'dns'),
|
403
|
+
ntp_servers: first_config.dig('vm', 'ntp_servers'),
|
404
|
+
cpus: first_config.dig('vm', 'cpus'),
|
405
|
+
ram_mb: first_config.dig('vm', 'ram_mb'),
|
406
|
+
vm_password: first_config.dig('vm', 'vm_password'),
|
407
|
+
public_ssh_key: nil,
|
408
|
+
custom_hostname: first_config.dig('vm', 'custom_hostname')
|
409
|
+
},
|
410
|
+
{
|
411
|
+
cluster: first_config.dig('vsphere', 'cluster'),
|
412
|
+
resource_pool: first_config.dig('vsphere', 'resource_pool'),
|
413
|
+
datastore: first_config.dig('vsphere', 'datastore'),
|
414
|
+
network: first_config.dig('vsphere', 'network'),
|
415
|
+
folder: first_config.dig('vsphere', 'folder'),
|
416
|
+
},
|
417
|
+
)
|
418
|
+
manager.deploy(paths: ['FIRST_FAKE_PATH'])
|
419
|
+
end
|
420
|
+
end
|
421
|
+
end
|
422
|
+
end
|
284
423
|
end
|
285
424
|
|
286
425
|
context 'with AWS settings' do
|
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: 3.
|
4
|
+
version: 3.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: 2018-08-
|
11
|
+
date: 2018-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-v1
|
@@ -173,6 +173,7 @@ files:
|
|
173
173
|
- spec/fixtures/shepherd/openstack.yml
|
174
174
|
- spec/fixtures/shepherd/unknown.yml
|
175
175
|
- spec/fixtures/shepherd/vcloud.yml
|
176
|
+
- spec/fixtures/shepherd/vsphere-one-vm-config.yml
|
176
177
|
- spec/fixtures/shepherd/vsphere.yml
|
177
178
|
- spec/spec_helper.rb
|
178
179
|
- spec/support/patched_fog.rb
|
@@ -218,6 +219,7 @@ test_files:
|
|
218
219
|
- spec/fixtures/shepherd/openstack.yml
|
219
220
|
- spec/fixtures/shepherd/unknown.yml
|
220
221
|
- spec/fixtures/shepherd/vcloud.yml
|
222
|
+
- spec/fixtures/shepherd/vsphere-one-vm-config.yml
|
221
223
|
- spec/fixtures/shepherd/vsphere.yml
|
222
224
|
- spec/spec_helper.rb
|
223
225
|
- spec/support/patched_fog.rb
|