diff options
author | Jay Mundrawala <jdmundrawala@gmail.com> | 2014-09-10 11:19:17 -0700 |
---|---|---|
committer | Jay Mundrawala <jdmundrawala@gmail.com> | 2014-09-22 15:55:51 -0700 |
commit | b16b6157be731425f922b911d8810e9996c6887a (patch) | |
tree | cc5a93e47b374f0101b2ef757a877a253b7b1360 /lib | |
parent | ed907ef4d64027212ceb0c082895b303844ff43f (diff) | |
download | chef-b16b6157be731425f922b911d8810e9996c6887a.tar.gz |
We now check for powershell/dsc compat in provider.jdmundrawala/issue-2027-master
The problem with raising an exception when the resource is created
was that it was not possible to have a chef recipe that installs
the correct version of powershell and then runs the dsc_script
resource.
See https://github.com/opscode/chef/issues/2027
Diffstat (limited to 'lib')
-rw-r--r-- | lib/chef/provider/dsc_script.rb | 34 | ||||
-rw-r--r-- | lib/chef/resource/dsc_script.rb | 18 |
2 files changed, 33 insertions, 19 deletions
diff --git a/lib/chef/provider/dsc_script.rb b/lib/chef/provider/dsc_script.rb index 5d7322842c..9bb2b5f364 100644 --- a/lib/chef/provider/dsc_script.rb +++ b/lib/chef/provider/dsc_script.rb @@ -46,9 +46,11 @@ class Chef end def load_current_resource - @dsc_resources_info = run_configuration(:test) - @resource_converged = @dsc_resources_info.all? do |resource| - !resource.changes_state? + if supports_dsc? + @dsc_resources_info = run_configuration(:test) + @resource_converged = @dsc_resources_info.all? do |resource| + !resource.changes_state? + end end end @@ -56,8 +58,26 @@ class Chef true end + def define_resource_requirements + requirements.assert(:run) do |a| + err = [ + 'Could not find Dsc on the system', + powershell_info_str, + "Powershell 4.0 or higher was not detected on your system and is required to use the dsc_script resource.", + ] + a.assertion { supports_dsc? } + a.failure_message Chef::Exceptions::NoProviderAvailable, err.join(' ') + a.whyrun err + ["Assuming a previous resource installs Powershell 4.0 or higher."] + a.block_action! + end + end + protected + def supports_dsc? + run_context && Chef::Platform.supports_dsc?(node) + end + def run_configuration(operation) config_directory = ::Dir.mktmpdir("chef-dsc-script") configuration_data_path = get_configuration_data_path(config_directory) @@ -143,6 +163,14 @@ class Chef end end end + + def powershell_info_str + if run_context && run_context.node[:languages] && run_context.node[:languages][:powershell] + install_info = "Powershell #{run_context.node[:languages][:powershell][:version]} was found on the system." + else + install_info = 'Powershell was not found.' + end + end end end end diff --git a/lib/chef/resource/dsc_script.rb b/lib/chef/resource/dsc_script.rb index 2972ace1aa..76ac6659d6 100644 --- a/lib/chef/resource/dsc_script.rb +++ b/lib/chef/resource/dsc_script.rb @@ -28,12 +28,8 @@ class Chef super @allowed_actions.push(:run) @action = :run - if(run_context && Chef::Platform.supports_dsc?(run_context.node)) - @provider = Chef::Provider::DscScript - else - raise Chef::Exceptions::NoProviderAvailable, - "#{powershell_info_str(run_context)}\nPowershell 4.0 or higher was not detected on your system and is required to use the dsc_script resource." - end + @provider = Chef::Provider::DscScript + @resource_name = :dsc_script end def code(arg=nil) @@ -125,16 +121,6 @@ class Chef :kind_of => [ Integer ] ) end - - private - - def powershell_info_str(run_context) - if run_context && run_context.node[:languages] && run_context.node[:languages][:powershell] - install_info = "Powershell #{run_context.node[:languages][:powershell][:version]} was found on the system." - else - install_info = 'Powershell was not found.' - end - end end end end |