I'm going this way:

roles_file = ""

if Facter.kernel = 'linux'
roles_file = "/etc/roles_facts.txt"
elsif Facter.kernel = 'windows'
roles_file = "C:\\roles_facts.txt"
end

if File.exists?(roles_files)
File.readlines(roles_file).each do |line|
if line =~ /^(.+)=(.+)$/
fact  = $1
value = $2

Facter.add(fact) do
setcode {value}
end
end
end
end


:) 

-- 
Frank


On Friday, September 28, 2012 at 2:44 PM, Frank wrote:

> 
> 
> -- 
> Frank
> 
> 
> On Friday, September 28, 2012 at 2:35 PM, jcbollinger wrote:
> 
> > 
> > 
> > On Friday, September 28, 2012 6:05:54 AM UTC-5, ureal frank wrote:
> > > Hi, 
> > > 
> > > I've seen some blog posts about adding server roles to Puppet.
> > > 
> > > Some of them with this fact snippet:
> > > 
> > > if File.exists?("/etc/roles.txt")
> > > File.readlines("/etc/roles.txt").each do |line|
> > > if line =~ /^(.+)=(.+)$/
> > > fact  = $1
> > > value = $2
> > > 
> > > Facter.add(fact) do
> > > # confine :kernel => "Linux"
> > > setcode {value}
> > > end
> > > end
> > > end
> > > end
> > > 
> > > 
> > > 
> > > Since I have both linux and windows boxes backed with Puppet, it is 
> > > correct to add the "confine :kernel => "Linux"" next to "Facter.add(fact) 
> > > and replicate the whole block changing this "confine :kernel to "Windows" 
> > > and the path (to match window paths c:\foo)?
> > > 
> > > Is this the right approach?
> > 
> > 
> > No. The code you presented tests the Unix-style path well before it gets to 
> > the point where your confine enters the picture.  If the file was found at 
> > all then you do not need to 'confine' to Linux (unless you need to 
> > distinguish that case from other Unixes, such as OS X or Solaris).
> > 
> > You could duplicate the code and change the path (still not needing a 
> > 'confine'), but if I were writing this I would probably test the "kernel" 
> > or "os" fact at the start to determine which path to look for in the first 
> > place, then use just one fact declaration (still with no need for a 
> > 'confine'). 
>  
> Ok, it makes sense. Then for me to use $$::kernel variable on this fact 
> definition, I must require 'facter' first or I just use it in a conditional 
> clause like this?
> 
> if $::kernel = "linux" then
> # linux fact code
> else
> # windows fact code
> end 
>  
> 
> Frank
> 
> > 
> > 
> > John
> > 
> > -- 
> > 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/-/q1jyUOogM0cJ.
> > To post to this group, send email to puppet-users@googlegroups.com 
> > (mailto:puppet-users@googlegroups.com).
> > To unsubscribe from this group, send email to 
> > puppet-users+unsubscr...@googlegroups.com 
> > (mailto:puppet-users+unsubscr...@googlegroups.com).
> > For more options, visit this group at 
> > http://groups.google.com/group/puppet-users?hl=en.
> 

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