vagrant-vmware-esxi 1.4.0 → 1.5.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/README.md +47 -10
- data/example_box/Vagrantfile +30 -7
- data/lib/vagrant-vmware-esxi/action/createvm.rb +168 -55
- data/lib/vagrant-vmware-esxi/action/esxi_password.rb +2 -1
- data/lib/vagrant-vmware-esxi/action/read_ssh_info.rb +2 -2
- data/lib/vagrant-vmware-esxi/config.rb +187 -1
- 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: c220b80d1a181ae3dbe1ba7364a28813ef287021
|
4
|
+
data.tar.gz: 1372acaada64754b4ce0f69579ebb86cff807934
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa6a785b4292394dc0df368d42c7134666b7f546811c8c1fbd35d9bfd7d7ab679f1cce0d762975589f218fdf98e11ee22dd2346dc87115628aac7a91de7e2a04
|
7
|
+
data.tar.gz: 549ee440d9442a31363ae3ce87e33be7d164c857b6bdeae07627ef8935a6f05a40a9e695fa24c61f376e6f629684bba14ab9baeb00bd8633ec4716788bd9189e
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ Features and Compatibility
|
|
8
8
|
--------------------------
|
9
9
|
* Any of the vmware Box formats should be compatible.
|
10
10
|
* vmware_desktop, vmware_fusion, vmware_workstation...
|
11
|
-
* To be fully functional, you must have open-vm-tools or vmware tools installed
|
11
|
+
* To be fully functional, you must have open-vm-tools or vmware tools installed.
|
12
12
|
* Will automatically download boxes from the web.
|
13
13
|
* Will automatically upload the box to your ESXi host.
|
14
14
|
* Automatic or manual VM names.
|
@@ -20,8 +20,10 @@ Features and Compatibility
|
|
20
20
|
* rsync & NFS using built-in Vagrant synced folders.
|
21
21
|
* Provision using built-in Vagrant provisioner.
|
22
22
|
* package your vm's into boxes.
|
23
|
-
*
|
23
|
+
* Create additional network interfaces, set nic type, MAC addresses, static IPs.
|
24
24
|
* Use Vagrants Set IP addresses on network interfaces feature. (private_network, public_network)
|
25
|
+
* Disks provisioned using thin, thick or eagerzeroedthick.
|
26
|
+
* Specify GuestOS types, virtual HW version, or any custom vmx settings.
|
25
27
|
|
26
28
|
Requirements
|
27
29
|
------------
|
@@ -149,13 +151,6 @@ Vagrant.configure("2") do |config|
|
|
149
151
|
# IMPORTANT! Set the ESXi password or authentication method..
|
150
152
|
esxi.esxi_password = "prompt:"
|
151
153
|
|
152
|
-
# ESXi ssh keys. (This is depreciated!!!)
|
153
|
-
# The Default is to use system default ssh keys, However
|
154
|
-
# you can specify an array of keys here...
|
155
|
-
#
|
156
|
-
# *** Depreciated, use esxi_password = "key:" instead. ***
|
157
|
-
#esxi.esxi_private_keys = []
|
158
|
-
|
159
154
|
# SSH port.
|
160
155
|
# Default port 22.
|
161
156
|
#esxi.esxi_hostport = 22
|
@@ -196,6 +191,11 @@ Vagrant.configure("2") do |config|
|
|
196
191
|
# If it's not specified, the Default is to use the least used Disk Store.
|
197
192
|
#esxi.vm_disk_store = "DS_001"
|
198
193
|
|
194
|
+
# OPTIONAL. Specify a disk type.
|
195
|
+
# If unspecified, it will be set to "thin", Otherwise, you can set to:
|
196
|
+
# 'thin', 'thick', or 'eagerzeroedthick'
|
197
|
+
#esxo.vm_disk_type = "thick"
|
198
|
+
|
199
199
|
# OPTIONAL. Guest VM name to use.
|
200
200
|
# The Default will be automatically generated. It will be based on
|
201
201
|
# the vmname_prefix (see below), your hostname & username and path.
|
@@ -225,6 +225,36 @@ Vagrant.configure("2") do |config|
|
|
225
225
|
# Vagrant will NOT create a Resource pool it for you.
|
226
226
|
#esxi.resource_pool = "/Vagrant"
|
227
227
|
|
228
|
+
# RISKY. guestos
|
229
|
+
# if unspecified, the default will be generated by the OVFTool. Most
|
230
|
+
# of the time, you don't need to change this unless ovftool doesn't get
|
231
|
+
# the correct information from the box. See my page on supported guestos
|
232
|
+
# types for ESXI.
|
233
|
+
# https://github.com/josenk/vagrant-vmware-esxi/ESXi_guestos_types.md
|
234
|
+
#esxi.guestos = "centos7-64"
|
235
|
+
|
236
|
+
# OPTIONAL. virtualhw_version
|
237
|
+
# If unspecified, the default will be generated by the OVFTool. Most
|
238
|
+
# of the time, you don't need to change this unless you are using advanced
|
239
|
+
# custom vmx settings that require it.
|
240
|
+
# ESXi 6.5 supports these versions. 4,7,8,9,10,11,12 & 13.
|
241
|
+
#esxi.virtualhw_version = '11'
|
242
|
+
|
243
|
+
# RISKY. custom_vmx_settings
|
244
|
+
# You can specify an array of custom vmx settings to add (or to override
|
245
|
+
# existing settings). **** I don't do any validation, so if you
|
246
|
+
# make any errors, it will not be caught *** This is the place you would
|
247
|
+
# add any special settings you need in your vmx. (Like adding a USB, DVD
|
248
|
+
# CPU settings, etc...).
|
249
|
+
# ex vhv.enable = 'TRUE' will be appended, floppy0.presend = 'TRUE' will be modified
|
250
|
+
#esxi.custom_vmx_settings = [['vhv.enable','TRUE'], ['floppy0.present','TRUE']]
|
251
|
+
|
252
|
+
# OPTIONAL. lax
|
253
|
+
# If unspecified, the ovftool option --lax is disabled. If you are
|
254
|
+
# importing ovf boxes that generate errors, you may want to enable lax
|
255
|
+
# to convert the errors to warning. (then the import could succeed)
|
256
|
+
#esxi.lax = 'true'
|
257
|
+
|
228
258
|
# DANGEROUS! Allow Overwrite
|
229
259
|
# If unspecified, the default is to produce an error if overwriting
|
230
260
|
# vm's and packages.
|
@@ -259,7 +289,7 @@ Basic usage
|
|
259
289
|
Known issues with vmware_esxi
|
260
290
|
-----------------------------
|
261
291
|
* The boxes must have open-vm-tools or vmware-tools installed to properly transition to the "running" state.
|
262
|
-
* Invalid settings (bad IP address, netmask, MAC address) could cause 'vagrant up' to fail. Review your ESXi logs to help debug why it failed.
|
292
|
+
* Invalid settings (bad IP address, netmask, MAC address, custom_vmx_settings) could cause 'vagrant up' to fail. Review your ESXi logs to help debug why it failed.
|
263
293
|
* Cleanup doesn't always destroy a VM that has been partially built. Use the allow_overwrite = 'True' option if you need to force a rebuild, or delete the vm using the VSphere client.
|
264
294
|
* ovftool installer for windows doesn't put ovftool.exe in your path. You can manually set your path, or install ovftool in the \HashiCorp\Vagrant\bin directory.
|
265
295
|
* In general I find NFS synced folders a little "flaky"...
|
@@ -267,6 +297,13 @@ Known issues with vmware_esxi
|
|
267
297
|
|
268
298
|
Version History
|
269
299
|
---------------
|
300
|
+
* 1.5.0 Add support for:
|
301
|
+
Specify custom_vmx_settings (to add or modify vmx settings).
|
302
|
+
Specify Virtual HW version.
|
303
|
+
Allow $ in Password.
|
304
|
+
Disk types (thick, thin, eagerzeroedthick).
|
305
|
+
Specify a guestOS type (see list above).
|
306
|
+
Relaxed ovftool setting (--lax), to allow importing strange ovf boxes.
|
270
307
|
* 1.4.0 Add support to set MAC and IP addresses for network interfaces.
|
271
308
|
* 1.3.2 Fix, Don't timeout ssh connection when ovftool takes a long time to upload image.
|
272
309
|
* 1.3.0 Add support to get esxi password from env, from a file or prompt.
|
data/example_box/Vagrantfile
CHANGED
@@ -95,13 +95,6 @@ Vagrant.configure("2") do |config|
|
|
95
95
|
# IMPORTANT! Set the ESXi password or authentication method..
|
96
96
|
esxi.esxi_password = "prompt:"
|
97
97
|
|
98
|
-
# ESXi ssh keys. (This is depreciated!!!)
|
99
|
-
# The Default is to use system default ssh keys, However
|
100
|
-
# you can specify an array of keys here...
|
101
|
-
#
|
102
|
-
# *** Depreciated, use esxi_password = "key:" instead. ***
|
103
|
-
#esxi.esxi_private_keys = []
|
104
|
-
|
105
98
|
# SSH port.
|
106
99
|
# Default port 22.
|
107
100
|
#esxi.esxi_hostport = 22
|
@@ -171,6 +164,36 @@ Vagrant.configure("2") do |config|
|
|
171
164
|
# Vagrant will NOT create a Resource pool it for you.
|
172
165
|
#esxi.resource_pool = "/Vagrant"
|
173
166
|
|
167
|
+
# RISKY. guestos
|
168
|
+
# if unspecified, the default will be generated by the OVFTool. Most
|
169
|
+
# of the time, you don't need to change this unless ovftool doesn't get
|
170
|
+
# the correct information from the box. See my page on supported guestos
|
171
|
+
# types for ESXI.
|
172
|
+
# https://github.com/josenk/vagrant-vmware-esxi/ESXi_guestos_types.md
|
173
|
+
#esxi.guestos = "centos7-64"
|
174
|
+
|
175
|
+
# OPTIONAL. virtualhw_version
|
176
|
+
# If unspecified, the default will be generated by the OVFTool. Most
|
177
|
+
# of the time, you don't need to change this unless you are using advanced
|
178
|
+
# custom vmx settings that require it.
|
179
|
+
# ESXi 6.5 supports these versions. 4,7,8,9,10,11,12 & 13.
|
180
|
+
#esxi.virtualhw_version = '11'
|
181
|
+
|
182
|
+
# RISKY. custom_vmx_settings
|
183
|
+
# You can specify an array of custom vmx settings to add (or to override
|
184
|
+
# existing settings). **** I don't do any validation, so if you
|
185
|
+
# make any errors, it will not be caught *** This is the place you would
|
186
|
+
# add any special settings you need in your vmx. (Like adding a USB, DVD
|
187
|
+
# CPU settings, etc...).
|
188
|
+
# ex vhv.enable = 'TRUE' will be appended, floppy0.presend = 'TRUE' will be modified
|
189
|
+
#esxi.custom_vmx_settings = [['vhv.enable','TRUE'], ['floppy0.present','TRUE']]
|
190
|
+
|
191
|
+
# OPTIONAL. lax
|
192
|
+
# If unspecified, the ovftool option --lax is disabled. If you are
|
193
|
+
# importing ovf boxes that generate errors, you may want to enable lax
|
194
|
+
# to convert the errors to warning. (then the import could succeed)
|
195
|
+
#esxi.lax = 'true'
|
196
|
+
|
174
197
|
# DANGEROUS! Allow Overwrite
|
175
198
|
# If unspecified, the default is to produce an error if overwriting
|
176
199
|
# vm's and packages.
|
@@ -107,7 +107,7 @@ module VagrantPlugins
|
|
107
107
|
!config.vm_disk_store.nil?
|
108
108
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
109
109
|
message: 'WARNING : '\
|
110
|
-
"#{config.vm_disk_store} not "\
|
110
|
+
"Disk Store \"#{config.vm_disk_store}\" not "\
|
111
111
|
"found, using #{@guestvm_dsname}")
|
112
112
|
end
|
113
113
|
|
@@ -176,22 +176,46 @@ module VagrantPlugins
|
|
176
176
|
new_vmx_contents = ''
|
177
177
|
File.readlines(vmx_file).each do |line|
|
178
178
|
|
179
|
-
|
179
|
+
case line
|
180
|
+
when /^displayname =/i
|
180
181
|
new_vmx_contents << "displayname = \"#{guestvm_vmname}\"\n"
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
182
|
+
when /^memsize =/i
|
183
|
+
if desired_memsize.nil?
|
184
|
+
new_vmx_contents << line
|
185
|
+
else
|
186
|
+
new_vmx_contents << "memsize = \"#{desired_memsize}\"\n"
|
187
|
+
end
|
188
|
+
when /^numvcpus =/i
|
189
|
+
if desired_numvcpus.nil?
|
190
|
+
new_vmx_contents << line
|
191
|
+
else
|
192
|
+
new_vmx_contents << "numvcpus = \"#{desired_numvcpus}\"\n"
|
193
|
+
end
|
194
|
+
when /^ethernet[0-9]/i
|
195
|
+
# Do nothing, delete these lines, we'll fix it later.
|
196
|
+
when /^guestOS = /i
|
197
|
+
|
198
|
+
in_vmx_guestos = line.gsub(/^guestOS = /i, '').gsub(/\"/, '').strip
|
199
|
+
if config.guestos.nil?
|
200
|
+
config.guestos = in_vmx_guestos
|
201
|
+
new_vmx_contents << line
|
202
|
+
else
|
203
|
+
if config.supported_guestos.include? config.guestos.downcase
|
204
|
+
config.guestos = config.guestos.downcase.strip
|
205
|
+
new_vmx_contents << "guestOS = \"#{config.guestos}\"\n"
|
206
|
+
else
|
207
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
208
|
+
message: 'WARNING : '\
|
209
|
+
"GuestOS: #{config.guestos} not "\
|
210
|
+
"supported, using box/ovftool defaults")
|
211
|
+
config.guestos = in_vmx_guestos
|
212
|
+
new_vmx_contents << line
|
213
|
+
end
|
214
|
+
end
|
192
215
|
else
|
193
216
|
new_vmx_contents << line
|
194
217
|
end
|
218
|
+
|
195
219
|
end
|
196
220
|
|
197
221
|
# finalize vmx.
|
@@ -220,7 +244,7 @@ module VagrantPlugins
|
|
220
244
|
end
|
221
245
|
end
|
222
246
|
|
223
|
-
# Write new vmx file
|
247
|
+
# Write new vmx file on local filesystem
|
224
248
|
filename_only = File.basename vmx_file, '.vmx'
|
225
249
|
path_only = File.dirname vmx_file
|
226
250
|
new_vmx_file = "#{path_only}/ZZZZ_#{guestvm_vmname}.vmx"
|
@@ -231,7 +255,9 @@ module VagrantPlugins
|
|
231
255
|
}
|
232
256
|
|
233
257
|
#
|
234
|
-
#
|
258
|
+
# Do some validations, set defaults...
|
259
|
+
#
|
260
|
+
# Validate if using a Resource Pool
|
235
261
|
if config.resource_pool.is_a? String
|
236
262
|
if config.resource_pool =~ %r{^\/}
|
237
263
|
resource_pool = config.resource_pool
|
@@ -269,35 +295,69 @@ module VagrantPlugins
|
|
269
295
|
end
|
270
296
|
|
271
297
|
# Validate nic types
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
elsif config.nic_type =~ /e1000$/i
|
278
|
-
config.nic_type = 'e1000'
|
279
|
-
elsif config.nic_type =~ /e1000e$/i
|
280
|
-
config.nic_type = 'e1000e'
|
281
|
-
elsif config.nic_type =~ /vmxnet$/i
|
282
|
-
config.nic_type = 'vmxnet'
|
283
|
-
elsif config.nic_type =~ /vmxnet2$/i
|
284
|
-
config.nic_type = 'vmxnet2'
|
285
|
-
elsif config.nic_type =~ /vmxnet3$/i
|
286
|
-
config.nic_type = 'vmxnet3'
|
298
|
+
if config.nic_type.nil?
|
299
|
+
nic_type = nil
|
300
|
+
else
|
301
|
+
if config.supported_nic_types.include?(config.nic_type.downcase)
|
302
|
+
nic_type = config.nic_type.downcase
|
287
303
|
else
|
288
|
-
|
304
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
305
|
+
message: 'WARNING : '\
|
306
|
+
"NIC type: #{config.nic_type} not "\
|
307
|
+
"found, using ovftool defaults.")
|
308
|
+
nic_type = nil
|
289
309
|
end
|
290
310
|
end
|
291
311
|
|
292
|
-
|
293
|
-
#
|
294
|
-
# Display build summary
|
312
|
+
# Validate cpus and memory
|
295
313
|
numvcpus = new_vmx_contents.match(/^numvcpus =.*/i)
|
296
314
|
.to_s.gsub(/^numvcpus =/i, '').gsub(/\"/, '')
|
297
315
|
memsize = new_vmx_contents.match(/^memsize =.*/i)
|
298
316
|
.to_s.gsub(/^memsize =/i, '').gsub(/\"/, '')
|
299
|
-
|
300
|
-
|
317
|
+
|
318
|
+
# Validate disk types (thin, thick, etc...)
|
319
|
+
if config.vm_disk_type.nil?
|
320
|
+
vm_disk_type = "thin"
|
321
|
+
else
|
322
|
+
if config.supported_vm_disk_types.include? config.vm_disk_type.downcase
|
323
|
+
vm_disk_type = config.vm_disk_type.downcase
|
324
|
+
else
|
325
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
326
|
+
message: 'WARNING : '\
|
327
|
+
"Disk type: #{config.vm_disk_type} not "\
|
328
|
+
"found, using \"thin\"")
|
329
|
+
vm_disk_type = "thin"
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
# Validate virtual HW levels
|
334
|
+
unless config.virtualhw_version.nil?
|
335
|
+
if config.supported_virtualhw_versions.include? config.virtualhw_version.to_i
|
336
|
+
virtualhw_version = config.virtualhw_version.to_i.to_s
|
337
|
+
else
|
338
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
339
|
+
message: 'WARNING : '\
|
340
|
+
"Invalid virtualhw_version: #{config.virtualhw_version},"\
|
341
|
+
" using ovftool defaults")
|
342
|
+
virtualhw_version = nil
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
# Validate lax setting (use relaxed (--lax) ovftool option)
|
347
|
+
unless config.lax.nil?
|
348
|
+
if config.lax == 'True'
|
349
|
+
laxoption = '--lax'
|
350
|
+
else
|
351
|
+
laxoption = ''
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
|
356
|
+
#
|
357
|
+
# Print summary
|
358
|
+
#
|
359
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
360
|
+
message: "")
|
301
361
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
302
362
|
message: "ESXi host : #{config.esxi_hostname}")
|
303
363
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
@@ -306,23 +366,35 @@ module VagrantPlugins
|
|
306
366
|
message: "Box : #{env[:machine].box.name}")
|
307
367
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
308
368
|
message: "Box Ver : #{env[:machine].box.version}")
|
369
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
370
|
+
message: "Disk Store : #{@guestvm_dsname}")
|
371
|
+
unless virtualhw_version.nil?
|
372
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
373
|
+
message: "Virtual HW ver : #{virtualhw_version}")
|
374
|
+
end
|
309
375
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
310
376
|
message: "CPUS :#{numvcpus}")
|
311
377
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
312
378
|
message: "Memsize (MB) :#{memsize}")
|
313
379
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
314
|
-
message: "Guest OS type
|
315
|
-
|
316
|
-
|
380
|
+
message: "Guest OS type : #{config.guestos}")
|
381
|
+
unless config.vm_disk_type.nil?
|
382
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
383
|
+
message: "Disk Type : #{vm_disk_type}")
|
384
|
+
end
|
317
385
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
318
386
|
message: "Virtual Network : #{@guestvm_network[0..3]}")
|
319
387
|
unless config.mac_address[0].eql? ''
|
320
388
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
321
389
|
message: "Mac Address : #{config.mac_address}")
|
322
390
|
end
|
323
|
-
unless
|
391
|
+
unless nic_type.nil?
|
392
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
393
|
+
message: "Nic Type : #{nic_type}")
|
394
|
+
end
|
395
|
+
if config.lax == 'True'
|
324
396
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
325
|
-
message: "
|
397
|
+
message: "Relaxed (--lax) : #{config.lax}")
|
326
398
|
end
|
327
399
|
unless overwrite_opts.nil?
|
328
400
|
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
@@ -341,7 +413,7 @@ module VagrantPlugins
|
|
341
413
|
' install from http://www.vmware.com.'
|
342
414
|
end
|
343
415
|
ovf_cmd = "ovftool --noSSLVerify #{overwrite_opts} "\
|
344
|
-
"#{netOpts} -dm
|
416
|
+
"#{netOpts} -dm=#{vm_disk_type} #{laxoption} "\
|
345
417
|
"-ds=\"#{@guestvm_dsname}\" --name=\"#{guestvm_vmname}\" "\
|
346
418
|
"\"#{new_vmx_file}\" vi://#{config.esxi_username}:"\
|
347
419
|
"#{$encoded_esxi_password}@#{config.esxi_hostname}"\
|
@@ -408,28 +480,50 @@ module VagrantPlugins
|
|
408
480
|
esxi_orig_vmx_file = ssh.exec!("cat #{dst_vmx_file} 2>/dev/null")
|
409
481
|
if (config.debug =~ %r{vmx}i)
|
410
482
|
puts "orig vmx: #{esxi_orig_vmx_file}"
|
483
|
+
puts "\n\n"
|
411
484
|
end
|
412
485
|
if esxi_orig_vmx_file.exitstatus != 0
|
413
486
|
raise Errors::ESXiError,
|
414
487
|
message: "Unable to read #{dst_vmx_file}"
|
415
488
|
end
|
416
489
|
|
417
|
-
# read each line in vmx to
|
490
|
+
# read each line in vmx to customize
|
418
491
|
new_vmx_contents = ''
|
419
492
|
vmx_need_change_flag = false
|
420
493
|
esxi_orig_vmx_file.each_line do |line|
|
421
|
-
|
494
|
+
|
495
|
+
case line
|
496
|
+
|
497
|
+
# configure virtualHW ver
|
498
|
+
when /^virtualHW.version = /i
|
499
|
+
if virtualhw_version.nil?
|
500
|
+
new_vmx_contents << line
|
501
|
+
else
|
502
|
+
new_vmx_contents << "virtualHW.version = \"#{virtualhw_version}\"\n"
|
503
|
+
vmx_need_change_flag = true
|
504
|
+
end
|
505
|
+
|
506
|
+
when /^guestOS = /i
|
507
|
+
if config.guestos.nil?
|
508
|
+
new_vmx_contents << line
|
509
|
+
else
|
510
|
+
new_vmx_contents << "guestOS = \"#{config.guestos}\"\n"
|
511
|
+
vmx_need_change_flag = true
|
512
|
+
end
|
513
|
+
|
514
|
+
# configure mac and nic type.
|
515
|
+
when /^ethernet[0-9]/i
|
422
516
|
nicindex = line[8].to_i
|
423
517
|
if line.match(/^ethernet[0-9].networkName = /i)
|
424
518
|
new_vmx_contents << line
|
425
519
|
elsif line.match(/^ethernet0.virtualDev = /i)
|
426
520
|
# Update nic_type if it's set, otherwise, save eth0 nic_type
|
427
521
|
# for the remaining nics. (ovftool doesn't set it...)
|
428
|
-
if
|
429
|
-
|
522
|
+
if nic_type.nil?
|
523
|
+
nic_type = line.gsub(/ethernet0.virtualDev = /i, '').gsub('"', '').strip
|
430
524
|
new_vmx_contents << line
|
431
525
|
else
|
432
|
-
new_vmx_contents << line.gsub(/ = .*$/, " = \"#{
|
526
|
+
new_vmx_contents << line.gsub(/ = .*$/, " = \"#{nic_type}\"\n")
|
433
527
|
vmx_need_change_flag = true
|
434
528
|
end
|
435
529
|
elsif (line.match(/^ethernet[0-9].addressType = /i) &&
|
@@ -449,13 +543,27 @@ module VagrantPlugins
|
|
449
543
|
end
|
450
544
|
end
|
451
545
|
else
|
452
|
-
|
546
|
+
line_changed = false
|
547
|
+
if config.custom_vmx_settings.is_a? Array
|
548
|
+
env[:machine].provider_config.custom_vmx_settings.each do |k, v|
|
549
|
+
if line =~ /#{k} = /
|
550
|
+
new_vmx_contents << "#{k} = \"#{v}\"\n"
|
551
|
+
vmx_need_change_flag = true
|
552
|
+
line_changed = true
|
553
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
554
|
+
message: "Custom vmx : Modify #{k} = \"#{v}\"")
|
555
|
+
end
|
556
|
+
end
|
557
|
+
end
|
558
|
+
if line_changed == false
|
559
|
+
new_vmx_contents << line
|
560
|
+
end
|
453
561
|
end
|
454
562
|
end
|
455
563
|
|
456
564
|
# For all nics, configure nic_type and enable nics
|
457
|
-
if
|
458
|
-
|
565
|
+
if nic_type.nil?
|
566
|
+
nic_type = "e1000"
|
459
567
|
end
|
460
568
|
if config.virtual_network.is_a? Array
|
461
569
|
number_of_adapters = config.virtual_network.count
|
@@ -465,8 +573,8 @@ module VagrantPlugins
|
|
465
573
|
|
466
574
|
1.upto(number_of_adapters) do |index|
|
467
575
|
nic_index = index - 1
|
468
|
-
unless new_vmx_contents =~ /ethernet#{nic_index}.virtualDev = \"#{
|
469
|
-
new_vmx_contents << "ethernet#{nic_index}.virtualDev = \"#{
|
576
|
+
unless new_vmx_contents =~ /ethernet#{nic_index}.virtualDev = \"#{nic_type}\"/i
|
577
|
+
new_vmx_contents << "ethernet#{nic_index}.virtualDev = \"#{nic_type}\"\n"
|
470
578
|
vmx_need_change_flag = true
|
471
579
|
end
|
472
580
|
unless new_vmx_contents =~ /ethernet#{nic_index}.present = \"TRUE\"/i
|
@@ -475,11 +583,15 @@ module VagrantPlugins
|
|
475
583
|
end
|
476
584
|
end
|
477
585
|
|
478
|
-
# append custom_vmx_settings if
|
586
|
+
# append custom_vmx_settings if not yet in vmx
|
479
587
|
if config.custom_vmx_settings.is_a? Array
|
480
588
|
env[:machine].provider_config.custom_vmx_settings.each do |k, v|
|
481
|
-
new_vmx_contents
|
482
|
-
|
589
|
+
unless new_vmx_contents =~ /#{k} = /
|
590
|
+
new_vmx_contents << "#{k} = \"#{v}\"\n"
|
591
|
+
vmx_need_change_flag = true
|
592
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
593
|
+
message: "Custom vmx : Append #{k} = \"#{v}\"")
|
594
|
+
end
|
483
595
|
end
|
484
596
|
end
|
485
597
|
|
@@ -487,6 +599,7 @@ module VagrantPlugins
|
|
487
599
|
if vmx_need_change_flag == true
|
488
600
|
if (config.debug =~ %r{vmx}i)
|
489
601
|
puts "new vmx: #{new_vmx_contents}"
|
602
|
+
puts "\n\n"
|
490
603
|
end
|
491
604
|
r = ''
|
492
605
|
ssh.open_channel do |channel|
|
@@ -107,7 +107,8 @@ module VagrantPlugins
|
|
107
107
|
'&', '%26').gsub(':', '%3a').gsub(\
|
108
108
|
'/', '%2f').gsub('\\','%5c').gsub(\
|
109
109
|
'"', '%22').gsub('\'','%27').gsub(\
|
110
|
-
'*', '%2a').gsub('?', '%3f')
|
110
|
+
'*', '%2a').gsub('?', '%3f').gsub(\
|
111
|
+
'$', '%24')
|
111
112
|
|
112
113
|
@logger.info('vagrant-vmware-esxi, connect_esxi: esxi_private_keys: '\
|
113
114
|
"#{config.esxi_private_keys}")
|
@@ -67,14 +67,14 @@ module VagrantPlugins
|
|
67
67
|
ssh_execute_cmd << 'grep "uptimeSeconds ="|sed "s/^.*= //g"|sed s/,//g'
|
68
68
|
uptime = ssh.exec!(ssh_execute_cmd)
|
69
69
|
|
70
|
-
if ( r.length == 0 && uptime.to_i >
|
70
|
+
if ( r.length == 0 && uptime.to_i > 120)
|
71
71
|
ipaddress = r2.strip
|
72
72
|
else
|
73
73
|
ipaddress = r.strip
|
74
74
|
end
|
75
75
|
|
76
76
|
if (config.debug =~ %r{ip}i)
|
77
|
-
puts "ip1
|
77
|
+
puts "ip1 (prim):#{r.strip} ip2 (alt):#{r2.strip} Final: #{ipaddress}"
|
78
78
|
end
|
79
79
|
|
80
80
|
return nil if (ipaddress == '')
|
@@ -13,17 +13,26 @@ module VagrantPlugins
|
|
13
13
|
attr_accessor :private_key_path
|
14
14
|
attr_accessor :vmname
|
15
15
|
attr_accessor :vmname_prefix
|
16
|
+
attr_accessor :guestos
|
16
17
|
attr_accessor :vm_disk_store
|
18
|
+
attr_accessor :vm_disk_type
|
17
19
|
attr_accessor :virtual_network
|
18
20
|
attr_accessor :nic_type
|
19
21
|
attr_accessor :mac_address
|
20
22
|
attr_accessor :resource_pool
|
21
23
|
attr_accessor :memsize
|
22
24
|
attr_accessor :numvcpus
|
25
|
+
attr_accessor :virtualhw_version
|
23
26
|
attr_accessor :custom_vmx_settings
|
24
27
|
attr_accessor :allow_overwrite
|
25
28
|
attr_accessor :debug
|
29
|
+
attr_accessor :lax
|
26
30
|
attr_accessor :system_private_keys_path
|
31
|
+
attr_accessor :supported_virtualhw_versions
|
32
|
+
attr_accessor :supported_vm_disk_types
|
33
|
+
attr_accessor :supported_nic_types
|
34
|
+
attr_accessor :supported_guestos
|
35
|
+
|
27
36
|
def initialize
|
28
37
|
@esxi_hostname = nil
|
29
38
|
@esxi_hostport = 22
|
@@ -34,29 +43,206 @@ module VagrantPlugins
|
|
34
43
|
@private_key_path = UNSET_VALUE
|
35
44
|
@vmname = nil
|
36
45
|
@vmname_prefix = 'V-'
|
46
|
+
@guestos = nil
|
37
47
|
@vm_disk_store = nil
|
48
|
+
@vm_disk_type = nil
|
38
49
|
@virtual_network = nil
|
39
50
|
@nic_type = nil
|
40
51
|
@mac_address = ["","","",""]
|
41
52
|
@resource_pool = nil
|
42
53
|
@memsize = UNSET_VALUE
|
43
54
|
@numvcpus = UNSET_VALUE
|
55
|
+
@virtualhw_version = nil
|
44
56
|
@custom_vmx_settings = UNSET_VALUE
|
45
57
|
@allow_overwrite = 'False'
|
46
58
|
@debug = 'False'
|
59
|
+
@lax = 'False'
|
47
60
|
@system_private_keys_path = [
|
48
61
|
'~/.ssh/id_rsa',
|
49
62
|
'~/.ssh/id_ecdsa',
|
50
63
|
'~/.ssh/id_ed25519',
|
51
64
|
'~/.ssh/id_dsa'
|
52
65
|
]
|
66
|
+
@supported_virtualhw_versions = [
|
67
|
+
4,7,8,9,10,11,12,13
|
68
|
+
]
|
69
|
+
@supported_vm_disk_types = [
|
70
|
+
'thin',
|
71
|
+
'thick',
|
72
|
+
'eagerzeroedthick'
|
73
|
+
]
|
74
|
+
@supported_nic_types = [
|
75
|
+
'vlance',
|
76
|
+
'flexible',
|
77
|
+
'e1000',
|
78
|
+
'e1000e',
|
79
|
+
'vmxnet',
|
80
|
+
'vmxnet2',
|
81
|
+
'vmxnet3'
|
82
|
+
]
|
83
|
+
@supported_guestos = [
|
84
|
+
'asianux3-64',
|
85
|
+
'asianux3',
|
86
|
+
'asianux4-64',
|
87
|
+
'asianux4',
|
88
|
+
'asianux5-64',
|
89
|
+
'asianux7-64',
|
90
|
+
'centos6-64',
|
91
|
+
'centos-64',
|
92
|
+
'centos6',
|
93
|
+
'centos7-64',
|
94
|
+
'centos7',
|
95
|
+
'centos',
|
96
|
+
'coreos-64',
|
97
|
+
'darwin10-64',
|
98
|
+
'darwin10',
|
99
|
+
'darwin11-64',
|
100
|
+
'darwin11',
|
101
|
+
'darwin12-64',
|
102
|
+
'darwin13-64',
|
103
|
+
'darwin14-64',
|
104
|
+
'darwin15-64',
|
105
|
+
'darwin16-64',
|
106
|
+
'darwin-64',
|
107
|
+
'darwin',
|
108
|
+
'debian10-64',
|
109
|
+
'debian10',
|
110
|
+
'debian4-64',
|
111
|
+
'debian4',
|
112
|
+
'debian5-64',
|
113
|
+
'debian5',
|
114
|
+
'debian6-64',
|
115
|
+
'debian6',
|
116
|
+
'debian7-64',
|
117
|
+
'debian7',
|
118
|
+
'debian8-64',
|
119
|
+
'debian8',
|
120
|
+
'debian9-64',
|
121
|
+
'debian9',
|
122
|
+
'dos',
|
123
|
+
'eComStation2',
|
124
|
+
'eComStation',
|
125
|
+
'fedora-64',
|
126
|
+
'fedora',
|
127
|
+
'freebsd-64',
|
128
|
+
'freebsd',
|
129
|
+
'genericLinux',
|
130
|
+
'mandrake',
|
131
|
+
'mandriva-64',
|
132
|
+
'mandriva',
|
133
|
+
'netware4',
|
134
|
+
'netware5',
|
135
|
+
'netware6',
|
136
|
+
'nld9',
|
137
|
+
'oes',
|
138
|
+
'openServer5',
|
139
|
+
'openServer6',
|
140
|
+
'opensuse-64',
|
141
|
+
'opensuse',
|
142
|
+
'oracleLinux6-64',
|
143
|
+
'oracleLinux-64',
|
144
|
+
'oracleLinux6',
|
145
|
+
'oracleLinux7-64',
|
146
|
+
'oracleLinux7',
|
147
|
+
'oracleLinux',
|
148
|
+
'os2',
|
149
|
+
'other24xLinux-64',
|
150
|
+
'other24xLinux',
|
151
|
+
'other26xLinux-64',
|
152
|
+
'other26xLinux',
|
153
|
+
'other3xLinux-64',
|
154
|
+
'other3xLinux',
|
155
|
+
'other',
|
156
|
+
'otherGuest-64',
|
157
|
+
'otherLinux-64',
|
158
|
+
'otherLinux',
|
159
|
+
'redhat',
|
160
|
+
'rhel2',
|
161
|
+
'rhel3-64',
|
162
|
+
'rhel3',
|
163
|
+
'rhel4-64',
|
164
|
+
'rhel4',
|
165
|
+
'rhel5-64',
|
166
|
+
'rhel5',
|
167
|
+
'rhel6-64',
|
168
|
+
'rhel6',
|
169
|
+
'rhel7-64',
|
170
|
+
'rhel7',
|
171
|
+
'sjds',
|
172
|
+
'sles10-64',
|
173
|
+
'sles10',
|
174
|
+
'sles11-64',
|
175
|
+
'sles11',
|
176
|
+
'sles12-64',
|
177
|
+
'sles12',
|
178
|
+
'sles-64',
|
179
|
+
'sles',
|
180
|
+
'solaris10-64',
|
181
|
+
'solaris10',
|
182
|
+
'solaris11-64',
|
183
|
+
'solaris6',
|
184
|
+
'solaris7',
|
185
|
+
'solaris8',
|
186
|
+
'solaris9',
|
187
|
+
'suse-64',
|
188
|
+
'suse',
|
189
|
+
'turboLinux-64',
|
190
|
+
'turboLinux',
|
191
|
+
'ubuntu-64',
|
192
|
+
'ubuntu',
|
193
|
+
'unixWare7',
|
194
|
+
'vmkernel5',
|
195
|
+
'vmkernel65',
|
196
|
+
'vmkernel6',
|
197
|
+
'vmkernel',
|
198
|
+
'vmwarePhoton-64',
|
199
|
+
'win2000AdvServ',
|
200
|
+
'win2000Pro',
|
201
|
+
'win2000Serv',
|
202
|
+
'win31',
|
203
|
+
'win95',
|
204
|
+
'win98',
|
205
|
+
'windows7-64',
|
206
|
+
'windows7',
|
207
|
+
'windows7Server-64',
|
208
|
+
'windows8-64',
|
209
|
+
'windows8',
|
210
|
+
'windows8Server-64',
|
211
|
+
'windows9-64',
|
212
|
+
'windows9',
|
213
|
+
'windows9Server-64',
|
214
|
+
'windowsHyperV',
|
215
|
+
'winLonghorn-64',
|
216
|
+
'winLonghorn',
|
217
|
+
'winMe',
|
218
|
+
'winNetBusiness',
|
219
|
+
'winNetDatacenter-64',
|
220
|
+
'winNetDatacenter',
|
221
|
+
'winNetEnterprise-64',
|
222
|
+
'winNetEnterprise',
|
223
|
+
'winNetStandard-64',
|
224
|
+
'winNetStandard',
|
225
|
+
'winNetWeb',
|
226
|
+
'winNT',
|
227
|
+
'winVista-64',
|
228
|
+
'winVista',
|
229
|
+
'winXPHome',
|
230
|
+
'winXPPro-64',
|
231
|
+
'winXPPro'
|
232
|
+
]
|
53
233
|
end
|
54
234
|
|
55
235
|
def finalize!
|
56
236
|
@private_key_path = nil if @private_key_path == UNSET_VALUE
|
57
237
|
@ssh_username = nil if @ssh_username == UNSET_VALUE
|
58
238
|
@esxi_private_keys = @system_private_keys_path if @esxi_private_keys == UNSET_VALUE
|
59
|
-
|
239
|
+
if @lax =~ /true/i
|
240
|
+
@lax = 'True'
|
241
|
+
else
|
242
|
+
@lax = 'False'
|
243
|
+
@virtualhw_version = @virtualhw_version.to_i unless @virtualhw_version.nil?
|
244
|
+
end
|
245
|
+
end
|
60
246
|
end
|
61
247
|
end
|
62
248
|
end
|
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-01-
|
6
|
+
s.date = '2018-01-23'
|
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: 1.
|
4
|
+
version: 1.5.0
|
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-01-
|
11
|
+
date: 2018-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|