John,
  Thanks for the assist.  I guess I was working from a less than stellar 
example.

On Thursday, May 29, 2014 9:53:14 AM UTC-4, jcbollinger wrote:
>
>
>
> On Wednesday, May 28, 2014 9:16:47 AM UTC-5, smalderma wrote:
>>
>> Hi,
>>
>> I'm working on custom fact that uses Facter::Util::Resolution.exec to run 
>> a command that returns output I want to parse with regex.  If I write up a 
>> ruby shell script like:
>>
>> #!/usr/bin/ruby
>>
>> out = `<command>`
>> out = out.gsub!(/<regex>/, "\\1\\3")
>> puts "#{out}"
>>
>> The desired output comes to the screen, every time, and on every system I 
>> run it.
>>
>> If I modify the script to be a fact like so:
>>
>> # custom fact
>> require 'facter'
>> Facter.add(:newfact) do
>>   out = Facter::Util::Resolution.exec("<command>")
>>   out = out.gsub!(/<regex>/, "\\1\\3")
>>   secode { out }
>> end
>>
>> A puppet run actually prints the full output of the command twice after 
>> syncing the fact.  Running facter -p newfact does the same.  On top, the 
>> printed output is the raw output not the regex filtered.
>>
>> What am I doing wrong here?
>>
>>
>
> For one thing, you are performing your fact evaluation outside the setcode 
> {} block.  The part in the block passed to Facter.add() but outside setcode 
> {} runs when the fact is added to Facter, but the part inside the setcode 
> {} block is run when the fact is evaluated.  I speculate that you are 
> getting output both times.  
>
> There are very few statements that should ever appear in that middle 
> area.  The one that comes first to mind is 'confine', and others would be 
> similar Facter-specific things.
>
> Your fact should look more like this:
>
> require 'facter'
> Facter.add(:newfact) do
>   setcode {
>     out = Facter::Util::Resolution.exec('<command>')
>
>     # F::U::R::exec() may return nil
>     out or out.gsub(/<regex>/, "\\1\\3")
>   }
> end
>
>
> Note that whatever value is returned by the setcode {} block is taken as 
> the value of the fact.  There is no particular advantage to assigning it to 
> a variable first, though it is harmless to do so.
>
>
> John
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/8e04eee8-ff63-47ca-9221-e225dd6ec5f1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to