summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Keiser <john@johnkeiser.com>2016-09-16 15:14:19 -0700
committerGitHub <noreply@github.com>2016-09-16 15:14:19 -0700
commita608666215bd1d0e75b6aef63fb9bf776d8837a1 (patch)
treecc420cbaf571929b3824b43cb21ec37d4dd3a340
parent1b31450cf589f5557bcd08433507754d21255955 (diff)
parentb64b8382a07514e3f0a973937720807a66986807 (diff)
downloadchef-a608666215bd1d0e75b6aef63fb9bf776d8837a1.tar.gz
Merge pull request #5339 from chef/jk/custom-resources-whyrun
Make 12.5+ custom resources whyrun-safe by default
-rw-r--r--lib/chef/resource/action_class.rb4
-rw-r--r--spec/integration/recipes/resource_action_spec.rb104
2 files changed, 64 insertions, 44 deletions
diff --git a/lib/chef/resource/action_class.rb b/lib/chef/resource/action_class.rb
index 89b23499d0..98b4d87ef1 100644
--- a/lib/chef/resource/action_class.rb
+++ b/lib/chef/resource/action_class.rb
@@ -28,6 +28,10 @@ class Chef
"#{new_resource || "<no resource>"} action #{action ? action.inspect : "<no action>"}"
end
+ def whyrun_supported?
+ true
+ end
+
#
# If load_current_value! is defined on the resource, use that.
#
diff --git a/spec/integration/recipes/resource_action_spec.rb b/spec/integration/recipes/resource_action_spec.rb
index 0f90ed62f8..60d5831a50 100644
--- a/spec/integration/recipes/resource_action_spec.rb
+++ b/spec/integration/recipes/resource_action_spec.rb
@@ -9,54 +9,70 @@ module ResourceActionSpec
shared_context "ActionJackson" do
it "the default action is the first declared action" do
converge <<-EOM, __FILE__, __LINE__ + 1
- #{resource_dsl} "hi" do
- foo "foo!"
- end
- EOM
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ end
+ EOM
expect(ActionJackson.ran_action).to eq :access_recipe_dsl
expect(ActionJackson.succeeded).to eq true
end
+ context "when running in whyrun mode" do
+ before do
+ Chef::Config[:why_run] = true
+ end
+
+ it "the default action runs" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ end
+ EOM
+ expect(ActionJackson.ran_action).to eq :access_recipe_dsl
+ expect(ActionJackson.succeeded).to eq true
+ end
+ end
+
it "the action can access recipe DSL" do
converge <<-EOM, __FILE__, __LINE__ + 1
- #{resource_dsl} "hi" do
- foo "foo!"
- action :access_recipe_dsl
- end
- EOM
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ action :access_recipe_dsl
+ end
+ EOM
expect(ActionJackson.ran_action).to eq :access_recipe_dsl
expect(ActionJackson.succeeded).to eq true
end
it "the action can access attributes" do
converge <<-EOM, __FILE__, __LINE__ + 1
- #{resource_dsl} "hi" do
- foo "foo!"
- action :access_attribute
- end
- EOM
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ action :access_attribute
+ end
+ EOM
expect(ActionJackson.ran_action).to eq :access_attribute
expect(ActionJackson.succeeded).to eq "foo!"
end
it "the action can access public methods" do
converge <<-EOM, __FILE__, __LINE__ + 1
- #{resource_dsl} "hi" do
- foo "foo!"
- action :access_method
- end
- EOM
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ action :access_method
+ end
+ EOM
expect(ActionJackson.ran_action).to eq :access_method
expect(ActionJackson.succeeded).to eq "foo_public!"
end
it "the action can access protected methods" do
converge <<-EOM, __FILE__, __LINE__ + 1
- #{resource_dsl} "hi" do
- foo "foo!"
- action :access_protected_method
- end
- EOM
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ action :access_protected_method
+ end
+ EOM
expect(ActionJackson.ran_action).to eq :access_protected_method
expect(ActionJackson.succeeded).to eq "foo_protected!"
end
@@ -64,39 +80,39 @@ module ResourceActionSpec
it "the action cannot access private methods" do
expect do
converge(<<-EOM, __FILE__, __LINE__ + 1)
- #{resource_dsl} "hi" do
- foo "foo!"
- action :access_private_method
- end
- EOM
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ action :access_private_method
+ end
+ EOM
end.to raise_error(NameError)
expect(ActionJackson.ran_action).to eq :access_private_method
end
it "the action cannot access resource instance variables" do
converge <<-EOM, __FILE__, __LINE__ + 1
- #{resource_dsl} "hi" do
- foo "foo!"
- action :access_instance_variable
- end
- EOM
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ action :access_instance_variable
+ end
+ EOM
expect(ActionJackson.ran_action).to eq :access_instance_variable
expect(ActionJackson.succeeded).to be_nil
end
it "the action does not compile until the prior resource has converged" do
converge <<-EOM, __FILE__, __LINE__ + 1
- ruby_block "wow" do
- block do
- ResourceActionSpec::ActionJackson.ruby_block_converged = "ruby_block_converged!"
+ ruby_block "wow" do
+ block do
+ ResourceActionSpec::ActionJackson.ruby_block_converged = "ruby_block_converged!"
+ end
end
- end
- #{resource_dsl} "hi" do
- foo "foo!"
- action :access_class_method
- end
- EOM
+ #{resource_dsl} "hi" do
+ foo "foo!"
+ action :access_class_method
+ end
+ EOM
expect(ActionJackson.ran_action).to eq :access_class_method
expect(ActionJackson.succeeded).to eq "ruby_block_converged!"
end
@@ -141,7 +157,7 @@ module ResourceActionSpec
action :access_recipe_dsl do
ActionJackson.ran_action = :access_recipe_dsl
- ruby_block "hi there" do
+ whyrun_safe_ruby_block "hi there" do
block do
ActionJackson.succeeded = true
end