vagrant-vcenter 0.3.2 → 0.3.3

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: c18c66e41d889b3cce4ec5c4b9231dd011536073
4
- data.tar.gz: 3a6ac9901f9aef28ee9184557c73354da34d77e0
3
+ metadata.gz: 297064f386d506f98c1ee81b435f71e21afcce8c
4
+ data.tar.gz: ba4e9971b70a7d6394fbdde4091e30b00dd27501
5
5
  SHA512:
6
- metadata.gz: 6285240ba718d0588f6c50089feb1c601ae4d93c52263adfa4d3eb7f08d8354443de67650c1ccf3998cceeb0bb66d9716df7e0f074c3446b262bff8d7a441029
7
- data.tar.gz: dceb922f02df844874eb30396c925fa1b06b1e100f64025dd124ef4a040e8dd2e72b3c30b575c2c29ee99bb647c6afe3dad95f73da36a27770f2225140640788
6
+ metadata.gz: e5fafe134b920ce9c684671e3f107b7f4ee2599f43510f94275536f27b9c3435daf04e756ef152e5c8aedd461104def93841d7c800a4e3767723bb429d69608f
7
+ data.tar.gz: 271cebf64fbe9b780422dc2ed4a1d6c1d086e5824f2f453f8d82f1e70c24edba6dbb9da285c01878ef36291761399e749de6e20fed5d2450c314c80b060df497
@@ -0,0 +1 @@
1
+ 2.2.3
data/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  [Vagrant](http://www.vagrantup.com) provider for VMware vCenter®
2
2
  =============
3
3
 
4
- [Version 0.3.2](../../releases/tag/v0.3.2) has been released!
4
+ [![Join the chat at https://gitter.im/frapposelli/vagrant-vcenter](https://badges.gitter.im/frapposelli/vagrant-vcenter.svg)](https://gitter.im/frapposelli/vagrant-vcenter?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
5
+
6
+ [Version 0.3.3](../../releases/tag/v0.3.3) has been released!
5
7
  -------------
6
8
 
7
9
  Please note that this software is still Alpha/Beta quality and is not recommended for production usage.
@@ -10,6 +12,18 @@ We have a wide array of boxes available at [Vagrant Cloud](https://vagrantcloud.
10
12
 
11
13
  This plugin supports the universal [```vmware_ovf``` box format](https://github.com/gosddc/packer-post-processor-vagrant-vmware-ovf/wiki/vmware_ovf-Box-Format), that is 100% portable between [vagrant-vcloud](https://github.com/frapposelli/vagrant-vcloud), [vagrant-vcenter](https://github.com/gosddc/vagrant-vcenter) and [vagrant-vcloudair](https://github.com/gosddc/vagrant-vcloudair), no more double boxes!.
12
14
 
15
+ Changes in [version 0.3.3](../../releases/tag/v0.3.3) include:
16
+
17
+ Changes
18
+
19
+ - Configuration setting ```computer_name``` renamed to ```compute_name``` as this can be either a vSphere host or a Cluster name.
20
+
21
+ Fixes
22
+
23
+ - Better error management
24
+ - Fixed some commands in unwanted situations (SSH when machine suspended/off)
25
+ - Refactored code to avoid code duplication
26
+
13
27
  Install
14
28
  -------------
15
29
 
@@ -64,7 +78,7 @@ Vagrant.configure('2') do |config|
64
78
  vcenter.password = 'myPassword'
65
79
  vcenter.folder_name = 'myFolderName'
66
80
  vcenter.datacenter_name = 'MyDatacenterName'
67
- vcenter.computer_name = 'MyHostOrCluster'
81
+ vcenter.compute_name = 'MyHostOrCluster'
68
82
  vcenter.datastore_name = 'MyDatastore'
69
83
  vcenter.network_name = 'myNetworkName'
70
84
  vcenter.linked_clones = true
@@ -82,7 +96,7 @@ Vagrant.configure('2') do |config|
82
96
  gateway: '10.250.254.254',
83
97
  dns_server_list: ['8.8.4.4', '8.8.8.8'],
84
98
  dns_suffix_list: ['ad.lab.gosddc.com']
85
-
99
+
86
100
  # Let's override some provider settings for specific VMs
87
101
  node_config.vm.provider :vcenter do |override|
88
102
  # Override number of cpu and memory based on what's in the nodes array
@@ -116,4 +130,4 @@ What is still missing:
116
130
  - Some spaghetti code here and there.
117
131
  - Bugs, bugs and BUGS!.
118
132
 
119
- If you're a developer and want to lend us a hand, head over to our ```develop``` branch and send us PRs!
133
+ If you're a developer and want to lend us a hand, send us PRs!
data/Rakefile CHANGED
@@ -1,17 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
+ require 'bundler/gem_tasks'
3
4
  require 'rspec/core/rake_task'
4
5
 
5
- # Immediately sync all stdout so that tools like buildbot can
6
- # immediately load in the output.
7
- $stdout.sync = true
8
- $stderr.sync = true
9
-
10
- # Change to the y of this file.
11
- Dir.chdir(File.expand_path('../', __FILE__))
12
-
13
- Bundler::GemHelper.install_tasks
14
-
15
6
  RSpec::Core::RakeTask.new
16
-
17
- task :default => 'spec'
7
+ task :default => 'spec'
@@ -23,6 +23,7 @@ module VagrantPlugins
23
23
  Vagrant::Action::Builder.new.tap do |b|
24
24
  b.use ConfigValidate
25
25
  b.use ConnectvCenter
26
+ b.use InventoryCheck
26
27
  b.use Call, IsCreated do |env, b2|
27
28
  unless env[:result]
28
29
  b2.use MessageNotCreated
@@ -30,7 +31,6 @@ module VagrantPlugins
30
31
  end
31
32
  b2.use action_halt
32
33
  b2.use action_start
33
- b2.use DisconnectvCenter
34
34
  end
35
35
  end
36
36
  end
@@ -41,6 +41,7 @@ module VagrantPlugins
41
41
  Vagrant::Action::Builder.new.tap do |b|
42
42
  b.use ConfigValidate
43
43
  b.use ConnectvCenter
44
+ b.use InventoryCheck
44
45
  b.use Call, IsRunning do |env, b2|
45
46
  # If the VM is running, then our work here is done, exit
46
47
  if env[:result]
@@ -61,9 +62,16 @@ module VagrantPlugins
61
62
  def self.action_halt
62
63
  Vagrant::Action::Builder.new.tap do |b|
63
64
  b.use ConnectvCenter
65
+ b.use InventoryCheck
66
+
67
+ # If the VM suspend, Resume first
64
68
  b.use Call, IsPaused do |env, b2|
65
69
  b2.use Resume if env[:result]
66
- b2.use PowerOff
70
+
71
+ # Only halt when VM is running.
72
+ b2.use Call, IsRunning do |env2, b3|
73
+ b3.use PowerOff if env2[:result]
74
+ end
67
75
  end
68
76
  end
69
77
  end
@@ -71,6 +79,7 @@ module VagrantPlugins
71
79
  def self.action_suspend
72
80
  Vagrant::Action::Builder.new.tap do |b|
73
81
  b.use ConnectvCenter
82
+ b.use InventoryCheck
74
83
  b.use Call, IsRunning do |env, b2|
75
84
  # If the VM is stopped, can't suspend
76
85
  if !env[:result]
@@ -85,6 +94,7 @@ module VagrantPlugins
85
94
  def self.action_resume
86
95
  Vagrant::Action::Builder.new.tap do |b|
87
96
  b.use ConnectvCenter
97
+ b.use InventoryCheck
88
98
  b.use Resume
89
99
  end
90
100
  end
@@ -95,6 +105,7 @@ module VagrantPlugins
95
105
  if env[:result]
96
106
  b2.use ConfigValidate
97
107
  b2.use ConnectvCenter
108
+ b2.use InventoryCheck
98
109
  b2.use Call, IsCreated do |env2, b3|
99
110
  unless env2[:result]
100
111
  b3.use MessageNotCreated
@@ -110,6 +121,7 @@ module VagrantPlugins
110
121
  b2.use MessageWillNotDestroy
111
122
  end
112
123
  end
124
+ # b.use DisconnectvCenter
113
125
  end
114
126
  end
115
127
 
@@ -117,6 +129,7 @@ module VagrantPlugins
117
129
  Vagrant::Action::Builder.new.tap do |b|
118
130
  b.use ConfigValidate
119
131
  b.use ConnectvCenter
132
+ b.use InventoryCheck
120
133
  b.use Call, IsCreated do |env, b2|
121
134
  unless env[:result]
122
135
  b2.use MessageNotCreated
@@ -136,6 +149,7 @@ module VagrantPlugins
136
149
  Vagrant::Action::Builder.new.tap do |b|
137
150
  b.use ConfigValidate
138
151
  b.use ConnectvCenter
152
+ b.use InventoryCheck
139
153
  b.use ReadSSHInfo
140
154
  end
141
155
  end
@@ -147,6 +161,7 @@ module VagrantPlugins
147
161
  Vagrant::Action::Builder.new.tap do |b|
148
162
  b.use ConfigValidate
149
163
  b.use ConnectvCenter
164
+ b.use InventoryCheck
150
165
  b.use ReadState
151
166
  end
152
167
  end
@@ -155,6 +170,7 @@ module VagrantPlugins
155
170
  Vagrant::Action::Builder.new.tap do |b|
156
171
  b.use ConfigValidate
157
172
  b.use ConnectvCenter
173
+ b.use InventoryCheck
158
174
  b.use Call, IsCreated do |env, b2|
159
175
  unless env[:result]
160
176
  b2.use MessageNotCreated
@@ -169,6 +185,7 @@ module VagrantPlugins
169
185
  Vagrant::Action::Builder.new.tap do |b|
170
186
  b.use ConfigValidate
171
187
  b.use ConnectvCenter
188
+ b.use InventoryCheck
172
189
  b.use Call, IsCreated do |env, b2|
173
190
  unless env[:result]
174
191
  b2.use MessageNotCreated
@@ -182,10 +199,10 @@ module VagrantPlugins
182
199
  def self.action_up
183
200
  Vagrant::Action::Builder.new.tap do |b|
184
201
  b.use ConfigValidate
185
- b.use ConnectvCenter
186
202
  b.use Call, IsCreated do |env, b2|
187
203
  b2.use HandleBox unless env[:result]
188
204
  end
205
+ b.use ConnectvCenter
189
206
  b.use InventoryCheck
190
207
  b.use Call, IsCreated do |env, b2|
191
208
  b2.use BuildVM unless env[:result]
@@ -8,9 +8,16 @@ module VagrantPlugins
8
8
  end
9
9
 
10
10
  def call(env)
11
+ if env[:machine].state.id != :running
12
+ fail Errors::MachineNotRunning,
13
+ :machine_name => env[:machine].name
14
+ end
15
+
11
16
  ssh_info = env[:machine].ssh_info
12
- env[:ui].success('External IP for ' +
13
- "#{env[:machine].name}: #{ssh_info[:host]}")
17
+ env[:ui].success(
18
+ "External IP for #{env[:machine].name}: #{ssh_info[:host]}"
19
+ )
20
+
14
21
  super
15
22
  end
16
23
  end
@@ -1,6 +1,3 @@
1
- require 'securerandom'
2
- require 'etc'
3
-
4
1
  module VagrantPlugins
5
2
  module VCenter
6
3
  module Action
@@ -15,45 +12,36 @@ module VagrantPlugins
15
12
  # FIXME: we need to find a way to clean things up when a SIGINT get
16
13
  # called... see env[:interrupted] in the vagrant code
17
14
 
18
- config = env[:machine].provider_config
15
+ cfg = env[:machine].provider_config
19
16
  vm_name = env[:machine].name
20
17
 
21
- # FIXME: Raise a correct exception
22
- dc = config.vcenter_cnx.serviceInstance.find_datacenter(
23
- config.datacenter_name) or abort 'datacenter not found'
24
-
25
- if env[:machine].box.name.to_s.include? '/'
26
- box_file = env[:machine].box.name.rpartition('/').last.to_s
27
- box_name = env[:machine].box.name.to_s.gsub(/\//, '-')
18
+ if env[:machine].box.name.include? '/'
19
+ # box_file = env[:machine].box.name.rpartition('/').last
20
+ box_name = env[:machine].box.name.gsub(/\//, '-')
28
21
  else
29
- box_file = env[:machine].box.name.to_s
22
+ box_file = env[:machine].box.name
30
23
  box_name = box_file
31
24
  end
32
25
 
33
- if config.template_folder_name.nil?
26
+ if cfg.template_folder_name.nil?
34
27
  box_to_search = box_name
35
28
  else
36
- box_to_search = config.template_folder_name + '/' +
37
- box_name
29
+ box_to_search = cfg.template_folder_name + '/' + box_name
38
30
  end
39
31
 
40
- # FIXME: Raise a correct exception
41
- computer = dc.find_compute_resource(
42
- config.computer_name) or fail 'Host not found'
43
-
44
- if config.resourcepool_name
45
- rp = computer.resourcePool.resourcePool.find {
46
- |f| f.name == config.resourcepool_name
32
+ if cfg.resourcepool_name
33
+ cfg.compute_rp = compute.resourcePool.resourcePool.find {
34
+ |f| f.name == cfg.resourcepool_name
47
35
  }
48
36
  else
49
- rp = computer.resourcePool
37
+ cfg.compute_rp = cfg.compute.resourcePool
50
38
  end
51
39
 
52
- # FIXME: Raise a correct exception
53
- template = dc.find_vm(
54
- box_to_search) or abort 'VM not found'
40
+ template = cfg.datacenter.find_vm(box_to_search) or
41
+ fail Errors::VMNotFound,
42
+ :vm_name => box_to_search
55
43
 
56
- if config.linked_clones
44
+ if cfg.linked_clones
57
45
  @logger.debug('DOING LINKED CLONE!')
58
46
  # The API for linked clones is quite strange. We can't create a
59
47
  # linked straight from any VM. The disks of the VM for which we can
@@ -64,18 +52,20 @@ module VagrantPlugins
64
52
  # Thus, this code first create a delta disk on top of the base disk
65
53
  # for the to-be-cloned VM, if delta disks aren't used already.
66
54
  disks = template.config.hardware.device.grep(
67
- RbVmomi::VIM::VirtualDisk)
55
+ RbVmomi::VIM::VirtualDisk
56
+ )
57
+
68
58
  disks.select { |x| x.backing.parent.nil? }.each do |disk|
69
59
  spec = {
70
60
  :deviceChange => [
71
61
  {
72
- :operation => :remove,
73
- :device => disk
62
+ :operation => :remove,
63
+ :device => disk
74
64
  },
75
65
  {
76
- :operation => :add,
77
- :fileOperation => :create,
78
- :device => disk.dup.tap do |x|
66
+ :operation => :add,
67
+ :fileOperation => :create,
68
+ :device => disk.dup.tap do |x|
79
69
  x.backing = x.backing.dup
80
70
  x.backing.fileName = "[#{disk.backing.datastore.name}]"
81
71
  x.backing.parent = disk.backing
@@ -87,49 +77,57 @@ module VagrantPlugins
87
77
  end
88
78
 
89
79
  relocate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(
90
- :diskMoveType => :moveChildMostDiskBacking,
91
- :pool => rp)
80
+ :diskMoveType => :moveChildMostDiskBacking,
81
+ :pool => cfg.compute_rp
82
+ )
92
83
  else
93
84
  relocate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(
94
- :pool => rp)
85
+ :pool => cfg.compute_rp
86
+ )
95
87
  end
96
88
 
97
89
  @logger.debug("Relocate Spec: #{relocate_spec.pretty_inspect}")
98
90
 
99
91
  spec = RbVmomi::VIM.VirtualMachineCloneSpec(
100
- :location => relocate_spec,
101
- :powerOn => false,
102
- :template => false)
103
-
104
- if config.vm_network_name or config.num_cpu or config.memory
92
+ :location => relocate_spec,
93
+ :powerOn => false,
94
+ :template => false
95
+ )
96
+
97
+ if cfg.vm_network_name || cfg.num_cpu || cfg.memory
105
98
  config_spec = RbVmomi::VIM.VirtualMachineConfigSpec
106
- config_spec.numCPUs = config.num_cpu if config.num_cpu
107
- config_spec.memoryMB = config.memory if config.memory
108
-
109
- if config.vm_network_name
110
- # First we must find the specified network
111
- network = dc.network.find { |f| f.name == config.vm_network_name } or
112
- abort "Could not find network with name #{config.vm_network_name} to join vm to"
99
+ config_spec.numCPUs = cfg.num_cpu if cfg.num_cpu
100
+ config_spec.memoryMB = cfg.memory if cfg.memory
101
+
102
+ if cfg.vm_network_name
113
103
  card = template.config.hardware.device.grep(
114
- RbVmomi::VIM::VirtualEthernetCard).first or
115
- abort "could not find network card to customize"
116
- if config.vm_network_type == "DistributedVirtualSwitchPort"
117
- switch_port = RbVmomi::VIM.DistributedVirtualSwitchPortConnection(
118
- :switchUuid => network.config.distributedVirtualSwitch.uuid,
119
- :portgroupKey => network.key)
104
+ RbVmomi::VIM::VirtualEthernetCard
105
+ ).first or abort 'could not find network card to customize'
106
+
107
+ if cfg.vm_network_type == 'DistributedVirtualSwitchPort'
108
+ switch_port =
109
+ RbVmomi::VIM.DistributedVirtualSwitchPortConnection(
110
+ :switchUuid => cfg.network.config.distributedVirtualSwitch.uuid,
111
+ :portgroupKey => cfg.network.key
112
+ )
120
113
  card.backing = RbVmomi::VIM.VirtualEthernetCardDistributedVirtualPortBackingInfo(
121
- :port => switch_port)
122
- end
123
- dev_spec = RbVmomi::VIM.VirtualDeviceConfigSpec(:device => card, :operation => "edit")
114
+ :port => switch_port
115
+ )
116
+ end
117
+
118
+ dev_spec = RbVmomi::VIM.VirtualDeviceConfigSpec(
119
+ :device => card,
120
+ :operation => 'edit'
121
+ )
124
122
  config_spec.deviceChange = [dev_spec]
125
123
  end
126
124
 
127
125
  spec.config = config_spec
128
126
  end
129
127
 
130
- if config.enable_vm_customization
128
+ if cfg.enable_vm_customization
131
129
  public_networks = env[:machine].config.vm.networks.select {
132
- |n| n[0].eql? :public_network
130
+ |n| n[0].eql? :public_network
133
131
  }
134
132
 
135
133
  network_spec = public_networks.first[1] unless public_networks.empty?
@@ -137,70 +135,74 @@ module VagrantPlugins
137
135
  @logger.debug("This is our network #{public_networks.inspect}")
138
136
 
139
137
  if network_spec
140
-
141
138
  # Check for sanity and validation of network parameters.
142
-
143
- # Specify ip but no netmask
144
- if network_spec[:ip] && !network_spec[:netmask]
145
- fail Errors::WrongNetworkSpec
146
- end
147
-
148
- # specify netmask but no ip
149
- if !network_spec[:ip] && network_spec[:netmask]
139
+ if (network_spec[:ip] && !network_spec[:netmask]) ||
140
+ (!network_spec[:ip] && network_spec[:netmask])
150
141
  fail Errors::WrongNetworkSpec
151
142
  end
152
143
 
153
144
  global_ip_settings = RbVmomi::VIM.CustomizationGlobalIPSettings(
154
- :dnsServerList => network_spec[:dns_server_list],
155
- :dnsSuffixList => network_spec[:dns_suffix_list])
145
+ :dnsServerList => network_spec[:dns_server_list],
146
+ :dnsSuffixList => network_spec[:dns_suffix_list]
147
+ )
156
148
 
157
149
  # if no ip and no netmask, let's default to dhcp
158
150
  if !network_spec[:ip] && !network_spec[:netmask]
159
151
  adapter = RbVmomi::VIM.CustomizationIPSettings(
160
- :ip => RbVmomi::VIM.CustomizationDhcpIpGenerator())
152
+ :ip => RbVmomi::VIM.CustomizationDhcpIpGenerator()
153
+ )
161
154
  else
162
155
  adapter = RbVmomi::VIM.CustomizationIPSettings(
163
- :gateway => [network_spec[:gateway]],
164
- :ip => RbVmomi::VIM.CustomizationFixedIp(
165
- :ipAddress => network_spec[:ip]),
166
- :subnetMask => network_spec[:netmask])
156
+ :gateway => [network_spec[:gateway]],
157
+ :ip => RbVmomi::VIM.CustomizationFixedIp(
158
+ :ipAddress => network_spec[:ip]
159
+ ),
160
+ :subnetMask => network_spec[:netmask]
161
+ )
167
162
  end
168
163
 
169
- nic_map = [RbVmomi::VIM.CustomizationAdapterMapping(
170
- :adapter => adapter)]
164
+ nic_map = [
165
+ RbVmomi::VIM.CustomizationAdapterMapping(:adapter => adapter)
166
+ ]
171
167
  end
172
168
 
173
- if config.prep_type.downcase == 'linux'
169
+ if cfg.prep_type.downcase == 'linux'
174
170
  prep = RbVmomi::VIM.CustomizationLinuxPrep(
175
- :domain => env[:machine].name.to_s.sub(/^[^.]+\./, ''),
176
- :hostName => RbVmomi::VIM.CustomizationFixedName(
177
- :name => env[:machine].name.to_s.split('.')[0]))
178
- elsif config.prep_type.downcase == 'windows'
171
+ :domain => env[:machine].name.to_s.sub(/^[^.]+\./, ''),
172
+ :hostName => RbVmomi::VIM.CustomizationFixedName(
173
+ :name => env[:machine].name.to_s.split('.')[0]
174
+ )
175
+ )
176
+ elsif cfg.prep_type.downcase == 'windows'
179
177
  prep = RbVmomi::VIM.CustomizationSysprep(
180
- :guiUnattended => RbVmomi::VIM.CustomizationGuiUnattended(
181
- :autoLogon => false,
182
- :autoLogonCount => 0,
183
- :timeZone => 004
184
- ),
185
- :identification => RbVmomi::VIM.CustomizationIdentification(),
186
- :userData => RbVmomi::VIM.CustomizationUserData(
187
- :computerName => RbVmomi::VIM.CustomizationFixedName(
188
- :name => env[:machine].name.to_s.split('.')[0]),
189
- :fullName => 'Vagrant',
190
- :orgName => 'Vagrant',
191
- :productId => 'XXXXX-XXXXX-XXXXX-XXXXX-XXXXX'
192
- )
178
+ :guiUnattended => RbVmomi::VIM.CustomizationGuiUnattended(
179
+ :autoLogon => false,
180
+ :autoLogonCount => 0,
181
+ :timeZone => 004
182
+ ),
183
+ :identification => RbVmomi::VIM.CustomizationIdentification(),
184
+ :userData => RbVmomi::VIM.CustomizationUserData(
185
+ :computerName => RbVmomi::VIM.CustomizationFixedName(
186
+ :name => env[:machine].name.to_s.split('.')[0]
187
+ ),
188
+ :fullName => 'Vagrant',
189
+ :orgName => 'Vagrant',
190
+ :productId => 'XXXXX-XXXXX-XXXXX-XXXXX-XXXXX'
191
+ )
193
192
  )
194
- else
195
- fail "specification type #{config.prep_type} not supported"
193
+ else
194
+ fail Errors::GuestCustomNotSupported,
195
+ :type => cfg.prep_type
196
196
  end
197
197
 
198
198
  if prep && network_spec
199
- # If prep and network specification are present, let's do a full config
199
+ # If prep and network specification are present,
200
+ # -> Do a full config
200
201
  cust_spec = RbVmomi::VIM.CustomizationSpec(
201
- :globalIPSettings => global_ip_settings,
202
- :identity => prep,
203
- :nicSettingMap => nic_map)
202
+ :globalIPSettings => global_ip_settings,
203
+ :identity => prep,
204
+ :nicSettingMap => nic_map
205
+ )
204
206
 
205
207
  spec.customization = cust_spec
206
208
 
@@ -208,18 +210,22 @@ module VagrantPlugins
208
210
  # If no network specifications, default to dhcp
209
211
  global_ip_settings = RbVmomi::VIM.CustomizationGlobalIPSettings(
210
212
  :dnsServerList => [],
211
- :dnsSuffixList => [])
213
+ :dnsSuffixList => []
214
+ )
212
215
 
213
216
  adapter = RbVmomi::VIM.CustomizationIPSettings(
214
- :ip => RbVmomi::VIM.CustomizationDhcpIpGenerator())
217
+ :ip => RbVmomi::VIM.CustomizationDhcpIpGenerator()
218
+ )
215
219
 
216
- nic_map = [RbVmomi::VIM.CustomizationAdapterMapping(
217
- :adapter => adapter)]
220
+ nic_map = [
221
+ RbVmomi::VIM.CustomizationAdapterMapping(:adapter => adapter)
222
+ ]
218
223
 
219
224
  cust_spec = RbVmomi::VIM.CustomizationSpec(
220
- :globalIPSettings => global_ip_settings,
221
- :identity => prep,
222
- :nicSettingMap => nic_map)
225
+ :globalIPSettings => global_ip_settings,
226
+ :identity => prep,
227
+ :nicSettingMap => nic_map
228
+ )
223
229
 
224
230
  spec.customization = cust_spec
225
231
  end
@@ -227,10 +233,12 @@ module VagrantPlugins
227
233
  @logger.debug("Spec: #{spec.pretty_inspect}")
228
234
  end
229
235
 
230
- @logger.debug("disable_auto_vm_name: #{config.disable_auto_vm_name}")
236
+ @logger.debug("disable_auto_vm_name: #{cfg.disable_auto_vm_name}")
231
237
 
232
- if config.disable_auto_vm_name || config.disable_auto_vm_name == 'true'
233
- vm_target = vm_name.to_s
238
+ # Not recommended in a vSphere environment where VM names might
239
+ # conflict a lot if used in the same vm folder namespace
240
+ if cfg.disable_auto_vm_name == true
241
+ vm_target = vm_name
234
242
  else
235
243
  vm_target = "Vagrant-#{Etc.getlogin}-" +
236
244
  "#{vm_name}-#{Socket.gethostname.downcase}-" +
@@ -242,21 +250,24 @@ module VagrantPlugins
242
250
  # FIXME: vm.parent brings us to the template folder, fix this with
243
251
  # folder_path.
244
252
 
245
- root_vm_folder = dc.vmFolder
246
- vm_folder = root_vm_folder
247
- unless config.folder_name.nil?
253
+ vm_folder = cfg.vmfolder
254
+ unless cfg.folder_name.nil?
248
255
  begin
249
256
  # Better ask for forgiveness than permission ;-)
250
- @logger.debug("Creating folder #{config.folder_name}.")
251
- vm_folder = root_vm_folder.traverse(config.folder_name,
252
- RbVmomi::VIM::Folder,
253
- create = true)
257
+ @logger.debug("Creating folder #{cfg.folder_name}.")
258
+ vm_folder = cfg.vmfolder.traverse(
259
+ cfg.folder_name,
260
+ RbVmomi::VIM::Folder,
261
+ create = true
262
+ )
254
263
  # FIXME: we should trap the correct exception
255
264
  rescue RbVmomi::Fault
256
265
  # if somebody else created the folder already...
257
- @logger.debug("Folder #{config.folder_name} already exists.")
258
- vm_folder = root_vm_folder.traverse(config.folder_name,
259
- RbVmomi::VIM::Folder)
266
+ @logger.debug("Folder #{cfg.folder_name} already exists.")
267
+ vm_folder = cfg.vmfolder.traverse(
268
+ cfg.folder_name,
269
+ RbVmomi::VIM::Folder
270
+ )
260
271
  end
261
272
  end
262
273
  @logger.debug("folder for VM: #{vm_folder}")
@@ -264,21 +275,23 @@ module VagrantPlugins
264
275
  env[:ui].info('Creating VM...')
265
276
 
266
277
  template.CloneVM_Task(
267
- :folder => vm_folder,
268
- :name => vm_target,
269
- :spec => spec).wait_for_completion
278
+ :folder => vm_folder,
279
+ :name => vm_target,
280
+ :spec => spec
281
+ ).wait_for_completion
270
282
 
271
- if config.folder_name.nil?
272
- vm_to_search = vm_target
283
+ if cfg.folder_name.nil?
284
+ vm_to_search = vm_target.to_s
273
285
  else
274
- vm_to_search = config.folder_name + '/' + vm_target
286
+ vm_to_search = cfg.folder_name + '/' + vm_target.to_s
275
287
  end
276
288
 
277
289
  @logger.debug("VM to search: #{vm_to_search}")
278
290
 
279
- # FIXME: Raise a correct exception
280
- env[:machine].id = dc.find_vm(
281
- vm_to_search).config.uuid or abort 'VM not found'
291
+ env[:machine].id = cfg.datacenter.find_vm(
292
+ vm_to_search
293
+ ).config.uuid or fail Errors::VMNotFound,
294
+ :vm_name => vm_to_search
282
295
 
283
296
  @app.call env
284
297
  end