chef-provisioning 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +906 -899
- data/Gemfile +17 -17
- data/LICENSE +201 -201
- data/README.md +312 -312
- data/Rakefile +55 -55
- data/chef-provisioning.gemspec +38 -38
- data/lib/chef/provider/load_balancer.rb +75 -75
- data/lib/chef/provider/machine.rb +219 -219
- data/lib/chef/provider/machine_batch.rb +224 -224
- data/lib/chef/provider/machine_execute.rb +36 -36
- data/lib/chef/provider/machine_file.rb +55 -55
- data/lib/chef/provider/machine_image.rb +105 -105
- data/lib/chef/provisioning.rb +110 -110
- data/lib/chef/provisioning/action_handler.rb +68 -68
- data/lib/chef/provisioning/add_prefix_action_handler.rb +35 -35
- data/lib/chef/provisioning/chef_managed_entry_store.rb +128 -128
- data/lib/chef/provisioning/chef_provider_action_handler.rb +74 -74
- data/lib/chef/provisioning/chef_run_data.rb +132 -132
- data/lib/chef/provisioning/convergence_strategy.rb +28 -28
- data/lib/chef/provisioning/convergence_strategy/ignore_convergence_failure.rb +54 -54
- data/lib/chef/provisioning/convergence_strategy/install_cached.rb +188 -188
- data/lib/chef/provisioning/convergence_strategy/install_msi.rb +71 -71
- data/lib/chef/provisioning/convergence_strategy/install_sh.rb +71 -71
- data/lib/chef/provisioning/convergence_strategy/no_converge.rb +35 -35
- data/lib/chef/provisioning/convergence_strategy/precreate_chef_objects.rb +255 -255
- data/lib/chef/provisioning/driver.rb +323 -323
- data/lib/chef/provisioning/load_balancer_spec.rb +14 -14
- data/lib/chef/provisioning/machine.rb +112 -112
- data/lib/chef/provisioning/machine/basic_machine.rb +84 -84
- data/lib/chef/provisioning/machine/unix_machine.rb +288 -288
- data/lib/chef/provisioning/machine/windows_machine.rb +108 -108
- data/lib/chef/provisioning/machine_image_spec.rb +34 -34
- data/lib/chef/provisioning/machine_spec.rb +58 -58
- data/lib/chef/provisioning/managed_entry.rb +121 -121
- data/lib/chef/provisioning/managed_entry_store.rb +136 -136
- data/lib/chef/provisioning/recipe_dsl.rb +99 -99
- data/lib/chef/provisioning/rspec.rb +27 -27
- data/lib/chef/provisioning/transport.rb +100 -100
- data/lib/chef/provisioning/transport/ssh.rb +403 -403
- data/lib/chef/provisioning/transport/winrm.rb +144 -144
- data/lib/chef/provisioning/version.rb +5 -5
- data/lib/chef/resource/chef_data_bag_resource.rb +146 -146
- data/lib/chef/resource/load_balancer.rb +57 -57
- data/lib/chef/resource/machine.rb +128 -128
- data/lib/chef/resource/machine_batch.rb +78 -78
- data/lib/chef/resource/machine_execute.rb +30 -30
- data/lib/chef/resource/machine_file.rb +34 -34
- data/lib/chef/resource/machine_image.rb +35 -35
- data/lib/chef_metal.rb +1 -1
- data/spec/chef/provisioning/convergence_strategy/ignore_convergence_failure_spec.rb +86 -86
- data/spec/spec_helper.rb +27 -27
- metadata +10 -4
@@ -1,136 +1,136 @@
|
|
1
|
-
require 'chef/provisioning/load_balancer_spec'
|
2
|
-
require 'chef/provisioning/machine_spec'
|
3
|
-
require 'chef/provisioning/machine_image_spec'
|
4
|
-
require 'chef/provisioning/managed_entry'
|
5
|
-
|
6
|
-
class Chef
|
7
|
-
module Provisioning
|
8
|
-
class ManagedEntryStore
|
9
|
-
def initialize(chef_run_data)
|
10
|
-
@chef_run_data = chef_run_data
|
11
|
-
end
|
12
|
-
|
13
|
-
#
|
14
|
-
# Get the given data
|
15
|
-
#
|
16
|
-
# @param resource_type [Symbol] The type of thing to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
17
|
-
# @param name [String] The unique identifier of the thing to retrieve
|
18
|
-
#
|
19
|
-
# @return [Hash,Array] The data. Will be JSON- and YAML-compatible (Hash, Array, String, Integer, Boolean, Nil)
|
20
|
-
#
|
21
|
-
def get_data(resource_type, name)
|
22
|
-
raise NotImplementedError, :get_data
|
23
|
-
end
|
24
|
-
|
25
|
-
#
|
26
|
-
# Save the given data
|
27
|
-
#
|
28
|
-
# @param resource_type [Symbol] The type of thing to save (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet ...)
|
29
|
-
# @param name [String] The unique identifier of the thing to save
|
30
|
-
# @param data [Hash,Array] The data to save. Must be JSON- and YAML-compatible (Hash, Array, String, Integer, Boolean, Nil)
|
31
|
-
#
|
32
|
-
def save_data(resource_type, name, data, action_handler)
|
33
|
-
raise NotImplementedError, :save_data
|
34
|
-
end
|
35
|
-
|
36
|
-
#
|
37
|
-
# Delete the given data
|
38
|
-
#
|
39
|
-
# @param resource_type [Symbol] The type of thing to delete (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
40
|
-
# @param name [String] The unique identifier of the thing to delete
|
41
|
-
#
|
42
|
-
# @return [Boolean] Whether anything was deleted or not.
|
43
|
-
#
|
44
|
-
def delete_data(resource_type, name, action_handler)
|
45
|
-
raise NotImplementedError, :delete_data
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
# Get a globally unique identifier for this resource.
|
50
|
-
#
|
51
|
-
# @param resource_type [Symbol] The type of spec to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
52
|
-
# @param name [String] The unique identifier of the spec to retrieve
|
53
|
-
#
|
54
|
-
# @return [String] The identifier.
|
55
|
-
#
|
56
|
-
# @example ChefManagedEntry does this:
|
57
|
-
# chef_managed_entry_store.identifier(:machine, 'mario') # => https://my.chef.server/organizations/org/nodes/mario
|
58
|
-
#
|
59
|
-
def identifier(resource_type, name)
|
60
|
-
raise NotImplementedError, :identifier
|
61
|
-
end
|
62
|
-
|
63
|
-
#
|
64
|
-
# Get a spec.
|
65
|
-
#
|
66
|
-
# @param resource_type [Symbol] The type of spec to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
67
|
-
# @param name [String] The unique identifier of the spec to retrieve
|
68
|
-
#
|
69
|
-
# @return [ManagedEntry] The entry, or `nil` if the data does not exist.
|
70
|
-
#
|
71
|
-
def get(resource_type, name)
|
72
|
-
data = get_data(resource_type, name)
|
73
|
-
if data
|
74
|
-
new_entry(resource_type, name, data)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
#
|
79
|
-
# Get a spec, or create a new one, depending on whether an entry exists.
|
80
|
-
#
|
81
|
-
# @param resource_type [Symbol] The type of spec to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
82
|
-
# @param name [String] The unique identifier of the spec to retrieve
|
83
|
-
#
|
84
|
-
# @return [ManagedEntry] The entry.
|
85
|
-
#
|
86
|
-
def get_or_new(resource_type, name)
|
87
|
-
data = get_data(resource_type, name)
|
88
|
-
new_entry(resource_type, name, data)
|
89
|
-
end
|
90
|
-
|
91
|
-
#
|
92
|
-
# Get a spec, erroring out if the data does not exist.
|
93
|
-
#
|
94
|
-
# @param resource_type [Symbol] The type of spec to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
95
|
-
# @param name [String] The unique identifier of the spec to retrieve
|
96
|
-
#
|
97
|
-
# @return [ManagedEntry] The entry.
|
98
|
-
#
|
99
|
-
def get!(resource_type, name)
|
100
|
-
result = get(resource_type, name)
|
101
|
-
if !result
|
102
|
-
raise "#{identifier(resource_type, name)} not found!"
|
103
|
-
end
|
104
|
-
result
|
105
|
-
end
|
106
|
-
|
107
|
-
#
|
108
|
-
# Delete the given spec.
|
109
|
-
#
|
110
|
-
# @param resource_type [Symbol] The type of spec to delete (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
111
|
-
# @param name [String] The unique identifier of the spec to delete
|
112
|
-
#
|
113
|
-
# @return [Boolean] Whether anything was deleted or not.
|
114
|
-
#
|
115
|
-
def delete(resource_type, name, action_handler)
|
116
|
-
delete_data(resource_type, name, action_handler)
|
117
|
-
end
|
118
|
-
|
119
|
-
#
|
120
|
-
# Create a new managed entry of the given type.
|
121
|
-
#
|
122
|
-
def new_entry(resource_type, name, data=nil)
|
123
|
-
case resource_type
|
124
|
-
when :machine
|
125
|
-
MachineSpec.new(self, resource_type, name, data)
|
126
|
-
when :machine_image
|
127
|
-
MachineImageSpec.new(self, resource_type, name, data)
|
128
|
-
when :load_balancer
|
129
|
-
LoadBalancerSpec.new(self, resource_type, name, data)
|
130
|
-
else
|
131
|
-
ManagedEntry.new(self, resource_type, name, data)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
1
|
+
require 'chef/provisioning/load_balancer_spec'
|
2
|
+
require 'chef/provisioning/machine_spec'
|
3
|
+
require 'chef/provisioning/machine_image_spec'
|
4
|
+
require 'chef/provisioning/managed_entry'
|
5
|
+
|
6
|
+
class Chef
|
7
|
+
module Provisioning
|
8
|
+
class ManagedEntryStore
|
9
|
+
def initialize(chef_run_data)
|
10
|
+
@chef_run_data = chef_run_data
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# Get the given data
|
15
|
+
#
|
16
|
+
# @param resource_type [Symbol] The type of thing to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
17
|
+
# @param name [String] The unique identifier of the thing to retrieve
|
18
|
+
#
|
19
|
+
# @return [Hash,Array] The data. Will be JSON- and YAML-compatible (Hash, Array, String, Integer, Boolean, Nil)
|
20
|
+
#
|
21
|
+
def get_data(resource_type, name)
|
22
|
+
raise NotImplementedError, :get_data
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# Save the given data
|
27
|
+
#
|
28
|
+
# @param resource_type [Symbol] The type of thing to save (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet ...)
|
29
|
+
# @param name [String] The unique identifier of the thing to save
|
30
|
+
# @param data [Hash,Array] The data to save. Must be JSON- and YAML-compatible (Hash, Array, String, Integer, Boolean, Nil)
|
31
|
+
#
|
32
|
+
def save_data(resource_type, name, data, action_handler)
|
33
|
+
raise NotImplementedError, :save_data
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# Delete the given data
|
38
|
+
#
|
39
|
+
# @param resource_type [Symbol] The type of thing to delete (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
40
|
+
# @param name [String] The unique identifier of the thing to delete
|
41
|
+
#
|
42
|
+
# @return [Boolean] Whether anything was deleted or not.
|
43
|
+
#
|
44
|
+
def delete_data(resource_type, name, action_handler)
|
45
|
+
raise NotImplementedError, :delete_data
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Get a globally unique identifier for this resource.
|
50
|
+
#
|
51
|
+
# @param resource_type [Symbol] The type of spec to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
52
|
+
# @param name [String] The unique identifier of the spec to retrieve
|
53
|
+
#
|
54
|
+
# @return [String] The identifier.
|
55
|
+
#
|
56
|
+
# @example ChefManagedEntry does this:
|
57
|
+
# chef_managed_entry_store.identifier(:machine, 'mario') # => https://my.chef.server/organizations/org/nodes/mario
|
58
|
+
#
|
59
|
+
def identifier(resource_type, name)
|
60
|
+
raise NotImplementedError, :identifier
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# Get a spec.
|
65
|
+
#
|
66
|
+
# @param resource_type [Symbol] The type of spec to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
67
|
+
# @param name [String] The unique identifier of the spec to retrieve
|
68
|
+
#
|
69
|
+
# @return [ManagedEntry] The entry, or `nil` if the data does not exist.
|
70
|
+
#
|
71
|
+
def get(resource_type, name)
|
72
|
+
data = get_data(resource_type, name)
|
73
|
+
if data
|
74
|
+
new_entry(resource_type, name, data)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
#
|
79
|
+
# Get a spec, or create a new one, depending on whether an entry exists.
|
80
|
+
#
|
81
|
+
# @param resource_type [Symbol] The type of spec to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
82
|
+
# @param name [String] The unique identifier of the spec to retrieve
|
83
|
+
#
|
84
|
+
# @return [ManagedEntry] The entry.
|
85
|
+
#
|
86
|
+
def get_or_new(resource_type, name)
|
87
|
+
data = get_data(resource_type, name)
|
88
|
+
new_entry(resource_type, name, data)
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
# Get a spec, erroring out if the data does not exist.
|
93
|
+
#
|
94
|
+
# @param resource_type [Symbol] The type of spec to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
95
|
+
# @param name [String] The unique identifier of the spec to retrieve
|
96
|
+
#
|
97
|
+
# @return [ManagedEntry] The entry.
|
98
|
+
#
|
99
|
+
def get!(resource_type, name)
|
100
|
+
result = get(resource_type, name)
|
101
|
+
if !result
|
102
|
+
raise "#{identifier(resource_type, name)} not found!"
|
103
|
+
end
|
104
|
+
result
|
105
|
+
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# Delete the given spec.
|
109
|
+
#
|
110
|
+
# @param resource_type [Symbol] The type of spec to delete (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
|
111
|
+
# @param name [String] The unique identifier of the spec to delete
|
112
|
+
#
|
113
|
+
# @return [Boolean] Whether anything was deleted or not.
|
114
|
+
#
|
115
|
+
def delete(resource_type, name, action_handler)
|
116
|
+
delete_data(resource_type, name, action_handler)
|
117
|
+
end
|
118
|
+
|
119
|
+
#
|
120
|
+
# Create a new managed entry of the given type.
|
121
|
+
#
|
122
|
+
def new_entry(resource_type, name, data=nil)
|
123
|
+
case resource_type
|
124
|
+
when :machine
|
125
|
+
MachineSpec.new(self, resource_type, name, data)
|
126
|
+
when :machine_image
|
127
|
+
MachineImageSpec.new(self, resource_type, name, data)
|
128
|
+
when :load_balancer
|
129
|
+
LoadBalancerSpec.new(self, resource_type, name, data)
|
130
|
+
else
|
131
|
+
ManagedEntry.new(self, resource_type, name, data)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -1,99 +1,99 @@
|
|
1
|
-
require 'chef/provisioning/chef_run_data'
|
2
|
-
require 'chef/resource_collection'
|
3
|
-
require 'chef/resource/chef_data_bag_resource'
|
4
|
-
|
5
|
-
require 'chef/resource/machine'
|
6
|
-
require 'chef/provider/machine'
|
7
|
-
require 'chef/resource/machine_batch'
|
8
|
-
require 'chef/provider/machine_batch'
|
9
|
-
require 'chef/resource/machine_file'
|
10
|
-
require 'chef/provider/machine_file'
|
11
|
-
require 'chef/resource/machine_execute'
|
12
|
-
require 'chef/provider/machine_execute'
|
13
|
-
require 'chef/resource/machine_image'
|
14
|
-
require 'chef/provider/machine_image'
|
15
|
-
require 'chef/resource/load_balancer'
|
16
|
-
require 'chef/provider/load_balancer'
|
17
|
-
|
18
|
-
class Chef
|
19
|
-
module DSL
|
20
|
-
module Recipe
|
21
|
-
|
22
|
-
def with_driver(driver, options = nil, &block)
|
23
|
-
run_context.chef_provisioning.with_driver(driver, options, &block)
|
24
|
-
end
|
25
|
-
|
26
|
-
def with_machine_options(machine_options, &block)
|
27
|
-
run_context.chef_provisioning.with_machine_options(machine_options, &block)
|
28
|
-
end
|
29
|
-
|
30
|
-
def current_machine_options
|
31
|
-
run_context.chef_provisioning.current_machine_options
|
32
|
-
end
|
33
|
-
|
34
|
-
def add_machine_options(options, &block)
|
35
|
-
run_context.chef_provisioning.add_machine_options(options, &block)
|
36
|
-
end
|
37
|
-
|
38
|
-
def with_image_options(image_options, &block)
|
39
|
-
run_context.chef_provisioning.with_image_options(image_options, &block)
|
40
|
-
end
|
41
|
-
|
42
|
-
def current_image_options
|
43
|
-
run_context.chef_provisioning.current_image_options
|
44
|
-
end
|
45
|
-
|
46
|
-
NOT_PASSED = Object.new
|
47
|
-
|
48
|
-
@@next_machine_batch_index = 0
|
49
|
-
|
50
|
-
def machine_batch_default_name
|
51
|
-
@@next_machine_batch_index += 1
|
52
|
-
if @@next_machine_batch_index > 1
|
53
|
-
"default#{@@next_machine_batch_index}"
|
54
|
-
else
|
55
|
-
"default"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def machine_batch(name = nil, &block)
|
60
|
-
name ||= machine_batch_default_name
|
61
|
-
recipe = self
|
62
|
-
declare_resource(:machine_batch, name, caller[0]) do
|
63
|
-
from_recipe recipe
|
64
|
-
instance_eval(&block)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
class Config
|
72
|
-
default(:driver) { ENV['CHEF_DRIVER'] }
|
73
|
-
# config_context :drivers do
|
74
|
-
# # each key is a driver_url, and each value can have driver, driver_options and machine_options
|
75
|
-
# config_strict_mode false
|
76
|
-
# end
|
77
|
-
# config_context :driver_options do
|
78
|
-
# # open ended for whatever the driver wants
|
79
|
-
# config_strict_mode false
|
80
|
-
# end
|
81
|
-
# config_context :machine_options do
|
82
|
-
# # open ended for whatever the driver wants
|
83
|
-
# config_strict_mode false
|
84
|
-
# end
|
85
|
-
end
|
86
|
-
|
87
|
-
class RunContext
|
88
|
-
def chef_provisioning
|
89
|
-
node.run_state[:chef_provisioning] ||= Chef::Provisioning::ChefRunData.new(config)
|
90
|
-
end
|
91
|
-
alias :chef_metal :chef_provisioning
|
92
|
-
end
|
93
|
-
|
94
|
-
class ResourceCollection
|
95
|
-
def previous_index
|
96
|
-
@insert_after_idx ? @insert_after_idx : @resources.length - 1
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
1
|
+
require 'chef/provisioning/chef_run_data'
|
2
|
+
require 'chef/resource_collection'
|
3
|
+
require 'chef/resource/chef_data_bag_resource'
|
4
|
+
|
5
|
+
require 'chef/resource/machine'
|
6
|
+
require 'chef/provider/machine'
|
7
|
+
require 'chef/resource/machine_batch'
|
8
|
+
require 'chef/provider/machine_batch'
|
9
|
+
require 'chef/resource/machine_file'
|
10
|
+
require 'chef/provider/machine_file'
|
11
|
+
require 'chef/resource/machine_execute'
|
12
|
+
require 'chef/provider/machine_execute'
|
13
|
+
require 'chef/resource/machine_image'
|
14
|
+
require 'chef/provider/machine_image'
|
15
|
+
require 'chef/resource/load_balancer'
|
16
|
+
require 'chef/provider/load_balancer'
|
17
|
+
|
18
|
+
class Chef
|
19
|
+
module DSL
|
20
|
+
module Recipe
|
21
|
+
|
22
|
+
def with_driver(driver, options = nil, &block)
|
23
|
+
run_context.chef_provisioning.with_driver(driver, options, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def with_machine_options(machine_options, &block)
|
27
|
+
run_context.chef_provisioning.with_machine_options(machine_options, &block)
|
28
|
+
end
|
29
|
+
|
30
|
+
def current_machine_options
|
31
|
+
run_context.chef_provisioning.current_machine_options
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_machine_options(options, &block)
|
35
|
+
run_context.chef_provisioning.add_machine_options(options, &block)
|
36
|
+
end
|
37
|
+
|
38
|
+
def with_image_options(image_options, &block)
|
39
|
+
run_context.chef_provisioning.with_image_options(image_options, &block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def current_image_options
|
43
|
+
run_context.chef_provisioning.current_image_options
|
44
|
+
end
|
45
|
+
|
46
|
+
NOT_PASSED = Object.new
|
47
|
+
|
48
|
+
@@next_machine_batch_index = 0
|
49
|
+
|
50
|
+
def machine_batch_default_name
|
51
|
+
@@next_machine_batch_index += 1
|
52
|
+
if @@next_machine_batch_index > 1
|
53
|
+
"default#{@@next_machine_batch_index}"
|
54
|
+
else
|
55
|
+
"default"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def machine_batch(name = nil, &block)
|
60
|
+
name ||= machine_batch_default_name
|
61
|
+
recipe = self
|
62
|
+
declare_resource(:machine_batch, name, caller[0]) do
|
63
|
+
from_recipe recipe
|
64
|
+
instance_eval(&block)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Config
|
72
|
+
default(:driver) { ENV['CHEF_DRIVER'] }
|
73
|
+
# config_context :drivers do
|
74
|
+
# # each key is a driver_url, and each value can have driver, driver_options and machine_options
|
75
|
+
# config_strict_mode false
|
76
|
+
# end
|
77
|
+
# config_context :driver_options do
|
78
|
+
# # open ended for whatever the driver wants
|
79
|
+
# config_strict_mode false
|
80
|
+
# end
|
81
|
+
# config_context :machine_options do
|
82
|
+
# # open ended for whatever the driver wants
|
83
|
+
# config_strict_mode false
|
84
|
+
# end
|
85
|
+
end
|
86
|
+
|
87
|
+
class RunContext
|
88
|
+
def chef_provisioning
|
89
|
+
node.run_state[:chef_provisioning] ||= Chef::Provisioning::ChefRunData.new(config)
|
90
|
+
end
|
91
|
+
alias :chef_metal :chef_provisioning
|
92
|
+
end
|
93
|
+
|
94
|
+
class ResourceCollection
|
95
|
+
def previous_index
|
96
|
+
@insert_after_idx ? @insert_after_idx : @resources.length - 1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|