Today looking for a solution to this I came up with a nice solution. I know 
this is old but I'm posting it just in case is useful for somebody:

on hiera.yaml:

:hierarchy:
  - 'host/%{::domain}/%{::hostname}'
  - 'domain/%{::domain}'
  - 'role/%{system_role}'
  - 'common'

on site.pp

node default {

  $system_role = get_system_role()

}

and get_system_role is a custom function:

require 'yaml'

module Puppet::Parser::Functions

  newfunction(:get_system_role, :type => :rvalue) do |args|

    hostname = lookupvar('fqdn')

    enc = %x[/etc/puppet/node.rb #{hostname}]

    yaml = YAML::load enc

    system_role = yaml['classes'].keys.first.scan(/::([a-z]*)/).flatten[0]


  end

end

This is asuming you use an ENC to assign classes like foreman / cobbler or 
pe

Cheers

Juan

On Wednesday, August 21, 2013 11:29:56 PM UTC+1, Ellison Marks wrote:
>
> you might want to explicitly top-scope role, ie.
>
> $::role = 'nameserver'
>
> Not sure if that will matter in this case, but I don't think it can hurt.
>
> As an aside, we set our role variable with facter.d on the nodes 
> themselves, as we don't have hostnames that easily work out to roles.
>
> On Wednesday, August 21, 2013 10:20:56 AM UTC-7, JeremyCampbell wrote:
>>
>>
>> I need to define data for roles so I add the 'role' dynamic data source.
>>
>> - "%{::environment}/%{::clientcert}"
>> - "%{::clientcert}"
>> - "%{::environment}
>> - "%{::role}"
>> - common
>>
>> Our site.pp uses a hostname regex to classify nodes into roles e.g.
>>
>> node /^ns\d+$/ {
>>   include role::nameserver
>> }
>>
>> Can we add the $role variable to the role class and hiera will use it? 
>> e.g. 
>>
>> class role::nameserver { 
>>   $role = 'nameserver'
>>   include base
>>   include bind
>>   include shorewall
>> }
>>
>> Would this work? Is there a better pattern that doesn't involve having to 
>> define custom facts on the servers?
>>
>

-- 
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/49b2b324-90f2-44d7-b46f-f35ec2981e67%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to