vagrant-vmware-esxi 1.2.1 → 1.3.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: '038a1ea82c5af283f14aec64af6772ce14ab4a4c'
4
- data.tar.gz: ddf92761c6a4c8156306c2584bf0f4996ad3ac88
3
+ metadata.gz: e6c1b544be5e69be9aad5aa1d1eb7f7e47097f83
4
+ data.tar.gz: 5cfd76a90f5f9a1a5fc8989b7a32b69b214a010d
5
5
  SHA512:
6
- metadata.gz: 72258bd912e1a2c306d18033929378867137a4d84d9e6719ac1931c0fbf022ce82073c24db07d53a96db9c78f170bf19dc6df1e5ab891eae758497cc49240e90
7
- data.tar.gz: 36b7980ccebfbbc75a5012b791430dce5d88cb519ce515a25071c4600173453ece226241f6117b7c78a116d996ee8b1b8b214568e4e50b4ce703bfb48126e581
6
+ metadata.gz: a288fc3eb3823e2763cf55d720889a87456cce474535a23233cfc0372f47aae956201df6de80fb0487fe0b09a7bbc3565704335909b96dc83a5b6861fffd3c9b
7
+ data.tar.gz: 2dedd6fbc8d32a7b5c1d7f5d20b2214fbc27dfd2a4124552e685067a5429d1e493ed3064331a631c8781eab00e9f10a062b3fdd41945f18aad236bfa8954ce3d
data/README.md CHANGED
@@ -85,44 +85,69 @@ Vagrant.configure("2") do |config|
85
85
  esxi.esxi_username = "root"
86
86
 
87
87
  #
88
- # A NOTE about esxi_password / ssh keys!!
88
+ # IMPORTANT! ESXi password.
89
+ # *** NOTES about esxi_password & ssh keys!! ***
90
+ #
91
+ # 1) "prompt:"
92
+ # This will prompt you for the esxi password each time you
93
+ # run a vagrant command. This is the default.
94
+ #
95
+ # 2) "file:" or "file:my_secret_file"
96
+ # This will read a plain text file containing the esxi
97
+ # password. The default filename is ~/.esxi_password, or
98
+ # you can specify any filename after the colon ":".
99
+ #
100
+ # 3) "env:" or "env:my_secret_env_var"
101
+ # This will read the esxi password via a environment
102
+ # variable. The default is $esxi_password, but you can
103
+ # specify any environment variable after the colon ":".
104
+ #
105
+ # $ export esxi_password="my_secret_password"
89
106
  #
90
- # If you don't specify a password and do not use ssh
91
- # keys, you will be entering your esxi password A LOT!
107
+ # 4) "key:" or key:~/.ssh/some_ssh_private_key"
108
+ # Use ssh keys. The default is to use the system private keys,
109
+ # or you specify a custom private key after the colon ":".
92
110
  #
93
- # From your command line, you should be able to run
94
- # following command without an error and be able to get to
95
- # the esxi command prompt.
111
+ # To test connectivity. From your command line, you should be able to
112
+ # run following command without an error and get an esxi prompt.
96
113
  #
97
- # $ ssh root@ESXi_IP_ADDRESS
114
+ # $ ssh root@ESXi_IP_ADDRESS
115
+ #
116
+ # The ssh connections to esxi will try the ssh private
117
+ # keys. However the ovftool does NOT! To make
118
+ # vagrant fully password-less, you will need to use other
119
+ # options. (set the passord, use "env:" or "file:")
120
+ #
121
+ # 5) esxi.esxi_password = "my_esxi_password"
122
+ # Enter your esxi passowrd in clear text here... This is the
123
+ # least secure method because you may share this Vagrant file without
124
+ # realizing the password is in clear text.
125
+ #
126
+ # IMPORTANT! Set the ESXi password or authentication method..
127
+ esxi.esxi_password = "prompt:"
98
128
 
99
- # IMPORTANT! ESXi password.
100
- # The ssh connections to esxi will try your ssh
101
- # keys first. However the ovftool does NOT! To make
102
- # vagrant up fully password-less, you will need to
103
- # enter your password here....
104
- esxi.esxi_password = nil
105
-
106
- # ESXi ssh keys
107
- # The Default is to use system defaults, However
129
+ # ESXi ssh keys. (This is depreciated!!!)
130
+ # The Default is to use system default ssh keys, However
108
131
  # you can specify an array of keys here...
132
+ #
133
+ # *** Depreciated, use esxi_password = "key:" instead. ***
109
134
  #esxi.esxi_private_keys = []
110
135
 
111
136
  # SSH port.
112
- # Default port 22
137
+ # Default port 22.
113
138
  #esxi.esxi_hostport = 22
114
139
 
115
140
  # HIGHLY RECOMMENDED! Virtual Network
116
- # You should specify a Virtual Network!
117
- # The default is to use the first found!
141
+ # You should specify a Virtual Network! If it's not specified, the
142
+ # default is to use the first found.
118
143
  # You can specify up to 4 virtual networks using an array
119
- # format. Note that Vagrant only looks at the first
120
- # interface for an IP address.
144
+ # format. Note that Vagrant only looks at the first
145
+ # interface for a valid IP address.
121
146
  #esxi.virtual_network = "vmnet_example"
122
147
  #esxi.virtual_network = ["vmnet1","vmnet2","vmnet3","vmnet4"]
123
148
 
124
149
  # OPTIONAL. Specify a Disk Store
125
- # The Default is to use the least used Disk Store.
150
+ # If it's not specified, the Default is to use the least used Disk Store.
126
151
  #esxi.vm_disk_store = "DS_001"
127
152
 
128
153
  # OPTIONAL. Guest VM name to be created/used.
@@ -142,20 +167,22 @@ Vagrant.configure("2") do |config|
142
167
  #esxi.memsize = "2048"
143
168
 
144
169
  # OPTIONAL. Virtual CPUs override
145
- # The default is to use the number of virt cpus specified
170
+ # The default is to use the number of virtual cpus specified
146
171
  # in the vmx file, however you can specify a new value here.
147
172
  #esxi.numvcpus = "2"
148
173
 
149
174
  # OPTIONAL. Resource Pool
150
- # The default is to create VMs in the "root". You can
151
- # specify a resource pool here to partition memory and
152
- # cpu usage away from other systems on your esxi host.
153
- # The resource pool must already exist and have the
154
- # proper permissions set.
175
+ # If unspecified, the default is to create VMs in the "root". You can
176
+ # specify a resource pool here to partition memory and cpu usage away
177
+ # from other systems on your esxi host. The resource pool must
178
+ # already exist and have the proper permissions set.
179
+ #
155
180
  # Vagrant will NOT create a Resource pool it for you.
156
181
  #esxi.resource_pool = "/Vagrant"
157
182
 
158
183
  # DANGEROUS! Allow Overwrite
184
+ # If unspecified, the default is to produce an error if overwriting
185
+ # vm's and packages.
159
186
  # Set this to 'True' will overwrite existing VMs (with the same name)
160
187
  # when you run vagrant up. ie, if the vmname already exists,
161
188
  # it will be destroyed, then over written... This is helpful
@@ -178,6 +205,7 @@ Basic usage
178
205
  * `vagrant resume`
179
206
  * `vagrant snapshot push`
180
207
  * `vagrant snapshot list`
208
+ * `vagrant snapshot-info`
181
209
  * `vagrant snapshot pop`
182
210
  * `vagrant halt`
183
211
  * `vagrant provision`
@@ -189,12 +217,13 @@ Known issues with vmware_esxi
189
217
  * 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.
190
218
  * 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.
191
219
  * Built-in Vagrant synced folders using NFS fails if you try to re-provision.
192
- * In general I find NFS synced folders pretty "flakey" anyways...
220
+ * In general I find NFS synced folders pretty "flaky" anyways...
193
221
  * Multi machines may not provision one VM if the boxes are different.
194
222
  * I found this problem with libvirt also, so I'm assuming it's a vagrant problem...
195
223
 
196
224
  Version History
197
225
  ---------------
226
+ * 1.3.0 Add support to get esxi password from env, from a file or prompt.
198
227
  * 1.2.1 Encode special characters in password.
199
228
  * 1.2.0 Add support for up to 4 virtual networks.
200
229
  * 1.7.1 Show all port groups for each virtual switch instead of just the first.
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
1
  require "rubygems"
2
2
  require "bundler/gem_tasks"
3
- require "net/ssh/simple"
3
+ require "net/ssh"
4
4
  Bundler::GemHelper.install_tasks
@@ -19,7 +19,7 @@ Vagrant.configure("2") do |config|
19
19
  #config.vm.box = 'generic/alpine36'
20
20
 
21
21
 
22
- # Supports type rsync and NFS.
22
+ # Synced folders supports type rsync and NFS.
23
23
  config.vm.synced_folder('.', '/Vagrantfiles', type: 'rsync')
24
24
 
25
25
  #
@@ -37,27 +37,52 @@ Vagrant.configure("2") do |config|
37
37
  esxi.esxi_username = "root"
38
38
 
39
39
  #
40
- # A NOTE about esxi_password / ssh keys!!
40
+ # IMPORTANT! ESXi password.
41
+ # *** NOTES about esxi_password & ssh keys!! ***
42
+ #
43
+ # 1) esxi.esxi_password = "my_esxi_password"
44
+ # Enter your esxi passowrd in clear text here...
45
+ #
46
+ # 2) "key:" or "" or "key:~/.ssh/some_ssh_private_key"
47
+ # Use ssh keys. The default is to use the system private keys,
48
+ # or you specify a custom private key after the colon ":".
49
+ #
50
+ # From your command line, you should be able to run
51
+ # following command without an error and be able to get to
52
+ # the esxi command prompt.
53
+ #
54
+ # $ ssh root@ESXi_IP_ADDRESS
55
+ #
56
+ # The ssh connections to esxi will try the ssh private
57
+ # keys. However the ovftool does NOT! To make
58
+ # vagrant fully password-less, you will need to use other
59
+ # options. (set the passord, use "env:" or "file:")
41
60
  #
42
- # If you don't specify a password and do not use ssh
43
- # keys, you will be entering your esxi password A LOT!
61
+ # 3) "prompt:"
62
+ # This will prompt you for the esxi password each time you
63
+ # run a vagrant command.
44
64
  #
45
- # From your command line, you should be able to run
46
- # following command without an error and be able to get to
47
- # the esxi command prompt.
65
+ # 4) "file:" or "file:my_secret_file"
66
+ # This will read a plain text file containing the esxi
67
+ # password. The default filename is ~/.esxi_password, or
68
+ # you can specify any filename after the colon ":".
48
69
  #
49
- # $ ssh root@ESXi_IP_ADDRESS
70
+ # 5) "env:" or "env:my_secret_env_var"
71
+ # This will read the esxi password via a environment
72
+ # variable. The default is $esxi_password, but you can
73
+ # specify any environment variable after the colon ":".
74
+ #
75
+ # $ export esxi_password="my_secret_password"
76
+ #
77
+ #
78
+ # IMPORTANT! Set the ESXi password.
79
+ esxi.esxi_password = "prompt:"
50
80
 
51
- # IMPORTANT! ESXi password.
52
- # The ssh connections to esxi will try your ssh
53
- # keys first. However the ovftool does NOT! To make
54
- # vagrant up fully password-less, you will need to
55
- # enter your password here....
56
- esxi.esxi_password = nil
57
-
58
- # ESXi ssh keys
59
- # The Default is to use system defaults, However
81
+ # ESXi ssh keys. (This will be depreciated!!!)
82
+ # The Default is to use system default ssh keys, However
60
83
  # you can specify an array of keys here...
84
+ #
85
+ # *** Depreciated, use esxi_password = "key:" instead. ***
61
86
  #esxi.esxi_private_keys = []
62
87
 
63
88
  # SSH port.
@@ -22,7 +22,7 @@ Vagrant.configure("2") do |config|
22
22
  #
23
23
  esxi.esxi_hostname = "esxi"
24
24
  esxi.esxi_username = "root"
25
- esxi.esxi_password = nil
25
+ esxi.esxi_password = "file:"
26
26
  #esxi.esxi_private_keys = []
27
27
  #esxi.esxi_hostport = 22
28
28
  #esxi.virtual_network = "vmnet_example"
@@ -5,14 +5,10 @@ module VagrantPlugins
5
5
  # actions and how to run them
6
6
  module Action
7
7
  include Vagrant::Action::Builtin
8
- def self.action_connect_esxi
9
- Vagrant::Action::Builder.new.tap do |b|
10
- b.use ConnectESXi
11
- end
12
- end
13
8
 
14
9
  def self.action_read_state
15
10
  Vagrant::Action::Builder.new.tap do |b|
11
+ b.use SetESXiPassword
16
12
  b.use ReadSSHInfo
17
13
  b.use ReadState
18
14
  end
@@ -20,12 +16,14 @@ module VagrantPlugins
20
16
 
21
17
  def self.action_read_ssh_info
22
18
  Vagrant::Action::Builder.new.tap do |b|
19
+ b.use SetESXiPassword
23
20
  b.use ReadSSHInfo
24
21
  end
25
22
  end
26
23
 
27
24
  def self.action_halt
28
25
  Vagrant::Action::Builder.new.tap do |b|
26
+ b.use SetESXiPassword
29
27
  b.use ReadState
30
28
  b.use Halt
31
29
  end
@@ -33,6 +31,7 @@ module VagrantPlugins
33
31
 
34
32
  def self.action_suspend
35
33
  Vagrant::Action::Builder.new.tap do |b|
34
+ b.use SetESXiPassword
36
35
  b.use ReadState
37
36
  b.use Suspend
38
37
  end
@@ -40,6 +39,7 @@ module VagrantPlugins
40
39
 
41
40
  def self.action_resume
42
41
  Vagrant::Action::Builder.new.tap do |b|
42
+ b.use SetESXiPassword
43
43
  b.use ReadState
44
44
  b.use Resume
45
45
  end
@@ -47,6 +47,7 @@ module VagrantPlugins
47
47
 
48
48
  def self.action_ssh
49
49
  Vagrant::Action::Builder.new.tap do |b|
50
+ b.use SetESXiPassword
50
51
  b.use ReadState
51
52
  b.use ReadSSHInfo
52
53
  b.use SSHExec
@@ -56,24 +57,28 @@ module VagrantPlugins
56
57
 
57
58
  def self.action_snapshot_list
58
59
  Vagrant::Action::Builder.new.tap do |b|
60
+ b.use SetESXiPassword
59
61
  b.use SnapshotList
60
62
  end
61
63
  end
62
64
 
63
65
  def self.action_snapshot_info
64
66
  Vagrant::Action::Builder.new.tap do |b|
67
+ b.use SetESXiPassword
65
68
  b.use SnapshotInfo
66
69
  end
67
70
  end
68
71
 
69
72
  def self.action_snapshot_save
70
73
  Vagrant::Action::Builder.new.tap do |b|
74
+ b.use SetESXiPassword
71
75
  b.use SnapshotSave
72
76
  end
73
77
  end
74
78
 
75
79
  def self.action_snapshot_restore
76
80
  Vagrant::Action::Builder.new.tap do |b|
81
+ b.use SetESXiPassword
77
82
  b.use action_halt
78
83
  b.use Call, WaitForState, :powered_off, 240 do |env1, b1|
79
84
  if env1[:result] == 'True'
@@ -86,6 +91,7 @@ module VagrantPlugins
86
91
 
87
92
  def self.action_snapshot_delete
88
93
  Vagrant::Action::Builder.new.tap do |b|
94
+ b.use SetESXiPassword
89
95
  b.use SnapshotDelete
90
96
  end
91
97
  end
@@ -93,6 +99,7 @@ module VagrantPlugins
93
99
 
94
100
  def self.action_destroy
95
101
  Vagrant::Action::Builder.new.tap do |b|
102
+ b.use SetESXiPassword
96
103
  b.use Call, ReadState do |env1, b1|
97
104
  unless env1[:machine_state] == 'powered_off'
98
105
  b1.use action_halt
@@ -105,6 +112,7 @@ module VagrantPlugins
105
112
 
106
113
  def self.action_reload
107
114
  Vagrant::Action::Builder.new.tap do |b|
115
+ b.use SetESXiPassword
108
116
  b.use Call, ReadState do |env1, b1|
109
117
  if (env1[:machine_state].to_s == 'powered_on') ||
110
118
  (env1[:machine_state].to_s == 'running') ||
@@ -118,8 +126,8 @@ module VagrantPlugins
118
126
 
119
127
  def self.action_up
120
128
  Vagrant::Action::Builder.new.tap do |b|
129
+ b.use SetESXiPassword
121
130
  b.use ConfigValidate
122
- b.use ConnectESXi
123
131
  b.use HandleBox
124
132
  b.use ReadState
125
133
  b.use CreateVM
@@ -135,6 +143,7 @@ module VagrantPlugins
135
143
 
136
144
  def self.action_provision
137
145
  Vagrant::Action::Builder.new.tap do |b|
146
+ b.use SetESXiPassword
138
147
  b.use ReadState
139
148
  b.use Call, WaitForState, :running, 240 do |env1, b1|
140
149
  if env1[:result] == 'True'
@@ -149,13 +158,14 @@ module VagrantPlugins
149
158
 
150
159
  def self.action_package
151
160
  Vagrant::Action::Builder.new.tap do |b|
161
+ b.use SetESXiPassword
152
162
  b.use ReadState
153
163
  b.use Package
154
164
  end
155
165
  end
156
166
 
157
167
  action_root = Pathname.new(File.expand_path('../action', __FILE__))
158
- autoload :ConnectESXi, action_root.join('connect_esxi')
168
+ autoload :SetESXiPassword, action_root.join('esxi_password')
159
169
  autoload :CreateVM, action_root.join('createvm')
160
170
  autoload :ReadState, action_root.join('read_state')
161
171
  autoload :ReadSSHInfo, action_root.join('read_ssh_info')
@@ -1,5 +1,5 @@
1
1
  require 'log4r'
2
- require 'net/ssh/simple'
2
+ require 'net/ssh'
3
3
 
4
4
  module VagrantPlugins
5
5
  module ESXi
@@ -34,19 +34,20 @@ module VagrantPlugins
34
34
  env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
35
35
  message: 'Cannot boot in this state')
36
36
  else
37
- Net::SSH::Simple.sync(
38
- user: config.esxi_username,
39
- password: config.esxi_password,
40
- port: config.esxi_hostport,
41
- keys: config.esxi_private_keys
42
- ) do
37
+ Net::SSH.start( config.esxi_hostname, config.esxi_username,
38
+ password: $esxi_password,
39
+ port: config.esxi_hostport,
40
+ keys: config.esxi_private_keys,
41
+ timeout: 10,
42
+ number_of_password_prompts: 0,
43
+ non_interactive: true
44
+ ) do |ssh|
43
45
 
44
- r = ssh config.esxi_hostname,
45
- "vim-cmd vmsvc/power.on #{machine.id}"
46
- if r.exit_code != 0
46
+ r = ssh.exec!("vim-cmd vmsvc/power.on #{machine.id}")
47
+ if r.exitstatus != 0
47
48
  raise Errors::ESXiError,
48
49
  message: "Unable to power on VM:\n"\
49
- " #{r.stdout}\n#{r.stderr}"
50
+ " #{r}"
50
51
  end
51
52
  env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
52
53
  message: 'VM has been Powered On...')
@@ -1,11 +1,11 @@
1
1
  require 'log4r'
2
- require 'net/ssh/simple'
2
+ require 'net/ssh'
3
3
 
4
4
  module VagrantPlugins
5
5
  module ESXi
6
6
  module Action
7
- # This action connects to the ESXi, verifies credentials and
8
- # validates if it's a ESXi host
7
+ # This action creates a new vmx file (using overwrides from config file),
8
+ # then creates a new VM guest using ovftool.
9
9
  class CreateVM
10
10
  def initialize(app, _env)
11
11
  @app = app
@@ -64,27 +64,28 @@ module VagrantPlugins
64
64
  #
65
65
  # Open the network connection
66
66
  #
67
- Net::SSH::Simple.sync(
68
- user: config.esxi_username,
69
- password: config.esxi_password,
70
- port: config.esxi_hostport,
71
- keys: config.esxi_private_keys
72
- ) do
67
+ Net::SSH.start( config.esxi_hostname, config.esxi_username,
68
+ password: $esxi_password,
69
+ port: config.esxi_hostport,
70
+ keys: config.esxi_private_keys,
71
+ timeout: 10,
72
+ number_of_password_prompts: 0,
73
+ non_interactive: true
74
+ ) do |ssh|
73
75
 
74
76
  @logger = Log4r::Logger.new('vagrant_vmware_esxi::action::createvm-ssh')
75
77
 
76
78
  #
77
79
  # Figure out DataStore
78
- r = ssh config.esxi_hostname,
80
+ r = ssh.exec!(
79
81
  'df | grep "^[VMFS|NFS]" | sort -nk4 |'\
80
- 'sed "s|.*/vmfs/volumes/||g" | tail +2'
82
+ 'sed "s|.*/vmfs/volumes/||g" | tail +2')
81
83
 
82
- availvolumes = r.stdout.dup.split(/\n/)
83
- if (config.debug =~ %r{true}i) ||
84
- (config.debug =~ %r{yes}i)
84
+ availvolumes = r.split(/\n/)
85
+ if (config.debug =~ %r{true}i)
85
86
  puts "Available DS Volumes: #{availvolumes}"
86
87
  end
87
- if (r == '') || (r.exit_code != 0)
88
+ if (r == '') || (r.exitstatus != 0)
88
89
  raise Errors::ESXiError,
89
90
  message: 'Unable to get list of Disk Stores:'
90
91
  end
@@ -116,16 +117,15 @@ module VagrantPlugins
116
117
  #
117
118
  # Figure out network
118
119
  #
119
- r = ssh config.esxi_hostname,
120
+ r = ssh.exec!(
120
121
  'esxcli network vswitch standard list |'\
121
122
  'grep Portgroups | sed "s/^ Portgroups: //g" |'\
122
- 'sed "s/,./\n/g"'
123
- availnetworks = r.stdout.dup.split(/\n/)
124
- if (config.debug =~ %r{true}i) ||
125
- (config.debug =~ %r{yes}i)
123
+ 'sed "s/,./\n/g"')
124
+ availnetworks = r.split(/\n/)
125
+ if (config.debug =~ %r{true}i)
126
126
  puts "Available Networks: #{availnetworks}"
127
127
  end
128
- if (availnetworks == '') || (r.exit_code != 0)
128
+ if (availnetworks == '') || (r.exitstatus != 0)
129
129
  raise Errors::ESXiError,
130
130
  message: "Unable to get list of Virtual Networks:\n"\
131
131
  "#{r.stderr}"
@@ -202,14 +202,11 @@ module VagrantPlugins
202
202
  end
203
203
  end
204
204
 
205
- #unless new_vmx_contents =~ %r{^ethernet0.networkName =}i
206
- # new_vmx_contents << "ethernet0.networkName = \"#{guestvm_network}\"\n"
207
- #end
205
+ # Append virt network options
208
206
  netOpts = ""
209
207
  networkID = 0
210
208
  for element in guestvm_network do
211
- if (config.debug =~ %r{true}i) ||
212
- (config.debug =~ %r{yes}i)
209
+ if (config.debug =~ %r{true}i)
213
210
  puts "guestvm_network[#{networkID}]: #{element}"
214
211
  end
215
212
  new_vmx_contents << "ethernet#{networkID}.networkName = \"net#{networkID}\"\n"
@@ -222,6 +219,7 @@ module VagrantPlugins
222
219
  end
223
220
  end
224
221
 
222
+ # append custom_vmx_settings if exists
225
223
  if config.custom_vmx_settings.is_a? Array
226
224
  env[:machine].provider_config.custom_vmx_settings.each do |k, v|
227
225
  new_vmx_contents << "#{k} = \"#{v}\"\n"
@@ -286,19 +284,6 @@ module VagrantPlugins
286
284
  end
287
285
  env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
288
286
  message: "Resource Pool : #{resource_pool}")
289
- #
290
- # Encode special characters in PW
291
- #
292
- encoded_esxi_password = config.esxi_password.gsub('@', '%40').gsub(\
293
- '<', '%3c').gsub('>', '%3e').gsub(\
294
- '[', '%5b').gsub(']', '%5d').gsub(\
295
- '(', '%28').gsub(')', '%29').gsub(\
296
- '%', '%25').gsub('#', '%23').gsub(\
297
- '&', '%26').gsub(':', '%3a').gsub(\
298
- '/', '%2f').gsub('\\','%5c').gsub(\
299
- '"', '%22').gsub('\'','%27').gsub(\
300
- '*', '%2a').gsub('?', '%3f')
301
-
302
287
 
303
288
  #
304
289
  # Using ovftool, import vmx in box folder, export to ESXi server
@@ -313,32 +298,34 @@ module VagrantPlugins
313
298
  "#{netOpts} -dm=thin --powerOn "\
314
299
  "-ds=\"#{guestvm_dsname}\" --name=\"#{guestvm_vmname}\" "\
315
300
  "\"#{new_vmx_file}\" vi://#{config.esxi_username}:"\
316
- "#{encoded_esxi_password}@#{config.esxi_hostname}"\
301
+ "#{$encoded_esxi_password}@#{config.esxi_hostname}"\
317
302
  "#{resource_pool}"
318
303
 
319
304
  # Security bug if unremarked! Password will be exposed in log file.
320
- # @logger.info("vagrant-vmware-esxi, createvm: ovf_cmd #{ovf_cmd}")
321
- if (config.debug =~ %r{true}i) ||
322
- (config.debug =~ %r{yes}i)
323
- puts "ovftool command: #{ovf_cmd}"
305
+ if (config.debug =~ %r{password}i)
306
+ @logger.info("vagrant-vmware-esxi, createvm: ovf_cmd #{ovf_cmd}")
307
+ puts "ovftool command: #{ovf_cmd}"
308
+ end
309
+ if (config.debug =~ %r{true}i)
310
+ ovf_cmd_nopw = ovf_cmd.gsub(/#{$encoded_esxi_password}/, '******')
311
+ puts "ovftool command: #{ovf_cmd_nopw}"
324
312
  end
325
313
  unless system "#{ovf_cmd}"
326
314
  raise Errors::OVFToolError, message: ''
327
315
  end
328
316
 
329
- # VMX file is not needed any longer
330
- if (config.debug =~ %r{true}i) ||
331
- (config.debug =~ %r{yes}i)
317
+ # VMX file is not needed any longer. Delete it
318
+ if (config.debug =~ %r{true}i)
332
319
  puts "Keeping file: #{new_vmx_file}"
333
320
  else
334
321
  File.delete(new_vmx_file)
335
322
  end
336
323
 
337
- r = ssh config.esxi_hostname,
324
+ r = ssh.exec!(
338
325
  'vim-cmd vmsvc/getallvms |'\
339
- "grep \" #{guestvm_vmname} \"|awk '{print $1}'"
340
- vmid = r.stdout
341
- if (vmid == '') || (r.exit_code != 0)
326
+ "grep \" #{guestvm_vmname} \"|awk '{print $1}'")
327
+ vmid = r
328
+ if (vmid == '') || (r.exitstatus != 0)
342
329
  raise Errors::ESXiError,
343
330
  message: "Unable to register / start #{guestvm_vmname}"
344
331
  end