compat_resource 12.5.26 → 12.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea7089f93018397f0b5c46a78d8dc7003bd78941
4
- data.tar.gz: ba7c3dd73c1f86be86475a737d8a9fdb0946e9ee
3
+ metadata.gz: 154eebdbd187ddd7eee14842727a39f1b447dd21
4
+ data.tar.gz: 6ad6654c932db5ae4ad4b2de9801d8d67e81f74e
5
5
  SHA512:
6
- metadata.gz: 52a459b48397a9d3e942aa4d1f9680aff68a655026c402a85edcc14deb85791659871cc143fdeed83df47f7c86b2c77a6150fdaf57aa23b8fd15c9c98f8e708e
7
- data.tar.gz: 349fc6e3b360941539629a8f5b2252dc2e64addebe0ee9c8f6fa86f5649b84077d8baaf095d380450d6a91e6f71294fb494ed7ccff75045d56062cacac7e790b
6
+ metadata.gz: 04a32ccdc4f1ce060bed2a4e99ea39c394157be4b6a4be0ce25be9f23a91de2132c3f0e0afb13e7734d64469cbb939df8a5ae014c550e01c3cdeaf409b10884f
7
+ data.tar.gz: 7bddb0214270ce21dce221755f8dfe2edf7215961fb2ef2725ece9977dc236210b9143d5ce76d8a8cfb17c05c68935ab26fc3bd5c8e94eacf7eec08bd2059326
@@ -94,7 +94,7 @@ class Chef < (defined?(::Chef) ? ::Chef : Object)
94
94
  def build_resource(type, name, created_at=nil, run_context: self.run_context, &resource_attrs_block)
95
95
  created_at ||= caller[0]
96
96
  Thread.exclusive do
97
- require 'chef_compat/copied_from_chef/chef/resource_builder' unless defined?(Chef::ResourceBuilder)
97
+ require "chef_compat/copied_from_chef/chef/resource_builder" unless defined?(Chef::ResourceBuilder)
98
98
  end
99
99
 
100
100
  Chef::ResourceBuilder.new(
@@ -105,7 +105,7 @@ class Chef < (defined?(::Chef) ? ::Chef : Object)
105
105
  run_context: run_context,
106
106
  cookbook_name: cookbook_name,
107
107
  recipe_name: recipe_name,
108
- enclosing_provider: self.is_a?(Chef::Provider) ? self : nil
108
+ enclosing_provider: self.is_a?(Chef::Provider) ? self : nil,
109
109
  ).build(&resource_attrs_block)
110
110
  end
111
111
  end
@@ -2,7 +2,7 @@ require 'chef_compat/copied_from_chef'
2
2
  class Chef
3
3
  module ::ChefCompat
4
4
  module CopiedFromChef
5
- require 'chef_compat/copied_from_chef/chef/dsl/declare_resource'
5
+ require "chef_compat/copied_from_chef/chef/dsl/declare_resource"
6
6
  class Chef < (defined?(::Chef) ? ::Chef : Object)
7
7
  module DSL
8
8
  CopiedFromChef.extend_chef_module(::Chef::DSL, self) if defined?(::Chef::DSL)
@@ -16,7 +16,7 @@ class Chef < (defined?(::Chef) ? ::Chef : Object)
16
16
  end
17
17
  end
18
18
  end
19
- require 'chef_compat/copied_from_chef/chef/resource'
19
+ require "chef_compat/copied_from_chef/chef/resource"
20
20
  end
21
21
  end
22
22
  end
@@ -19,16 +19,15 @@ module CopiedFromChef
19
19
  # See the License for the specific language governing permissions and
20
20
  # limitations under the License.
21
21
 
22
- require 'chef_compat/copied_from_chef/chef/constants'
23
- require 'chef_compat/copied_from_chef/chef/property'
24
- require 'chef_compat/copied_from_chef/chef/delayed_evaluator'
22
+ require "chef_compat/copied_from_chef/chef/constants"
23
+ require "chef_compat/copied_from_chef/chef/property"
24
+ require "chef_compat/copied_from_chef/chef/delayed_evaluator"
25
25
 
26
26
  class Chef < (defined?(::Chef) ? ::Chef : Object)
27
27
  module Mixin
28
28
  CopiedFromChef.extend_chef_module(::Chef::Mixin, self) if defined?(::Chef::Mixin)
29
29
  module ParamsValidate
30
30
  CopiedFromChef.extend_chef_module(::Chef::Mixin::ParamsValidate, self) if defined?(::Chef::Mixin::ParamsValidate)
31
-
32
31
  # Takes a hash of options, along with a map to validate them. Returns the original
33
32
  # options hash, plus any changes that might have been made (through things like setting
34
33
  # default values in the validation map)
@@ -339,6 +338,7 @@ class Chef < (defined?(::Chef) ? ::Chef : Object)
339
338
  def _pv_name_property(opts, key, is_name_property=true)
340
339
  if is_name_property
341
340
  if opts[key].nil?
341
+ raise CannotValidateStaticallyError, "name_property cannot be evaluated without a resource." if self == Chef::Mixin::ParamsValidate
342
342
  opts[key] = self.instance_variable_get(:"@name")
343
343
  end
344
344
  end
@@ -409,6 +409,7 @@ class Chef < (defined?(::Chef) ? ::Chef : Object)
409
409
  to_be.each do |tb|
410
410
  case tb
411
411
  when Proc
412
+ raise CannotValidateStaticallyError, "is: proc { } must be evaluated once for each resource" if self == Chef::Mixin::ParamsValidate
412
413
  return true if instance_exec(value, &tb)
413
414
  when Property
414
415
  validate(opts, { key => tb.validation_options })
@@ -442,12 +443,21 @@ class Chef < (defined?(::Chef) ? ::Chef : Object)
442
443
  #
443
444
  def _pv_coerce(opts, key, coercer)
444
445
  if opts.has_key?(key.to_s)
446
+ raise CannotValidateStaticallyError, "coerce must be evaluated for each resource." if self == Chef::Mixin::ParamsValidate
445
447
  opts[key.to_s] = instance_exec(opts[key], &coercer)
446
448
  elsif opts.has_key?(key.to_sym)
449
+ raise CannotValidateStaticallyError, "coerce must be evaluated for each resource." if self == Chef::Mixin::ParamsValidate
447
450
  opts[key.to_sym] = instance_exec(opts[key], &coercer)
448
451
  end
449
452
  end
450
453
 
454
+ # We allow Chef::Mixin::ParamsValidate.validate(), but we will raise an
455
+ # error if you try to do anything requiring there to be an actual resource.
456
+ # This way, you can statically validate things if you have constant validation
457
+ # (which is the norm).
458
+ extend self
459
+
460
+
451
461
  # Used by #set_or_return to avoid emitting a deprecation warning for
452
462
  # "value nil" and to keep default stickiness working exactly the same
453
463
  # @api private
@@ -2,9 +2,9 @@ require 'chef_compat/copied_from_chef'
2
2
  class Chef
3
3
  module ::ChefCompat
4
4
  module CopiedFromChef
5
- require 'chef_compat/copied_from_chef/chef/delayed_evaluator'
6
- require 'chef_compat/copied_from_chef/chef/mixin/params_validate'
7
- require 'chef_compat/copied_from_chef/chef/property'
5
+ require "chef_compat/copied_from_chef/chef/delayed_evaluator"
6
+ require "chef_compat/copied_from_chef/chef/mixin/params_validate"
7
+ require "chef_compat/copied_from_chef/chef/property"
8
8
 
9
9
  class Chef < (defined?(::Chef) ? ::Chef : Object)
10
10
  module Mixin
@@ -20,7 +20,7 @@ module CopiedFromChef
20
20
  # limitations under the License.
21
21
  #
22
22
 
23
- require 'chef_compat/copied_from_chef/chef/delayed_evaluator'
23
+ require "chef_compat/copied_from_chef/chef/delayed_evaluator"
24
24
 
25
25
  class Chef < (defined?(::Chef) ? ::Chef : Object)
26
26
  #
@@ -89,16 +89,21 @@ class Chef < (defined?(::Chef) ? ::Chef : Object)
89
89
  #
90
90
  def initialize(**options)
91
91
  super if defined?(::Chef::Property)
92
- options.each { |k,v| options[k.to_sym] = v if k.is_a?(String) }
92
+ options.each { |k,v| options[k.to_sym] = v; options.delete(k) if k.is_a?(String) }
93
+ @options = options
94
+ options[:name] = options[:name].to_sym if options[:name]
95
+ options[:instance_variable_name] = options[:instance_variable_name].to_sym if options[:instance_variable_name]
96
+
93
97
 
94
98
  # Replace name_attribute with name_property
95
99
  if options.has_key?(:name_attribute)
96
100
  # If we have both name_attribute and name_property and they differ, raise an error
97
101
  if options.has_key?(:name_property)
98
- raise ArgumentError, "Cannot specify both name_property and name_attribute together on property #{options[:name]}#{options[:declared_in] ? " of resource #{options[:declared_in].resource_name}" : ""}."
102
+ raise ArgumentError, "Cannot specify both name_property and name_attribute together on property #{self}."
99
103
  end
100
104
  # replace name_property with name_attribute in place
101
105
  options = Hash[options.map { |k,v| k == :name_attribute ? [ :name_property, v ] : [ k,v ] }]
106
+ @options = options
102
107
  end
103
108
 
104
109
  # Only pick the first of :default, :name_property and :name_attribute if
@@ -111,17 +116,22 @@ super if defined?(::Chef::Property)
111
116
  options.delete(:name_property)
112
117
  preferred_default = :default
113
118
  end
114
- Chef.log_deprecation("Cannot specify both default and name_property together on property #{options[:name]}#{options[:declared_in] ? " of resource #{options[:declared_in].resource_name}" : ""}. Only one (#{preferred_default}) will be obeyed. In Chef 13, this will become an error.")
119
+ Chef.log_deprecation("Cannot specify both default and name_property together on property #{self}. Only one (#{preferred_default}) will be obeyed. In Chef 13, this will become an error. Please remove one or the other from the property.")
115
120
  end
116
121
 
117
- @options = options
118
-
119
- options[:name] = options[:name].to_sym if options[:name]
120
- options[:instance_variable_name] = options[:instance_variable_name].to_sym if options[:instance_variable_name]
122
+ # Validate the default early, so the user gets a good error message, and
123
+ # cache it so we don't do it again if so
124
+ begin
125
+ # If we can validate it all the way to output, do it.
126
+ @stored_default = input_to_stored_value(nil, default, is_default: true)
127
+ rescue Chef::Exceptions::CannotValidateStaticallyError
128
+ # If the validation is not static (i.e. has procs), we will have to
129
+ # coerce and validate the default each time we run
130
+ end
121
131
  end
122
132
 
123
133
  def to_s
124
- name
134
+ "#{name}#{declared_in ? " of resource #{declared_in.resource_name}" : ""}"
125
135
  end
126
136
 
127
137
  #
@@ -255,14 +265,26 @@ super if defined?(::Chef::Property)
255
265
  return get(resource)
256
266
  end
257
267
 
258
- if value.nil? && !explicitly_accepts_nil?(resource)
268
+ if value.nil?
259
269
  # In Chef 12, value(nil) does a *get* instead of a set, so we
260
270
  # warn if the value would have been changed. In Chef 13, it will be
261
271
  # equivalent to value = nil.
262
272
  result = get(resource)
263
- if !result.nil?
264
- Chef.log_deprecation("#{name} nil currently does not overwrite the value of #{name}. This will change in Chef 13, and the value will be set to nil instead. Please change your code to explicitly accept nil using \"property :#{name}, [MyType, nil]\", or stop setting this value to nil.")
273
+
274
+ # Warn about this becoming a set in Chef 13.
275
+ begin
276
+ input_to_stored_value(resource, value)
277
+ # If nil is valid, and it would change the value, warn that this will change to a set.
278
+ if !result.nil?
279
+ Chef.log_deprecation("An attempt was made to change #{name} from #{result.inspect} to nil by calling #{name}(nil). In Chef 12, this does a get rather than a set. In Chef 13, this will change to set the value to nil.")
280
+ end
281
+ rescue Chef::Exceptions::DeprecatedFeatureError
282
+ raise
283
+ rescue
284
+ # If nil is invalid, warn that this will become an error.
285
+ Chef.log_deprecation("nil is an invalid value for #{self}. In Chef 13, this warning will change to an error. Error: #{$!}")
265
286
  end
287
+
266
288
  result
267
289
  else
268
290
  # Anything else, such as myprop(value) is a set
@@ -293,16 +315,14 @@ super if defined?(::Chef::Property)
293
315
  # this property, or if the value is required and not set.
294
316
  #
295
317
  def get(resource)
318
+ # If it's set, return it (and evaluate any lazy values)
296
319
  if is_set?(resource)
297
320
  value = get_value(resource)
298
- if value.is_a?(DelayedEvaluator)
299
- value = exec_in_resource(resource, value)
300
- value = coerce(resource, value)
301
- validate(resource, value)
302
- end
303
- value
321
+ value = stored_value_to_output(resource, value)
304
322
 
305
323
  else
324
+ # We are getting the default value.
325
+
306
326
  # If the user does something like this:
307
327
  #
308
328
  # ```
@@ -322,19 +342,20 @@ super if defined?(::Chef::Property)
322
342
  resource.resource_initializing &&
323
343
  resource.respond_to?(:enclosing_provider) &&
324
344
  resource.enclosing_provider &&
325
- resource.enclosing_provider.respond_to?(name)
345
+ resource.enclosing_provider.new_resource &&
346
+ resource.enclosing_provider.new_resource.respond_to?(name)
326
347
  Chef::Log.warn("#{Chef::Log.caller_location}: property #{name} is declared in both #{resource} and #{resource.enclosing_provider}. Use new_resource.#{name} instead. At #{Chef::Log.caller_location}")
327
348
  end
328
349
 
329
350
  if has_default?
330
- value = default
331
- if value.is_a?(DelayedEvaluator)
332
- value = exec_in_resource(resource, value)
351
+ # If we were able to cache the stored_default, grab it.
352
+ if defined?(@stored_default)
353
+ value = @stored_default
354
+ else
355
+ # Otherwise, we have to validate it now.
356
+ value = input_to_stored_value(resource, default, is_default: true)
333
357
  end
334
-
335
- value = coerce(resource, value)
336
-
337
- # We don't validate defaults
358
+ value = stored_value_to_output(resource, value, is_default: true)
338
359
 
339
360
  # If the value is mutable (non-frozen), we set it on the instance
340
361
  # so that people can mutate it. (All constant default values are
@@ -367,11 +388,7 @@ super if defined?(::Chef::Property)
367
388
  # this property.
368
389
  #
369
390
  def set(resource, value)
370
- unless value.is_a?(DelayedEvaluator)
371
- value = coerce(resource, value)
372
- validate(resource, value)
373
- end
374
- set_value(resource, value)
391
+ set_value(resource, input_to_stored_value(resource, value))
375
392
  end
376
393
 
377
394
  #
@@ -424,7 +441,10 @@ super if defined?(::Chef::Property)
424
441
  #
425
442
  def coerce(resource, value)
426
443
  if options.has_key?(:coerce)
427
- value = exec_in_resource(resource, options[:coerce], value)
444
+ # If we have no default value, `nil` is never coerced or validated
445
+ unless !has_default? && value.nil?
446
+ value = exec_in_resource(resource, options[:coerce], value)
447
+ end
428
448
  end
429
449
  value
430
450
  end
@@ -443,7 +463,10 @@ super if defined?(::Chef::Property)
443
463
  # this property.
444
464
  #
445
465
  def validate(resource, value)
446
- resource.validate({ name => value }, { name => validation_options })
466
+ # If we have no default value, `nil` is never coerced or validated
467
+ unless value.nil? && !has_default?
468
+ (resource || Chef::Mixin::ParamsValidate).validate({ name => value }, { name => validation_options })
469
+ end
447
470
  end
448
471
 
449
472
  #
@@ -596,15 +619,54 @@ super if defined?(::Chef::Property)
596
619
  value = resource.instance_exec(*args, &proc)
597
620
  end
598
621
  else
599
- value = proc.call
622
+ # If we don't have a resource yet, we can't exec in resource!
623
+ raise Chef::Exceptions::CannotValidateStaticallyError, "Cannot validate or coerce without a resource"
624
+ end
625
+ end
626
+
627
+ def input_to_stored_value(resource, value, is_default: false)
628
+ unless value.is_a?(DelayedEvaluator)
629
+ value = coerce_and_validate(resource, value, is_default: is_default)
600
630
  end
631
+ value
632
+ end
601
633
 
634
+ def stored_value_to_output(resource, value, is_default: false)
635
+ # Crack open lazy values before giving the result to the user
602
636
  if value.is_a?(DelayedEvaluator)
603
- value = coerce(resource, value)
604
- validate(resource, value)
637
+ value = exec_in_resource(resource, value)
638
+ value = coerce_and_validate(resource, value, is_default: is_default)
605
639
  end
606
640
  value
607
641
  end
642
+
643
+ # Coerces and validates the value. If the value is a default, it will warn
644
+ # the user that invalid defaults are bad mmkay, and return it as if it were
645
+ # valid.
646
+ def coerce_and_validate(resource, value, is_default: false)
647
+ result = coerce(resource, value)
648
+ begin
649
+ # If the input is from a default, we need to emit an invalid default warning on validate.
650
+ validate(resource, result)
651
+ rescue Chef::Exceptions::CannotValidateStaticallyError
652
+ # This one gets re-raised
653
+ raise
654
+ rescue
655
+ # Anything else is just an invalid default: in those cases, we just
656
+ # warn and return the (possibly coerced) value to the user.
657
+ if is_default
658
+ if value.nil?
659
+ Chef.log_deprecation("Default value nil is invalid for property #{self}. Possible fixes: 1. Remove 'default: nil' if nil means 'undefined'. 2. Set a valid default value if there is a reasonable one. 3. Allow nil as a valid value of your property (for example, 'property #{name.inspect}, [ String, nil ], default: nil'). Error: #{$!}")
660
+ else
661
+ Chef.log_deprecation("Default value #{value.inspect} is invalid for property #{self}. In Chef 13 this will become an error: #{$!}.")
662
+ end
663
+ else
664
+ raise
665
+ end
666
+ end
667
+
668
+ result
669
+ end
608
670
  end
609
671
  end
610
672
  end
@@ -30,11 +30,11 @@ super if defined?(::Chef::Provider)
30
30
  modified = specified_properties.select { |p| new_resource.send(p) != current_resource.send(p) }
31
31
  if modified.empty?
32
32
  properties_str = if sensitive
33
- specified_properties.join(", ")
34
- else
35
- specified_properties.map { |p| "#{p}=#{new_resource.send(p).inspect}" }.join(", ")
36
- end
37
- Chef::Log.debug("Skipping update of #{new_resource.to_s}: has not changed any of the specified properties #{properties_str}.")
33
+ specified_properties.join(", ")
34
+ else
35
+ specified_properties.map { |p| "#{p}=#{new_resource.send(p).inspect}" }.join(", ")
36
+ end
37
+ Chef::Log.debug("Skipping update of #{new_resource}: has not changed any of the specified properties #{properties_str}.")
38
38
  return false
39
39
  end
40
40
 
@@ -42,10 +42,10 @@ super if defined?(::Chef::Provider)
42
42
  property_size = modified.map { |p| p.size }.max
43
43
  modified.map! do |p|
44
44
  properties_str = if sensitive
45
- '(suppressed sensitive property)'
46
- else
47
- "#{new_resource.send(p).inspect} (was #{current_resource.send(p).inspect})"
48
- end
45
+ "(suppressed sensitive property)"
46
+ else
47
+ "#{new_resource.send(p).inspect} (was #{current_resource.send(p).inspect})"
48
+ end
49
49
  " set #{p.to_s.ljust(property_size)} to #{properties_str}"
50
50
  end
51
51
  converge_by([ "update #{current_resource.identity}" ] + modified, &converge_block)
@@ -55,12 +55,12 @@ super if defined?(::Chef::Provider)
55
55
  # write down any properties we are setting.
56
56
  property_size = properties.map { |p| p.size }.max
57
57
  created = properties.map do |property|
58
- default = ' (default value)' unless new_resource.property_is_set?(property)
58
+ default = " (default value)" unless new_resource.property_is_set?(property)
59
59
  properties_str = if sensitive
60
- '(suppressed sensitive property)'
61
- else
62
- new_resource.send(property).inspect
63
- end
60
+ "(suppressed sensitive property)"
61
+ else
62
+ new_resource.send(property).inspect
63
+ end
64
64
  " set #{property.to_s.ljust(property_size)} to #{properties_str}#{default}"
65
65
  end
66
66
 
@@ -97,10 +97,10 @@ super if defined?(::Chef::Provider)
97
97
  EOM
98
98
  end
99
99
  dsl_methods =
100
- resource.class.public_instance_methods +
101
- resource.class.protected_instance_methods -
102
- provider_class.instance_methods -
103
- resource.class.properties.keys
100
+ resource.class.public_instance_methods +
101
+ resource.class.protected_instance_methods -
102
+ provider_class.instance_methods -
103
+ resource.class.properties.keys
104
104
  def_delegators(:new_resource, *dsl_methods)
105
105
  end
106
106
  include @included_resource_dsl_module
@@ -141,7 +141,7 @@ super if defined?(::Chef::Provider)
141
141
  end
142
142
  end
143
143
  end
144
- require 'chef_compat/copied_from_chef/chef/dsl/recipe'
144
+ require "chef_compat/copied_from_chef/chef/dsl/recipe"
145
145
  include Chef::DSL::Recipe::FullDSL
146
146
  end
147
147
  protected
@@ -2,13 +2,13 @@ require 'chef_compat/copied_from_chef'
2
2
  class Chef
3
3
  module ::ChefCompat
4
4
  module CopiedFromChef
5
- require 'chef_compat/copied_from_chef/chef/resource/action_class'
6
- require 'chef_compat/copied_from_chef/chef/provider'
7
- require 'chef_compat/copied_from_chef/chef/mixin/properties'
5
+ require "chef_compat/copied_from_chef/chef/resource/action_class"
6
+ require "chef_compat/copied_from_chef/chef/provider"
7
+ require "chef_compat/copied_from_chef/chef/mixin/properties"
8
8
  class Chef < (defined?(::Chef) ? ::Chef : Object)
9
9
  class Resource < (defined?(::Chef::Resource) ? ::Chef::Resource : Object)
10
10
  include Chef::Mixin::Properties
11
- property :name, String, coerce: proc { |v| v.is_a?(Array) ? v.join(', ') : v.to_s }, desired_state: false
11
+ property :name, String, coerce: proc { |v| v.is_a?(Array) ? v.join(", ") : v.to_s }, desired_state: false
12
12
  def initialize(name, run_context=nil)
13
13
  super if defined?(::Chef::Resource)
14
14
  name(name) unless name.nil?
@@ -44,7 +44,7 @@ super if defined?(::Chef::Resource)
44
44
  arg.each do |action|
45
45
  validate(
46
46
  { action: action },
47
- { action: { kind_of: Symbol, equal_to: allowed_actions } }
47
+ { action: { kind_of: Symbol, equal_to: allowed_actions } },
48
48
  )
49
49
  end
50
50
  @action = arg
@@ -89,7 +89,7 @@ super if defined?(::Chef::Resource)
89
89
  end
90
90
  safe_ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
91
91
  safe_ivars.each do |iv|
92
- key = iv.to_s.sub(/^@/,'').to_sym
92
+ key = iv.to_s.sub(/^@/,"").to_sym
93
93
  next if result.has_key?(key)
94
94
  result[key] = instance_variable_get(iv)
95
95
  end
@@ -113,7 +113,7 @@ super if defined?(::Chef::Resource)
113
113
  @resource_name || self.class.resource_name
114
114
  end
115
115
  def self.use_automatic_resource_name
116
- automatic_name = convert_to_snake_case(self.name.split('::')[-1])
116
+ automatic_name = convert_to_snake_case(self.name.split("::")[-1])
117
117
  resource_name automatic_name
118
118
  end
119
119
  def self.allowed_actions(*actions)
@@ -168,17 +168,17 @@ super if defined?(::Chef::Resource)
168
168
  end
169
169
  def self.declare_action_class(&block)
170
170
  @action_class ||= begin
171
- if superclass.respond_to?(:action_class)
172
- base_provider = superclass.action_class
173
- end
174
- base_provider ||= Chef::Provider
171
+ if superclass.respond_to?(:action_class)
172
+ base_provider = superclass.action_class
173
+ end
174
+ base_provider ||= Chef::Provider
175
175
 
176
- resource_class = self
177
- Class.new(base_provider) do
178
- include ActionClass
179
- self.resource_class = resource_class
180
- end
181
- end
176
+ resource_class = self
177
+ Class.new(base_provider) do
178
+ include ActionClass
179
+ self.resource_class = resource_class
180
+ end
181
+ end
182
182
  @action_class.class_eval(&block) if block
183
183
  @action_class
184
184
  end
@@ -151,7 +151,7 @@ super if defined?(::Chef::ResourceBuilder)
151
151
  end
152
152
  end
153
153
 
154
- require 'chef_compat/copied_from_chef/chef/resource'
154
+ require "chef_compat/copied_from_chef/chef/resource"
155
155
  end
156
156
  end
157
157
  end
@@ -1,7 +1,10 @@
1
+ require 'chef/exceptions'
2
+
1
3
  class Chef
2
4
  class Exceptions
3
5
  # Used in Resource::ActionClass#load_current_resource to denote that
4
6
  # the resource doesn't actually exist (for example, the file does not exist)
5
- class CurrentValueDoesNotExist < RuntimeError; end
7
+ class CurrentValueDoesNotExist < RuntimeError; end unless defined?(CurrentValueDoesNotExist)
8
+ class CannotValidateStaticallyError < RuntimeError; end unless defined?(CannotValidateStaticallyError)
6
9
  end
7
10
  end
@@ -9,7 +9,6 @@ module ChefCompat
9
9
  @compat_resource_filter_paths ||=
10
10
  Gem.loaded_specs['chef'].require_paths.map { |p| File.join(Gem.loaded_specs['chef'].full_gem_path, p) } +
11
11
  Gem.loaded_specs['compat_resource'].require_paths.map { |p| File.join(Gem.loaded_specs['compat_resource'].full_gem_path, p) }
12
- puts caller.select { |c| !@compat_resource_filter_paths.any? { |path| c.start_with?(path) } }
13
12
 
14
13
  caller.select { |c| !@compat_resource_filter_paths.any? { |path| c.start_with?(path) } }.first
15
14
  end
@@ -1,3 +1,3 @@
1
1
  module CompatResource
2
- VERSION = '12.5.26'
2
+ VERSION = '12.7.0'
3
3
  end
@@ -1,10 +1,9 @@
1
- GIT
2
- remote: git://github.com/chef/chef.git
3
- revision: 5f51f93f71cdee3ed598b38cecd8f5fa1a585f49
1
+ GEM
4
2
  specs:
3
+ builder (3.2.2)
5
4
  chef (12.6.0)
6
5
  chef-config (= 12.6.0)
7
- chef-zero (~> 4.4.0, >= 4.2.2)
6
+ chef-zero (~> 4.2, >= 4.2.2)
8
7
  diff-lcs (~> 1.2, >= 1.2.4)
9
8
  erubis (~> 2.7)
10
9
  ffi-yajl (~> 2.2)
@@ -29,11 +28,7 @@ GIT
29
28
  chef-config (12.6.0)
30
29
  mixlib-config (~> 2.0)
31
30
  mixlib-shellout (~> 2.0)
32
-
33
- GEM
34
- specs:
35
- builder (3.2.2)
36
- chef-zero (4.4.0)
31
+ chef-zero (4.4.2)
37
32
  ffi-yajl (~> 2.2)
38
33
  hashie (>= 2.0, < 4.0)
39
34
  mixlib-log (~> 1.3)
@@ -43,15 +38,18 @@ GEM
43
38
  diff-lcs (1.2.5)
44
39
  erubis (2.7.0)
45
40
  ffi (1.9.10)
46
- ffi-yajl (2.2.2)
41
+ ffi-yajl (2.2.3)
47
42
  libyajl2 (~> 1.2)
48
43
  hashie (3.4.3)
49
44
  highline (1.7.8)
50
- ipaddress (0.8.0)
45
+ ipaddress (0.8.2)
51
46
  libyajl2 (1.2.0)
52
47
  method_source (0.8.2)
53
- mixlib-authentication (1.3.0)
48
+ mixlib-authentication (1.4.0)
54
49
  mixlib-log
50
+ rspec-core (~> 3.2)
51
+ rspec-expectations (~> 3.2)
52
+ rspec-mocks (~> 3.2)
55
53
  mixlib-cli (1.5.0)
56
54
  mixlib-config (2.2.1)
57
55
  mixlib-log (1.6.0)
@@ -66,7 +64,7 @@ GEM
66
64
  net-ssh (>= 2.6.5)
67
65
  net-ssh-gateway (>= 1.2.0)
68
66
  net-telnet (0.1.1)
69
- ohai (8.8.1)
67
+ ohai (8.9.0)
70
68
  chef-config (>= 12.5.0.alpha.1, < 13)
71
69
  ffi (~> 1.9)
72
70
  ffi-yajl (~> 2.2)
@@ -85,12 +83,12 @@ GEM
85
83
  method_source (~> 0.8.1)
86
84
  slop (~> 3.4)
87
85
  rack (1.6.4)
88
- rake (10.4.2)
86
+ rake (10.5.0)
89
87
  rspec (3.4.0)
90
88
  rspec-core (~> 3.4.0)
91
89
  rspec-expectations (~> 3.4.0)
92
90
  rspec-mocks (~> 3.4.0)
93
- rspec-core (3.4.1)
91
+ rspec-core (3.4.2)
94
92
  rspec-support (~> 3.4.0)
95
93
  rspec-expectations (3.4.0)
96
94
  diff-lcs (>= 1.2.0, < 2.0)
@@ -98,21 +96,21 @@ GEM
98
96
  rspec-its (1.2.0)
99
97
  rspec-core (>= 3.0.0)
100
98
  rspec-expectations (>= 3.0.0)
101
- rspec-mocks (3.4.0)
99
+ rspec-mocks (3.4.1)
102
100
  diff-lcs (>= 1.2.0, < 2.0)
103
101
  rspec-support (~> 3.4.0)
104
102
  rspec-support (3.4.1)
105
103
  rspec_junit_formatter (0.2.3)
106
104
  builder (< 4)
107
105
  rspec-core (>= 2, < 4, != 2.12.0)
108
- serverspec (2.25.0)
106
+ serverspec (2.29.1)
109
107
  multi_json
110
108
  rspec (~> 3.0)
111
109
  rspec-its
112
- specinfra (~> 2.46)
110
+ specinfra (~> 2.48)
113
111
  sfl (2.2)
114
112
  slop (3.6.0)
115
- specinfra (2.47.0)
113
+ specinfra (2.50.3)
116
114
  net-scp
117
115
  net-ssh (>= 2.7, < 3.1)
118
116
  net-telnet
@@ -126,7 +124,7 @@ PLATFORMS
126
124
  ruby
127
125
 
128
126
  DEPENDENCIES
129
- chef!
127
+ chef
130
128
 
131
129
  BUNDLED WITH
132
- 1.10.6
130
+ 1.11.2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: compat_resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.5.26
4
+ version: 12.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Keiser
8
8
  autorequire:
9
9
  bindir: files/bin
10
10
  cert_chain: []
11
- date: 2015-12-18 00:00:00.000000000 Z
11
+ date: 2016-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -164,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
164
  version: '0'
165
165
  requirements: []
166
166
  rubyforge_project:
167
- rubygems_version: 2.5.0
167
+ rubygems_version: 2.4.5.1
168
168
  signing_key:
169
169
  specification_version: 4
170
170
  summary: Bring some new features of Chef 12.5 to previous 12.X releases