chef-provisioning-vsphere 0.9.0 → 0.10.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/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
|