summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/chef/property.rb8
-rw-r--r--lib/chef/provider.rb11
2 files changed, 16 insertions, 3 deletions
diff --git a/lib/chef/property.rb b/lib/chef/property.rb
index eaf1a66e86..d65545c138 100644
--- a/lib/chef/property.rb
+++ b/lib/chef/property.rb
@@ -303,8 +303,12 @@ class Chef
#
# @return [Boolean]
#
- def required?
- options[:required]
+ def required?(action = nil)
+ if !action.nil? && options[:required].is_a?(Array)
+ options[:required].include?(action)
+ else
+ !!options[:required]
+ end
end
#
diff --git a/lib/chef/provider.rb b/lib/chef/provider.rb
index 40bd5a48a1..947a890806 100644
--- a/lib/chef/provider.rb
+++ b/lib/chef/provider.rb
@@ -152,6 +152,7 @@ class Chef
new_resource.cookbook_name
end
+ # hook that subclasses can use to do lazy validation for where properties aren't flexibile enough
def check_resource_semantics!; end
# a simple placeholder method that will be called / raise if a resource tries to
@@ -181,12 +182,20 @@ class Chef
run_context.events
end
+ def validate_required_properties!
+ # all we do is run through all the required properties for this action and vivify them
+ new_resource.class.properties.each { |name, property| property.required?(action) && property.get(new_resource) }
+ end
+
def run_action(action = nil)
@action = action unless action.nil?
- # @todo it would be preferable to get the action to be executed in the constructor...
+ # hook that subclasses can use to do lazy validation for where properties aren't flexibile enough
check_resource_semantics!
+ # force the validation of required properties
+ validate_required_properties!
+
# user-defined LWRPs may include unsafe load_current_resource methods that cannot be run in whyrun mode
if whyrun_mode? && !whyrun_supported?
events.resource_current_state_load_bypassed(@new_resource, @action, @current_resource)