class Chef::Provider::Execute
Public Instance Methods
action_run()
click to toggle source
# File lib/chef/provider/execute.rb, line 50 def action_run if creates && sentinel_file.exist? logger.debug("#{new_resource} sentinel file #{sentinel_file} exists - nothing to do") return false end converge_by("execute #{description}") do begin shell_out!(command, opts) rescue Mixlib::ShellOut::ShellCommandFailed if sensitive? ex = Mixlib::ShellOut::ShellCommandFailed.new("Command execution failed. STDOUT/STDERR suppressed for sensitive resource") # Forcibly hide the exception cause chain here so we don't log the unredacted version def ex.cause nil end raise ex else raise end end logger.info("#{new_resource} ran successfully") end end
define_resource_requirements()
click to toggle source
# File lib/chef/provider/execute.rb, line 37 def define_resource_requirements if creates && creates_relative? && !cwd # FIXME? move this onto the resource? raise Chef::Exceptions::Execute, "Please either specify a full path for the creates property, or specify a cwd property to the #{new_resource} resource" end end
load_current_resource()
click to toggle source
# File lib/chef/provider/execute.rb, line 32 def load_current_resource current_resource = Chef::Resource::Execute.new(new_resource.name) current_resource end
timeout()
click to toggle source
# File lib/chef/provider/execute.rb, line 44 def timeout # original implementation did not specify a timeout, but ShellOut # *always* times out. So, set a very long default timeout new_resource.timeout || 3600 end
Private Instance Methods
creates_relative?()
click to toggle source
# File lib/chef/provider/execute.rb, line 118 def creates_relative? Pathname(creates).relative? end
description()
click to toggle source
# File lib/chef/provider/execute.rb, line 114 def description sensitive? ? "sensitive resource" : command end
live_stream?()
click to toggle source
# File lib/chef/provider/execute.rb, line 81 def live_stream? Chef::Config[:stream_execute_output] || !!new_resource.live_stream end
opts()
click to toggle source
# File lib/chef/provider/execute.rb, line 89 def opts opts = {} opts[:timeout] = timeout opts[:returns] = returns if returns opts[:environment] = environment if environment opts[:user] = user if user opts[:domain] = domain if domain opts[:password] = password if password opts[:group] = group if group opts[:cwd] = cwd if cwd opts[:umask] = umask if umask opts[:default_env] = default_env opts[:log_level] = :info opts[:log_tag] = new_resource.to_s if (logger.info? || live_stream?) && !sensitive? if run_context.events.formatter? opts[:live_stream] = Chef::EventDispatch::EventsOutputStream.new(run_context.events, name: :execute) elsif stream_to_stdout? opts[:live_stream] = STDOUT end end opts[:elevated] = elevated if elevated opts end
sensitive?()
click to toggle source
# File lib/chef/provider/execute.rb, line 77 def sensitive? !!new_resource.sensitive end
sentinel_file()
click to toggle source
# File lib/chef/provider/execute.rb, line 122 def sentinel_file Pathname.new(Chef::Util::PathHelper.cleanpath( ( cwd && creates_relative? ) ? ::File.join(cwd, creates) : creates )) end
stream_to_stdout?()
click to toggle source
# File lib/chef/provider/execute.rb, line 85 def stream_to_stdout? STDOUT.tty? && !Chef::Config[:daemon] end