chef-provisioning-vsphere 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +5 -5
- data/README.md +3 -3
- data/chef-provisioning-vsphere.gemspec +1 -2
- data/lib/chef/provisioning/vsphere_driver/clone_spec_builder.rb +1 -1
- data/lib/chef/provisioning/vsphere_driver/driver.rb +47 -24
- data/lib/chef/provisioning/vsphere_driver/version.rb +1 -1
- data/lib/chef/provisioning/vsphere_driver/vsphere_helpers.rb +8 -2
- data/lib/kitchen/driver/vsphere.rb +104 -104
- metadata +9 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 122ef0d030113564796d19efc129ee65e1714dd3
|
4
|
+
data.tar.gz: eaf4d9767af209f6defa4dba89ad740ae9d3bed6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ed0544f3514340869dcf6c3fd36285399d627af1483c474b10d28ff51f9caebf1020cf08cff87ee344b45a25a9fe3d235eed158d00fa0e9a6d918ec421a873a
|
7
|
+
data.tar.gz: 535e22f53664418ace53f14b6ce726a5d4bab4ed7f71d4194c7ff424b77b8401982540cc8a6658a24b98a04bf24f2d8f37ff5e09f7f95477252aa4bf880a17d7
|
data/Gemfile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
source "https://rubygems.org"
|
3
|
-
gemspec
|
4
|
-
|
5
|
-
gem "chef", "~> 12.3"
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
source "https://rubygems.org"
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
gem "chef", "~> 12.3"
|
data/README.md
CHANGED
@@ -84,13 +84,13 @@ This will use chef-zero and needs no chef server (only works for ssh). Note that
|
|
84
84
|
- `[:memory_mb]` - number of megabytes to allocate for machine
|
85
85
|
- `[:host]` - `{cluster}`/`{host}` to use during provisioning
|
86
86
|
- `[:resource_pool]` - `{cluster}`/`{resource pool}` to use during provisioning
|
87
|
-
- `[:additional_disk_size_gb]` - an array of numbers, each signifying the number of gigabytes to assign to an additional disk (*
|
87
|
+
- `[:additional_disk_size_gb]` - an array of numbers, each signifying the number of gigabytes to assign to an additional disk (*this requires a datastore to be specified*)
|
88
88
|
- `[:ssh][:user]` user to use for ssh/winrm (defaults to root on linux/administrator on windows)
|
89
89
|
- `[:ssh][:password]` - password to use for ssh/winrm
|
90
90
|
- `[:ssh][:paranoid]` - specifies the strictness of the host key verification checking
|
91
91
|
- `[:ssh][:port]` port to use for ssh/winrm (defaults to 22 for ssh or 5985 for winrm)
|
92
|
-
- `[:convergence_options][:install_msi_url]` - url to chef client msi to use (defaults to latest)
|
93
|
-
- `[:convergence_options][:install_sh_url]` - the
|
92
|
+
- `[:convergence_options][:install_msi_url]` - url to chef client msi to use (defaults to latest)
|
93
|
+
- `[:convergence_options][:install_sh_url]` - the bash script to install chef client on linux (defaults to latest)
|
94
94
|
- `[:customization_spec][:ipsettings][:ip]` static ip to assign to machine
|
95
95
|
- `[:customization_spec][:ipsettings][:subnetMask]` - subnet to use
|
96
96
|
- `[:customization_spec][:ipsettings][:gateway]` - array of possible gateways to use (this will most often be an array of 1)
|
@@ -21,8 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
22
22
|
|
23
23
|
s.add_dependency 'rbvmomi', '~> 1.8.0', '>= 1.8.2'
|
24
|
-
s.add_dependency 'chef-provisioning', '~>
|
25
|
-
s.add_dependency 'winrm', '~> 1.6'
|
24
|
+
s.add_dependency 'chef-provisioning', '~>2.0', '>= 2.0.1'
|
26
25
|
|
27
26
|
s.add_development_dependency 'rspec'
|
28
27
|
s.add_development_dependency 'rake'
|
@@ -46,7 +46,7 @@ module ChefProvisioningVsphere
|
|
46
46
|
super(driver_url, config)
|
47
47
|
|
48
48
|
uri = URI(driver_url)
|
49
|
-
@connect_options = {
|
49
|
+
@connect_options = {
|
50
50
|
provider: 'vsphere',
|
51
51
|
host: uri.host,
|
52
52
|
port: uri.port,
|
@@ -131,7 +131,7 @@ module ChefProvisioningVsphere
|
|
131
131
|
|
132
132
|
action_handler.report_progress full_description(
|
133
133
|
machine_spec, bootstrap_options)
|
134
|
-
|
134
|
+
|
135
135
|
vm = find_or_create_vm(bootstrap_options, machine_spec, action_handler)
|
136
136
|
|
137
137
|
add_machine_spec_location(vm, machine_spec)
|
@@ -183,10 +183,16 @@ module ChefProvisioningVsphere
|
|
183
183
|
vm
|
184
184
|
end
|
185
185
|
|
186
|
-
|
186
|
+
def full_description(machine_spec, bootstrap_options)
|
187
187
|
description = [ "creating machine #{machine_spec.name} on #{driver_url}" ]
|
188
188
|
bootstrap_options.to_hash.each_pair do |key,value|
|
189
|
-
|
189
|
+
if value.is_a?(Hash) then
|
190
|
+
temp_value = value.clone
|
191
|
+
temp_value[:password] = "*********" if value.has_key?(:password)
|
192
|
+
else
|
193
|
+
temp_value = value
|
194
|
+
end
|
195
|
+
description << " #{key}: #{temp_value.inspect}"
|
190
196
|
end
|
191
197
|
description
|
192
198
|
end
|
@@ -258,7 +264,7 @@ module ChefProvisioningVsphere
|
|
258
264
|
# This may just be the ip of a newly cloned machine
|
259
265
|
# Customization below may change this to a valid ip
|
260
266
|
wait_until_ready(action_handler, machine_spec, machine_options, vm)
|
261
|
-
|
267
|
+
|
262
268
|
if !machine_spec.location['ipaddress'] || !has_ip?(machine_spec.location['ipaddress'], vm)
|
263
269
|
# find the ip we actually want
|
264
270
|
# this will be the static ip to assign
|
@@ -303,7 +309,7 @@ module ChefProvisioningVsphere
|
|
303
309
|
|
304
310
|
def attempt_ip(machine_options, action_handler, vm, machine_spec)
|
305
311
|
vm_ip = ip_to_bootstrap(machine_options[:bootstrap_options], vm)
|
306
|
-
|
312
|
+
|
307
313
|
wait_for_ip(vm, machine_options, machine_spec, action_handler)
|
308
314
|
|
309
315
|
unless has_ip?(vm_ip, vm)
|
@@ -314,7 +320,7 @@ module ChefProvisioningVsphere
|
|
314
320
|
msg << ' and tools state is '
|
315
321
|
msg << vm.guest.toolsRunningStatus
|
316
322
|
msg << '. powering up server...'
|
317
|
-
action_handler.report_progress(msg
|
323
|
+
action_handler.report_progress(msg)
|
318
324
|
vsphere_helper.start_vm(vm)
|
319
325
|
else
|
320
326
|
restart_server(action_handler, machine_spec, machine_options)
|
@@ -325,9 +331,19 @@ module ChefProvisioningVsphere
|
|
325
331
|
|
326
332
|
def wait_for_domain(bootstrap_options, vm, machine_spec, action_handler)
|
327
333
|
return unless bootstrap_options[:customization_spec]
|
328
|
-
return unless bootstrap_options[:customization_spec][:domain]
|
329
334
|
|
330
|
-
domain = bootstrap_options[:customization_spec]
|
335
|
+
domain = if bootstrap_options[:customization_spec].is_a?(String) && is_windows?(vm)
|
336
|
+
spec = vsphere_helper.find_customization_spec(bootstrap_options[:customization_spec])
|
337
|
+
spec.identity.identification.joinDomain
|
338
|
+
elsif bootstrap_options[:customization_spec].is_a?(String) && !is_windows?(vm)
|
339
|
+
spec = vsphere_helper.find_customization_spec(bootstrap_options[:customization_spec])
|
340
|
+
spec.identity.domain
|
341
|
+
else
|
342
|
+
bootstrap_options[:customization_spec][:domain]
|
343
|
+
end
|
344
|
+
|
345
|
+
return unless domain
|
346
|
+
|
331
347
|
if is_windows?(vm) && domain != 'local'
|
332
348
|
start = Time.now.utc
|
333
349
|
trimmed_name = machine_spec.name.byteslice(0,15)
|
@@ -458,11 +474,13 @@ module ChefProvisioningVsphere
|
|
458
474
|
def has_static_ip(bootstrap_options)
|
459
475
|
if bootstrap_options.has_key?(:customization_spec)
|
460
476
|
bootstrap_options = bootstrap_options[:customization_spec]
|
461
|
-
|
477
|
+
|
478
|
+
if bootstrap_options.is_a?(String)
|
479
|
+
spec = vsphere_helper.find_customization_spec(bootstrap_options)
|
480
|
+
return spec.nicSettingMap[0].adapter.ip.is_a?(RbVmomi::VIM::CustomizationFixedIp)
|
481
|
+
elsif bootstrap_options.has_key?(:ipsettings)
|
462
482
|
bootstrap_options = bootstrap_options[:ipsettings]
|
463
|
-
|
464
|
-
return true
|
465
|
-
end
|
483
|
+
return bootstrap_options.has_key?(:ip)
|
466
484
|
end
|
467
485
|
end
|
468
486
|
false
|
@@ -473,7 +491,7 @@ module ChefProvisioningVsphere
|
|
473
491
|
(machine_options[:start_timeout] || 600) -
|
474
492
|
(Time.now.utc - Time.parse(machine_spec.location['started_at']))
|
475
493
|
else
|
476
|
-
(machine_options[:create_timeout] || 600) -
|
494
|
+
(machine_options[:create_timeout] || 600) -
|
477
495
|
(Time.now.utc - Time.parse(machine_spec.location['allocated_at']))
|
478
496
|
end
|
479
497
|
end
|
@@ -483,7 +501,7 @@ module ChefProvisioningVsphere
|
|
483
501
|
if action_handler.should_perform_actions
|
484
502
|
action_handler.report_progress "waiting for #{machine_spec.name} (#{vm.config.instanceUuid} on #{driver_url}) to be ready ..."
|
485
503
|
until remaining_wait_time(machine_spec, machine_options) < 0 ||
|
486
|
-
(vm.guest.toolsRunningStatus == "guestToolsRunning" &&
|
504
|
+
(vm.guest.toolsRunningStatus == "guestToolsRunning" && vm.guest.ipAddress && !vm.guest.ipAddress.empty?) do
|
487
505
|
print "."
|
488
506
|
sleep 5
|
489
507
|
end
|
@@ -519,12 +537,12 @@ module ChefProvisioningVsphere
|
|
519
537
|
additional_disk_size_gb = bootstrap_options[:additional_disk_size_gb]
|
520
538
|
if !additional_disk_size_gb.is_a?(Array)
|
521
539
|
additional_disk_size_gb = [additional_disk_size_gb]
|
522
|
-
end
|
540
|
+
end
|
523
541
|
|
524
542
|
additional_disk_size_gb.each do |size|
|
525
543
|
size = size.to_i
|
526
544
|
next if size == 0
|
527
|
-
if bootstrap_options[:datastore].to_s.empty?
|
545
|
+
if bootstrap_options[:datastore].to_s.empty?
|
528
546
|
raise ':datastore must be specified when adding a disk to a cloned vm'
|
529
547
|
end
|
530
548
|
task = vm.ReconfigVM_Task(
|
@@ -546,7 +564,7 @@ module ChefProvisioningVsphere
|
|
546
564
|
|
547
565
|
def vsphere_helper
|
548
566
|
@vsphere_helper ||= VsphereHelper.new(
|
549
|
-
connect_options,
|
567
|
+
connect_options,
|
550
568
|
config[:machine_options][:bootstrap_options][:datacenter]
|
551
569
|
)
|
552
570
|
end
|
@@ -564,11 +582,11 @@ module ChefProvisioningVsphere
|
|
564
582
|
end
|
565
583
|
|
566
584
|
transport = transport_for(
|
567
|
-
machine_spec,
|
585
|
+
machine_spec,
|
568
586
|
machine_options[:bootstrap_options][:ssh]
|
569
587
|
)
|
570
588
|
strategy = convergence_strategy_for(machine_spec, machine_options)
|
571
|
-
|
589
|
+
|
572
590
|
if machine_spec.location['is_windows']
|
573
591
|
Chef::Provisioning::Machine::WindowsMachine.new(
|
574
592
|
machine_spec, transport, strategy)
|
@@ -628,8 +646,8 @@ module ChefProvisioningVsphere
|
|
628
646
|
end
|
629
647
|
|
630
648
|
def transport_for(
|
631
|
-
machine_spec,
|
632
|
-
remoting_options,
|
649
|
+
machine_spec,
|
650
|
+
remoting_options,
|
633
651
|
ip = machine_spec.location['ipaddress']
|
634
652
|
)
|
635
653
|
if machine_spec.location['is_windows']
|
@@ -679,9 +697,14 @@ module ChefProvisioningVsphere
|
|
679
697
|
|
680
698
|
def ip_to_bootstrap(bootstrap_options, vm)
|
681
699
|
if has_static_ip(bootstrap_options)
|
682
|
-
bootstrap_options[:customization_spec]
|
700
|
+
if bootstrap_options[:customization_spec].is_a?(String)
|
701
|
+
spec = vsphere_helper.find_customization_spec(bootstrap_options[:customization_spec])
|
702
|
+
spec.nicSettingMap[0].adapter.ip.ipAddress
|
703
|
+
else
|
704
|
+
bootstrap_options[:customization_spec][:ipsettings][:ip]
|
705
|
+
end
|
683
706
|
else
|
684
|
-
|
707
|
+
vm.guest.ipAddress
|
685
708
|
end
|
686
709
|
end
|
687
710
|
end
|
@@ -83,8 +83,14 @@ module ChefProvisioningVsphere
|
|
83
83
|
|
84
84
|
def datacenter
|
85
85
|
vim # ensure connection is valid
|
86
|
-
@datacenter ||=
|
87
|
-
|
86
|
+
@datacenter ||= begin
|
87
|
+
rootFolder = vim.serviceInstance.content.rootFolder
|
88
|
+
dc = rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).find do |x|
|
89
|
+
x.name == datacenter_name
|
90
|
+
end
|
91
|
+
raise("vSphere Datacenter not found [#{datacenter_name}]") if dc.nil?
|
92
|
+
dc
|
93
|
+
end
|
88
94
|
end
|
89
95
|
|
90
96
|
def network_adapter_for(operation, network_name, network_label, device_key, backing_info)
|
@@ -1,104 +1,104 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'kitchen'
|
3
|
-
require 'chef/provisioning/vsphere_driver'
|
4
|
-
require 'chef/provisioning/machine_spec'
|
5
|
-
|
6
|
-
module Kitchen
|
7
|
-
module Driver
|
8
|
-
class Vsphere < Kitchen::Driver::Base
|
9
|
-
|
10
|
-
@@chef_zero_server = false
|
11
|
-
|
12
|
-
default_config :machine_options,
|
13
|
-
:start_timeout => 600,
|
14
|
-
:create_timeout => 600,
|
15
|
-
:stop_timeout => 600,
|
16
|
-
:ready_timeout => 90,
|
17
|
-
:bootstrap_options => {
|
18
|
-
:use_linked_clone => true,
|
19
|
-
:ssh => {
|
20
|
-
:user => 'root',
|
21
|
-
:paranoid => false,
|
22
|
-
:port => 22
|
23
|
-
},
|
24
|
-
:convergence_options => {},
|
25
|
-
:customization_spec => {
|
26
|
-
:domain => 'local'
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
default_config(:vsphere_name) do |driver|
|
31
|
-
"#{driver.instance.name}-#{SecureRandom.hex(4)}"
|
32
|
-
end
|
33
|
-
|
34
|
-
def create(state)
|
35
|
-
state[:vsphere_name] = config[:vsphere_name]
|
36
|
-
state[:username] = config[:machine_options][:bootstrap_options][:ssh][:user]
|
37
|
-
state[:password] = config[:machine_options][:bootstrap_options][:ssh][:password]
|
38
|
-
config[:server_name] = state[:vsphere_name]
|
39
|
-
|
40
|
-
machine = with_provisioning_driver(state) do | action_handler, driver, machine_spec|
|
41
|
-
driver.allocate_machine(action_handler, machine_spec, config[:machine_options])
|
42
|
-
driver.ready_machine(action_handler, machine_spec, config[:machine_options])
|
43
|
-
state[:server_id] = machine_spec.location['server_id']
|
44
|
-
state[:hostname] = machine_spec.location['ipaddress']
|
45
|
-
machine_spec.save(action_handler)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def destroy(state)
|
50
|
-
return if state[:server_id].nil?
|
51
|
-
|
52
|
-
with_provisioning_driver(state) do | action_handler, driver, machine_spec|
|
53
|
-
machine_spec.location = { 'driver_url' => driver.driver_url,
|
54
|
-
'server_id' => state[:server_id]}
|
55
|
-
driver.destroy_machine(action_handler, machine_spec, config[:machine_options])
|
56
|
-
end
|
57
|
-
|
58
|
-
state.delete(:server_id)
|
59
|
-
state.delete(:hostname)
|
60
|
-
state.delete(:vsphere_name)
|
61
|
-
end
|
62
|
-
|
63
|
-
def with_provisioning_driver(state, &block)
|
64
|
-
config[:machine_options][:convergence_options] = {:chef_server => chef_server}
|
65
|
-
machine_spec = Chef::Provisioning.chef_managed_entry_store(chef_server).get(:machine, state[:vsphere_name])
|
66
|
-
if machine_spec.nil?
|
67
|
-
machine_spec = Chef::Provisioning.chef_managed_entry_store(chef_server)
|
68
|
-
.new_entry(:machine, state[:vsphere_name])
|
69
|
-
end
|
70
|
-
url = URI::VsphereUrl.from_config(@config[:driver_options]).to_s
|
71
|
-
driver = Chef::Provisioning.driver_for_url(url, config)
|
72
|
-
action_handler = Chef::Provisioning::ActionHandler.new
|
73
|
-
block.call(action_handler, driver, machine_spec)
|
74
|
-
end
|
75
|
-
|
76
|
-
def chef_server
|
77
|
-
if !@@chef_zero_server
|
78
|
-
vsphere_mutex.synchronize do
|
79
|
-
if !@@chef_zero_server
|
80
|
-
Chef::Config.local_mode = true
|
81
|
-
Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(Dir.pwd)
|
82
|
-
require 'chef/local_mode'
|
83
|
-
Chef::LocalMode.setup_server_connectivity
|
84
|
-
@@chef_zero_server = true
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
Cheffish.default_chef_server
|
90
|
-
end
|
91
|
-
|
92
|
-
def vsphere_mutex
|
93
|
-
@@vsphere_mutex ||= begin
|
94
|
-
Kitchen.mutex.synchronize do
|
95
|
-
instance.class.mutexes ||= Hash.new
|
96
|
-
instance.class.mutexes[self.class] = Mutex.new
|
97
|
-
end
|
98
|
-
|
99
|
-
instance.class.mutexes[self.class]
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
1
|
+
require 'json'
|
2
|
+
require 'kitchen'
|
3
|
+
require 'chef/provisioning/vsphere_driver'
|
4
|
+
require 'chef/provisioning/machine_spec'
|
5
|
+
|
6
|
+
module Kitchen
|
7
|
+
module Driver
|
8
|
+
class Vsphere < Kitchen::Driver::Base
|
9
|
+
|
10
|
+
@@chef_zero_server = false
|
11
|
+
|
12
|
+
default_config :machine_options,
|
13
|
+
:start_timeout => 600,
|
14
|
+
:create_timeout => 600,
|
15
|
+
:stop_timeout => 600,
|
16
|
+
:ready_timeout => 90,
|
17
|
+
:bootstrap_options => {
|
18
|
+
:use_linked_clone => true,
|
19
|
+
:ssh => {
|
20
|
+
:user => 'root',
|
21
|
+
:paranoid => false,
|
22
|
+
:port => 22
|
23
|
+
},
|
24
|
+
:convergence_options => {},
|
25
|
+
:customization_spec => {
|
26
|
+
:domain => 'local'
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
default_config(:vsphere_name) do |driver|
|
31
|
+
"#{driver.instance.name}-#{SecureRandom.hex(4)}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def create(state)
|
35
|
+
state[:vsphere_name] = config[:vsphere_name]
|
36
|
+
state[:username] = config[:machine_options][:bootstrap_options][:ssh][:user]
|
37
|
+
state[:password] = config[:machine_options][:bootstrap_options][:ssh][:password]
|
38
|
+
config[:server_name] = state[:vsphere_name]
|
39
|
+
|
40
|
+
machine = with_provisioning_driver(state) do | action_handler, driver, machine_spec|
|
41
|
+
driver.allocate_machine(action_handler, machine_spec, config[:machine_options])
|
42
|
+
driver.ready_machine(action_handler, machine_spec, config[:machine_options])
|
43
|
+
state[:server_id] = machine_spec.location['server_id']
|
44
|
+
state[:hostname] = machine_spec.location['ipaddress']
|
45
|
+
machine_spec.save(action_handler)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def destroy(state)
|
50
|
+
return if state[:server_id].nil?
|
51
|
+
|
52
|
+
with_provisioning_driver(state) do | action_handler, driver, machine_spec|
|
53
|
+
machine_spec.location = { 'driver_url' => driver.driver_url,
|
54
|
+
'server_id' => state[:server_id]}
|
55
|
+
driver.destroy_machine(action_handler, machine_spec, config[:machine_options])
|
56
|
+
end
|
57
|
+
|
58
|
+
state.delete(:server_id)
|
59
|
+
state.delete(:hostname)
|
60
|
+
state.delete(:vsphere_name)
|
61
|
+
end
|
62
|
+
|
63
|
+
def with_provisioning_driver(state, &block)
|
64
|
+
config[:machine_options][:convergence_options] = {:chef_server => chef_server}
|
65
|
+
machine_spec = Chef::Provisioning.chef_managed_entry_store(chef_server).get(:machine, state[:vsphere_name])
|
66
|
+
if machine_spec.nil?
|
67
|
+
machine_spec = Chef::Provisioning.chef_managed_entry_store(chef_server)
|
68
|
+
.new_entry(:machine, state[:vsphere_name])
|
69
|
+
end
|
70
|
+
url = URI::VsphereUrl.from_config(@config[:driver_options]).to_s
|
71
|
+
driver = Chef::Provisioning.driver_for_url(url, config)
|
72
|
+
action_handler = Chef::Provisioning::ActionHandler.new
|
73
|
+
block.call(action_handler, driver, machine_spec)
|
74
|
+
end
|
75
|
+
|
76
|
+
def chef_server
|
77
|
+
if !@@chef_zero_server
|
78
|
+
vsphere_mutex.synchronize do
|
79
|
+
if !@@chef_zero_server
|
80
|
+
Chef::Config.local_mode = true
|
81
|
+
Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(Dir.pwd)
|
82
|
+
require 'chef/local_mode'
|
83
|
+
Chef::LocalMode.setup_server_connectivity
|
84
|
+
@@chef_zero_server = true
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
Cheffish.default_chef_server
|
90
|
+
end
|
91
|
+
|
92
|
+
def vsphere_mutex
|
93
|
+
@@vsphere_mutex ||= begin
|
94
|
+
Kitchen.mutex.synchronize do
|
95
|
+
instance.class.mutexes ||= Hash.new
|
96
|
+
instance.class.mutexes[self.class] = Mutex.new
|
97
|
+
end
|
98
|
+
|
99
|
+
instance.class.mutexes[self.class]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-provisioning-vsphere
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CenturyLink Cloud
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rbvmomi
|
@@ -36,28 +36,20 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
40
|
-
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '1.1'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: winrm
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
39
|
+
version: '2.0'
|
40
|
+
- - ">="
|
52
41
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
42
|
+
version: 2.0.1
|
54
43
|
type: :runtime
|
55
44
|
prerelease: false
|
56
45
|
version_requirements: !ruby/object:Gem::Requirement
|
57
46
|
requirements:
|
58
47
|
- - "~>"
|
59
48
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
49
|
+
version: '2.0'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.0.1
|
61
53
|
- !ruby/object:Gem::Dependency
|
62
54
|
name: rspec
|
63
55
|
requirement: !ruby/object:Gem::Requirement
|