On Wed, Aug 22, 2012 at 11:13 AM, ZJE <countac...@gmail.com> wrote:
> The slowdown comes from the command that I run before any Facter.add
> statements. It takes roughly 1.5 seconds to run and I would need to run it
> roughly 64 times if I had it in each Facter.add. Many facts are generated by
> a loop that contains a Facter.add, so I feel like some sort of exception
> would make things easier.  I'd like to avoid using a "giant if statement" if
> possible (there are roughly 100 lines of code that would be encapsulated).
> One of the main issues I have is that there are two different checks that
> happen in different parts of the code. I recognize that some may consider
> adding more if-statements as increased readability, but I feel like the
> added indentation for large chunks of code causes confusion for readers
> (especially when looking at loops).
>
> Thanks so much for your reply!

You should be able to do something like this, which worked for the
quick test I did, but I haven't extensively tested it.

arr = ["one", "two", "three", "four"]

if true then
  # exit due to conditions for not running on this host
  exit
else
  # run the command you'd run and store in an instance variable
end

arr.each do |e|
  Facter.add("tester_#{e}") do
    setcode do
      "bleah"
    end
  end
end






>
> On Wednesday, August 22, 2012 11:36:13 AM UTC-5, Nigel Kersten wrote:
>>
>> On Wed, Aug 22, 2012 at 8:49 AM, ZJE <count...@gmail.com> wrote:
>> > I have a script in $FACTERLIB that queries proprietary vendor tools for
>> > RAID
>> > configuration. These tools are quite slow, so the top of my .rb file
>> > calls
>> > the program once and stores the output in a variable. Multiple
>> > Facter.add
>> > statements then populate the facts. I would like to bail on this custom
>> > fact
>> > script if it's being run on a VM or unsupported host. I don't think
>> > "confine" would work here since I have multiple Facter.add and I would
>> > ideally like to bail before it gets to any of them. If I try "exit,"
>> > facter
>> > just exists and no other facts are collected. Looking at the code in
>> > facter/util/loader.rb, I could throw a ScriptError exception - but that
>> > seems hackish.
>> >
>> > Anyone have experience or suggestions for doing something similar? I've
>> > tried searching existing code with no luck.
>>
>> You can surround the Facter.add calls with explicit checks like:
>>
>> if Facter.value(:kernel) == "Darwin"
>>   Facter::Util::Macosx.hardware_overview.each do |fact, value|
>>     Facter.add("sp_#{fact}") do
>>       confine :kernel => :darwin
>>       setcode do
>>         value.to_s
>>       end
>>     end
>>   end
>> end
>>
>> (Yes, that confine there is somewhat redundant...)
>>
>> Are you really seeing a significant slowdown though if you don't do
>> this and simply have the confine call within each Facter.add ? If so,
>> we should work on that.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/puppet-users/-/K5Mm3du3mkQJ.
>
> To post to this group, send email to puppet-users@googlegroups.com.
> To unsubscribe from this group, send email to
> puppet-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/puppet-users?hl=en.



-- 
Nigel Kersten | http://puppetlabs.com | @nigelkersten
Schedule Meetings at: http://tungle.me/nigelkersten

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to