vagrant-vmware-esxi 2.0.1 → 2.0.2
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/README.md +25 -17
- data/example_box/Vagrantfile +8 -0
- data/lib/vagrant-vmware-esxi/action/createvm.rb +101 -11
- data/lib/vagrant-vmware-esxi/action/esxi_password.rb +1 -1
- data/lib/vagrant-vmware-esxi/config.rb +5 -0
- data/lib/vagrant-vmware-esxi/version.rb +1 -1
- data/vagrant-vmware-esxi.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d0834aff046d2b6fdb5d399570a17e186db96af
|
4
|
+
data.tar.gz: 7a102b5eda42f9314a8cb80ed75caae98b286f38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4319d1e60822a7fe713b5300e14f5bb7a77ef5a369eed508c41de448e1b0d20ad85c0667c8e03572a9a0a19db6375a7623e41975bfe1c3b4b10d343c594e6779
|
7
|
+
data.tar.gz: b951da71fc3e6fef1ce65f698bc18d1175f4c94f9a9638c83103df89675e228ab4db7d801cd3c55c39f42914a55dec775300a1e6d78f4ff0da2214275b3d8157
|
data/README.md
CHANGED
@@ -21,14 +21,14 @@ Features and Compatibility
|
|
21
21
|
* Automatic VM names are 'PREFIX-HOSTNAME-USERNAME-DIR'.
|
22
22
|
* Multi machine capable.
|
23
23
|
* Supports adding your VM to Resource Pools to partition CPU and memory usage from other VMs on your ESXi host.
|
24
|
-
* suspend
|
25
|
-
* snapshots.
|
24
|
+
* suspend, resume, snapshots.
|
26
25
|
* rsync & NFS using built-in Vagrant synced folders.
|
27
26
|
* Provision using built-in Vagrant provisioner.
|
28
27
|
* package your vm's into boxes.
|
29
28
|
* Create additional network interfaces, set nic type, MAC addresses, static IPs.
|
30
29
|
* Use Vagrants private_network, public_network options to set a static IP addresses on additional network interfaces. (not the primary interface)
|
31
30
|
* Disks provisioned using thin, thick or eagerzeroedthick.
|
31
|
+
* Create additional guest storage (upto 14 virtual disks).
|
32
32
|
* Specify GuestOS types, virtual HW version, or any custom vmx settings.
|
33
33
|
|
34
34
|
Requirements
|
@@ -39,7 +39,7 @@ Requirements
|
|
39
39
|
3. You MUST enable ssh access on your ESXi hypervisor.
|
40
40
|
* Google 'How to enable ssh access on esxi'
|
41
41
|
4. The boxes must have open-vm-tools or vmware-tools installed to properly transition to the 'running' state.
|
42
|
-
5. In general, you should know how to use vagrant and
|
42
|
+
5. In general, you should know how to use vagrant, esxi and some networking...
|
43
43
|
|
44
44
|
Why this plugin?
|
45
45
|
----------------
|
@@ -172,6 +172,11 @@ Vagrant.configure('2') do |config|
|
|
172
172
|
# 'thin', 'thick', or 'eagerzeroedthick'
|
173
173
|
#esxi.guest_disk_type = 'thick'
|
174
174
|
|
175
|
+
# OPTIONAL. Create additional storage for guests.
|
176
|
+
# You can specify an array of upto 14 virtual disk sizes (in GB) that you
|
177
|
+
# would like the provider to create once the guest has been created.
|
178
|
+
#esxi.guest_storage = [10,20]
|
179
|
+
|
175
180
|
# OPTIONAL. specify snapshot options.
|
176
181
|
#esxi.guest_snapshot_includememory = 'true'
|
177
182
|
#esxi.guest_snapshot_quiesced = 'true'
|
@@ -253,25 +258,28 @@ Known issues with vmware_esxi
|
|
253
258
|
|
254
259
|
Version History
|
255
260
|
---------------
|
261
|
+
* 2.0.2 Add support to add additional storage to guest vms.
|
262
|
+
Fix, encode (space) in esxi passwords.
|
263
|
+
|
256
264
|
* 2.0.1 Updated version:
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
265
|
+
Most Vagrantfile options have been renamed to be consistent and for clarity.
|
266
|
+
vagrant up, more organized summary by esxi/guest options.
|
267
|
+
Lots of Code cleanup.
|
268
|
+
Add support for snapshot options (includeMemory & quiesced)
|
269
|
+
Snapshot save/push adds a description.
|
262
270
|
|
263
271
|
* 1.5.1 Fix:
|
264
|
-
|
265
|
-
|
266
|
-
|
272
|
+
Improve debug output.
|
273
|
+
Fix password encoding for @ character.
|
274
|
+
Automatically add a virtual network when configuring a public_network or private_network.
|
267
275
|
|
268
276
|
* 1.5.0 Add support for:
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
277
|
+
Specify guest_custom_vmx_settings (to add or modify vmx settings).
|
278
|
+
Specify Virtual HW version.
|
279
|
+
Allow $ in Password.
|
280
|
+
Disk types (thick, thin, eagerzeroedthick).
|
281
|
+
Specify a guestOS type (see list above).
|
282
|
+
Relocal_laxed ovftool setting (--local_lax), to allow importing strange ovf boxes.
|
275
283
|
|
276
284
|
* 1.4.0 Add support to set MAC and IP addresses for network interfaces.
|
277
285
|
* 1.3.2 Fix, Don't timeout ssh connection when ovftool takes a long time to upload image.
|
data/example_box/Vagrantfile
CHANGED
@@ -153,6 +153,14 @@ Vagrant.configure('2') do |config|
|
|
153
153
|
# 'thin', 'thick', or 'eagerzeroedthick'
|
154
154
|
#esxi.guest_disk_type = 'thick'
|
155
155
|
|
156
|
+
# OPTIONAL. Create additional storage for guests.
|
157
|
+
# You can specify an array of upto 14 virtual disk sizes (in GB) that you
|
158
|
+
# would like the provider to create once the guest has been created. The
|
159
|
+
# virtual disks will be created and added to the guest, however you must
|
160
|
+
# provision it. The disks can be used for lvm, partitioned, raw disk
|
161
|
+
# for data bases, etc...
|
162
|
+
#esxi.guest_storage = [10,20]
|
163
|
+
|
156
164
|
# OPTIONAL & RISKY. Specify up to 4 MAC addresses
|
157
165
|
# The default is ovftool to automatically generate a MAC address.
|
158
166
|
# You can specify an array of MAC addresses using upper or lower case,
|
@@ -325,6 +325,8 @@ module VagrantPlugins
|
|
325
325
|
new_guest_mac_address[index] = ''
|
326
326
|
else
|
327
327
|
new_guest_mac_address[index] = "invalid"
|
328
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
329
|
+
message: "WARNING : Ignored invalid mac address at index[#{index}]")
|
328
330
|
end
|
329
331
|
end
|
330
332
|
end
|
@@ -361,6 +363,24 @@ module VagrantPlugins
|
|
361
363
|
end
|
362
364
|
end
|
363
365
|
|
366
|
+
# Validate guest Storage
|
367
|
+
if config.guest_storage.is_a? Array
|
368
|
+
new_guest_storage = []
|
369
|
+
0.upto(config.guest_storage.count - 1) do |index|
|
370
|
+
store_size = config.guest_storage[index].to_i
|
371
|
+
if store_size < 1
|
372
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
373
|
+
message: 'WARNING : Ignored invalid '\
|
374
|
+
"storage size #{config.guest_storage[index]} at "\
|
375
|
+
"index[#{index}]")
|
376
|
+
new_guest_storage[index] = "invalid"
|
377
|
+
else
|
378
|
+
new_guest_storage[index] = store_size
|
379
|
+
end
|
380
|
+
end
|
381
|
+
config.guest_storage = new_guest_storage
|
382
|
+
end
|
383
|
+
|
364
384
|
# Validate virtual HW levels
|
365
385
|
unless config.guest_virtualhw_version.nil?
|
366
386
|
if config.supported_guest_virtualhw_versions.include? config.guest_virtualhw_version.to_i
|
@@ -412,7 +432,7 @@ module VagrantPlugins
|
|
412
432
|
message: "CPUS : #{desired_guest_numvcpus}")
|
413
433
|
unless config.guest_mac_address[0].eql? ''
|
414
434
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
415
|
-
message: "Mac Address : #{config.guest_mac_address}")
|
435
|
+
message: "Mac Address : #{config.guest_mac_address[0..3]}")
|
416
436
|
end
|
417
437
|
unless guest_nic_type.nil?
|
418
438
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
@@ -422,6 +442,10 @@ module VagrantPlugins
|
|
422
442
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
423
443
|
message: "Disk Type : #{guest_disk_type}")
|
424
444
|
end
|
445
|
+
unless config.guest_storage.nil?
|
446
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
447
|
+
message: "Storage (GB) : #{config.guest_storage[0..13]}")
|
448
|
+
end
|
425
449
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
426
450
|
message: "Guest OS type : #{config.guest_guestos}")
|
427
451
|
unless guest_virtualhw_version.nil?
|
@@ -436,7 +460,8 @@ module VagrantPlugins
|
|
436
460
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
437
461
|
message: 'Allow Overwrite : True')
|
438
462
|
end
|
439
|
-
|
463
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
464
|
+
message: " --- Guest Build ---")
|
440
465
|
|
441
466
|
#
|
442
467
|
# Using ovftool, import vmx in box folder, export to ESXi server
|
@@ -477,7 +502,8 @@ module VagrantPlugins
|
|
477
502
|
end
|
478
503
|
|
479
504
|
#
|
480
|
-
# Re-open the network connection to get VMID
|
505
|
+
# Re-open the network connection to get VMID and do final adjustments
|
506
|
+
# to vmx file.
|
481
507
|
#
|
482
508
|
Net::SSH.start(config.esxi_hostname, config.esxi_username,
|
483
509
|
password: $esxi_password,
|
@@ -506,19 +532,81 @@ module VagrantPlugins
|
|
506
532
|
dst_vmx = ssh.exec!("vim-cmd vmsvc/get.config #{env[:machine].id} |\
|
507
533
|
grep vmPathName|awk '{print $NF}'|sed 's/[\"|,]//g'")
|
508
534
|
|
509
|
-
|
535
|
+
dst_vmx_ds = ssh.exec!("vim-cmd vmsvc/get.config #{env[:machine].id} |"\
|
510
536
|
'grep vmPathName|grep -oE "\[.*\]"')
|
511
537
|
|
538
|
+
dst_vmx_dir = ssh.exec!("vim-cmd vmsvc/get.config #{env[:machine].id} |\
|
539
|
+
grep vmPathName|awk '{print $NF}'|awk -F'\/' '{print $1}'")
|
540
|
+
|
541
|
+
|
512
542
|
dst_vmx_file = "/vmfs/volumes/"
|
513
|
-
dst_vmx_file <<
|
543
|
+
dst_vmx_file << dst_vmx_ds.gsub('[','').gsub(']','').strip + "/"
|
544
|
+
esxi_guest_dir = dst_vmx_file + dst_vmx_dir.strip
|
514
545
|
dst_vmx_file << dst_vmx
|
515
546
|
|
547
|
+
# Create storage if required
|
548
|
+
if config.guest_storage.is_a? Array
|
549
|
+
index = -1
|
550
|
+
config.guest_storage.each do |store|
|
551
|
+
store_size = store.to_i
|
552
|
+
index += 1
|
553
|
+
if store_size == 0
|
554
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
555
|
+
message: "Creating Storage: Skipping --invalid-- at storage[#{index}]")
|
556
|
+
elsif index > 14
|
557
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
558
|
+
message: "Creating Storage: Skipping storage[#{index}], Maximum 14 devices exceeded...")
|
559
|
+
else
|
560
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
561
|
+
message: "Creating Storage: disk_#{index}.vmdk (#{store_size}GB)")
|
562
|
+
|
563
|
+
# Figure out what SCSI slots are used.
|
564
|
+
r = ssh.exec!("vim-cmd vmsvc/device.getdevices #{machine.id}|"\
|
565
|
+
"grep -A 30 vim.vm.device.VirtualDisk|"\
|
566
|
+
"grep -e controllerKey -e unitNumber|grep -A 1 'controllerKey = 1000,'|"\
|
567
|
+
"grep unitNumber|awk '{print $3}'|sed 's/,//g'")
|
568
|
+
|
569
|
+
if r.length < 2
|
570
|
+
raise Errors::ESXiError,
|
571
|
+
message: "Unable to get guest storage configuration:\n"\
|
572
|
+
" #{r}"\
|
573
|
+
' Review ESXi logs for additional information!'
|
574
|
+
end
|
575
|
+
0.upto(15) do |slot|
|
576
|
+
next if slot == 7
|
577
|
+
if r !~ %r{^#{slot.to_s}$}i
|
578
|
+
puts "Avail slot: #{slot}" if config.debug =~ %r{true}i
|
579
|
+
guest_disk_type = 'zeroedthick' if guest_disk_type == 'thick'
|
580
|
+
|
581
|
+
cmd = "/bin/vmkfstools -c #{store_size}G -d #{guest_disk_type} #{esxi_guest_dir}/disk_#{index}.vmdk"
|
582
|
+
puts "cmd: #{cmd}" if config.debug =~ %r{true}i
|
583
|
+
r = ssh.exec!(cmd)
|
584
|
+
if r.exitstatus != 0
|
585
|
+
raise Errors::ESXiError,
|
586
|
+
message: "Unable to create guest storage (vmkfstools failed):\n"\
|
587
|
+
" #{r}"\
|
588
|
+
' Review ESXi logs for additional information!'
|
589
|
+
end
|
590
|
+
r = ssh.exec!("vim-cmd vmsvc/device.diskaddexisting #{env[:machine].id} "\
|
591
|
+
"#{esxi_guest_dir}/disk_#{index}.vmdk 0 #{slot}")
|
592
|
+
if r.exitstatus != 0
|
593
|
+
raise Errors::ESXiError,
|
594
|
+
message: "Unable to create guest storage (vmkfstools failed):\n"\
|
595
|
+
" #{r}"\
|
596
|
+
' Review ESXi logs for additional information!'
|
597
|
+
end
|
598
|
+
break
|
599
|
+
end
|
600
|
+
end
|
601
|
+
end
|
602
|
+
end
|
603
|
+
end
|
604
|
+
|
516
605
|
# Get vmx file in memory
|
517
606
|
esxi_orig_vmx_file = ssh.exec!("cat #{dst_vmx_file} 2>/dev/null")
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
end
|
607
|
+
|
608
|
+
puts "orig vmx: #{esxi_orig_vmx_file}\n\n" if config.debug =~ %r{vmx}i
|
609
|
+
|
522
610
|
if esxi_orig_vmx_file.exitstatus != 0
|
523
611
|
raise Errors::ESXiError,
|
524
612
|
message: "Unable to read #{dst_vmx_file}"
|
@@ -574,8 +662,6 @@ module VagrantPlugins
|
|
574
662
|
elsif guest_mac_address == ''
|
575
663
|
new_vmx_contents << line
|
576
664
|
else
|
577
|
-
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
578
|
-
message: "Ignored invalid mac address at index: #{nicindex}")
|
579
665
|
new_vmx_contents << line
|
580
666
|
end
|
581
667
|
end
|
@@ -656,6 +742,10 @@ module VagrantPlugins
|
|
656
742
|
message: 'ESXi vmx file : Unmodified')
|
657
743
|
end
|
658
744
|
end
|
745
|
+
|
746
|
+
|
747
|
+
|
748
|
+
# Done
|
659
749
|
end
|
660
750
|
end
|
661
751
|
end
|
@@ -107,7 +107,7 @@ module VagrantPlugins
|
|
107
107
|
'/', '%2f').gsub('\\','%5c').gsub(\
|
108
108
|
'"', '%22').gsub('\'','%27').gsub(\
|
109
109
|
'*', '%2a').gsub('?', '%3f').gsub(\
|
110
|
-
'$', '%24')
|
110
|
+
'$', '%24').gsub(' ', '%20')
|
111
111
|
|
112
112
|
@logger.info('vagrant-vmware-esxi, connect_esxi: local_private_keys: '\
|
113
113
|
"#{config.local_private_keys}")
|
@@ -16,6 +16,7 @@ module VagrantPlugins
|
|
16
16
|
attr_accessor :guest_name_prefix
|
17
17
|
attr_accessor :guest_guestos
|
18
18
|
attr_accessor :guest_disk_type
|
19
|
+
attr_accessor :guest_storage
|
19
20
|
attr_accessor :guest_nic_type
|
20
21
|
attr_accessor :guest_mac_address
|
21
22
|
attr_accessor :guest_memsize
|
@@ -67,6 +68,7 @@ module VagrantPlugins
|
|
67
68
|
@guest_name_prefix = 'V-'
|
68
69
|
@guest_guestos = nil
|
69
70
|
@guest_disk_type = nil
|
71
|
+
@guest_storage = nil
|
70
72
|
@guest_nic_type = nil
|
71
73
|
@guest_mac_address = ["","","",""]
|
72
74
|
@guest_memsize = nil
|
@@ -352,6 +354,9 @@ module VagrantPlugins
|
|
352
354
|
|
353
355
|
@guest_username = nil if @guest_username == UNSET_VALUE
|
354
356
|
|
357
|
+
@guest_storage = [@guest_storage.to_i] if @guest_storage.is_a? String
|
358
|
+
@guest_storage = [@guest_storage] if @guest_storage.is_a? Integer
|
359
|
+
|
355
360
|
@esxi_virtual_network = [@esxi_virtual_network] if @esxi_virtual_network.is_a? String
|
356
361
|
|
357
362
|
@esxi_virtual_network = ['--NotSet--'] if @esxi_virtual_network.nil?
|
data/vagrant-vmware-esxi.gemspec
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path('../lib/vagrant-vmware-esxi/version', __FILE__)
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'vagrant-vmware-esxi'
|
5
5
|
s.version = VagrantPlugins::ESXi::VERSION
|
6
|
-
s.date = '2018-02-
|
6
|
+
s.date = '2018-02-15'
|
7
7
|
s.summary = 'Vagrant ESXi provider plugin'
|
8
8
|
s.description = 'A Vagrant plugin that adds a VMware ESXi provider support'
|
9
9
|
s.authors = ['Jonathan Senkerik']
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-vmware-esxi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Senkerik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|