On 08-06-11 16:29, Chris Phillips wrote:
> updated, and hopefully finished:
> 
> Facter.add(:bp_nagios_hostgroups) do
>     setcode do
> 
>         if FileTest.exists?("/var/lib/puppet/classes.txt")
>             bp_nagios_hostgroups = ""
>             File.open("/var/lib/puppet/classes.txt") { |file|
>                 file.each { |line|
>                     if line =~ /^(.+)::nagios-client/
>                         bp_nagios_hostgroups << $1 + " "
>                     end
>                 }
>             }
>             next bp_nagios_hostgroups if bp_nagios_hostgroups
>         end
>         nil
>     end
> end

So, if I understand correctly, you have Nagios hostgroups named exactly
like the Puppet modules, and in the module, you define an empty class
called 'modulename::nagios-client' to do the magic.

Clever, I didn't think of that.

One note: in the code above, you use /var/lib/puppet/classes.txt, but I
think that should be /var/lib/puppet/state/classes.txt, as you correctely
stated in your first mail.

Question: does this solve the 2-run problem on the client? In other words:
during a puppet run, is 'classes.txt' updated before the facts are expanded?

Will explain my setup in a separate mail.

Best regards,
Martijn.




> 
> 
> On 8 June 2011 15:18, Chris Phillips <ch...@untrepid.com
> <mailto:ch...@untrepid.com>> wrote:
> 
>     Actually, I think I see what you mean here, I have a custom fact mid
>     write which looks like this:
> 
>     Facter.add(:nagios_hostgroups) do
>         setcode do
> 
>             if FileTest.exists?("/var/lib/puppet/classes.txt")
>                 nagios_hostgroups = ""
>                 File.open("/var/lib/puppet/classes.txt") { |file|
>                     file.each { |line|
>                         if line =~ /(\S+)::nagios_client/
>                             nagios_hostgroups << $1 + " "
>                         end
>                     }
>                 }
>                 next nagios_hostgroups if nagios_hostgroups
>             end
>             nil
>         end
>     end
> 
>     So once finished this fact will return a list of all class names which
>     are included with the "nagios_client" namespace. So there's actually
>     hopefully nothing else to do at all here, no temp files or anything,
>     it just requires a naming convention in the modules to be followed.
> 
> 
>     On 8 June 2011 15:00, Brian Gallew <g...@gallew.org
>     <mailto:g...@gallew.org>> wrote:
> 
>         I solved this in a similar manner.  I wrote a custom fact (which
>         essentially returned /var/lib/puppet/state/classes.txt) and then a
>         custom function that generated a list of hostgroups based on that.
> 
>         On Wed, Jun 8, 2011 at 6:47 AM, Chris Phillips <ch...@untrepid.com
>         <mailto:ch...@untrepid.com>> wrote:
> 
> 
> 
>             On 8 June 2011 13:30, Martijn Grendelman <mart...@iphion.nl
>             <mailto:mart...@iphion.nl>> wrote:
> 
>                 Hi,
> 
>                 > i want to archive the following:
>                 >
>                 > i define an exported ressource for HostX to be monitored
>                 in nagios:
>                 >
>                 >         @@nagios_host { $fqdn:
>                 >                 ensure     => present,
>                 >                 alias      => $hostname,
>                 >                 address    => $ipadress,
>                 >                 use        => "generic-host",
>                 >                 hostgroups => ubuntu,
>                 >                 target     => $icingahostfile,
>                 >         }
>                 >
>                 > That fine and works as expected and HostX is in
>                 hostgroup ubuntu.
>                 > HostX has included a class ssh which installs the ssh
>                 services and
>                 > configures them. Inside this class i want to define that
>                 HostX is also in
>                 > hostgroup ssh-server.
>                 > And another class, which puts the node in another
>                 environment => there i
>                 > want to define, that HostX is in hostgroup
>                 testing-server and so on.
>                 > How do i archive that? How must the definition inside
>                 all these classes
>                 > look like?
> 
>                 That's a lot more difficult than you might expect.
> 
>                 I recently solved it, by collecting all the necessary
>                 hostgroups for a
>                 host in a file using 'concat', and creating a custom fact
>                 (hostgroups)
>                 that joins all the lines in the hostgroups-file together,
>                 for use with
>                 nagios_host's hostgroups parameter.
> 
>                 The biggest drawback is that it takes two puppet runs on
>                 the target (first
>                 one for populating the hostgroups-file, so that the custom
>                 fact is set
>                 properly on the second run) before the nagios server can
>                 collect the
>                 exported hosts, so it takes a while.
> 
> 
>             Well that's mad... I literally just was about to ask the exact
>             same question after a month of wondering...
> 
>             so where do you put this fact? Sounds like it is on the nagios
>             "client" side, which makes sense in terms of pulling it out,
>             but how does it get in there in the first place? Can you show
>             how this file on each client is managed? That seems to be the
>             only bit I'm not clear on. Are you just putting in a single
>             word for each class? Are you at all able to manage the class
>             being removed from the client? Would you need to routinely
>             purge the file? have a initial stage class that wipes the file?
> 
>             Thanks
> 
>             Chris
> 
>             -- 

-- 
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