[chef] Re: stdout/stderr and exception/report framework


Chronological Thread 
  • From: Daniel DeLeo < >
  • To:
  • Subject: [chef] Re: stdout/stderr and exception/report framework
  • Date: Mon, 9 Apr 2012 10:46:38 -0700



On Monday, April 9, 2012 at 10:11 AM, 2bjc 466 wrote:

> Hi list,
> 
> We have two issues with chef at the moment. The first is that we want to 
> write execute resources that leverage rsync and be able to behave in 
> different ways based on the stderr/stdout of the rsync command. It looks 
> like chef is specifically written to discard stderr/stdout with the 
> exception of console output, which isn't useful outside of debugging 
> (provider/execute.rb):
> 
> if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.info 
> (http://Log.info)?
> opts[:live_stream] = STDOUT
> end
> 
> The second is that we would like to use chef's exception/report framework 
> that is available after throwing an exception, but without throwing an 
> exception. Is there a way to trigger an exception that does not cause chef 
> to fail, or a way to use the exception/report framework without throwing an 
> exception? There are many cases where we want to be notified of changes on 
> a chef client, but do not want chef to terminate.
Exception handlers run on failure, whereas report handlers run on success. 
They actually use the same API, so you could write/configure a handler plugin 
to do both if you like.
 
> 
> Currently we are working on redefining the Chef::RunStatus class to give us 
> stderr/stdout, and writing a custom execute resource to pipe the 
> stderr/stdout. If there are ways to do this without modifying chef 
> internals, let us know, as we would prefer to run a vanilla chef install.
You could write a LWRP that uses the ShellOut code to run rsync and then 
makes decisions based on the output. ShellOut recently got extracted to its 
own project (mixlib-shellout), you can read the inline documentation here: 
https://github.com/opscode/mixlib-shellout/blob/master/lib/mixlib/shellout.rb

Within Chef, you can `include Chef::MixinShellOut` to get helper functions 
that allow you to execute commands without going through the OOP dance:

https://github.com/opscode/chef/blob/master/chef/lib/chef/mixin/shell_out.rb
 
> 
> Thanks!
> 
> Jesse 


-- 
Dan DeLeo






Archive powered by MHonArc 2.6.16.

§