Hello all,

I ran into a problem with hiera and in particular, assigning or not 
assigning default values to variables within a data source.  I'm using the 
mcollective module (currently using version 1.1.6) and I've built a very 
simple hiera backend to start adding site-specific data into a single 
place.  Within the mcollective init.pp manifest, I've identified four 
places for which I'd like to abstract data into hiera; they are:

$server        = hiera('::mcollective::server'),
$client         = hiera('::mcollective::client'),
$middleware = hiera('::mcollective::middleware'),
$middleware_hosts = hiera('::mcollective::middleware_hosts'),

I've created a fqdn specific hiera source (ourlocalhost.local.yaml) and 
added this:

classes: 
  - mcollective

# mcollective parameters
mcollective::middleware: true
mcollective::server: true
mcollective::client: true
mcollective::middleware_hosts:
  - ourlocalhost.local

Upon running puppet on this specific host, the puppet run completes and I 
marvel at the wonder of puppet and heiras' beautiful co-existence.

Now I'd like to simply add mcollective to any node in my network so I go to 
common.yaml and add the following:

classes:
  - mcollective

# mcollective parameters
mcollective::server: true
mcollective::middleware_hosts:
  - outlocalhost.local

However, upon running puppet on a fresh machine, I get the following error:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: 
Could not find data item ::mcollective::client in any Hiera data file and 
no default supplied at 
/etc/puppet/environments/test/modules/mcollective/manifests/init.pp:5 on 
node mynode.local

If I add this line into common.yaml (mcollective::client: false) then I get 
the following failure:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: 
Could not find data item ::mcollective::middleware in any Hiera data file 
and no default supplied at 
/etc/puppet/environments/test/modules/mcollective/manifests/init.pp:6 on 
node mynode.local

If I then go back into common.yaml and add 'false' to the values I don't 
want, everything works:

classes: mcollective
mcollective::middleware: false
mcollective::server: true
mcollective::client: false
mcollective::middleware_hosts:
  - ourlocalhost.local


I've been searching for answers on the interwebs and haven't been able to 
find anything specific for this one so I figured I'd ask a few questions:

1.  Is this the expected functionality?  If so, am I to understand that I 
have to keep track of every hiera call (ex $server = 
hiera('::mcollective::server'), $client = hiera('::mcollective::client')), 
in my many modules and create defaults for each of these values in the 
various hiera source files that I create?  My understanding was that I 
could create these hiera calls in my classes and a al carte these values 
within my hiera source files.  Am I mistaken and if not, doesn't that 
create redundant data within my hiera source file tree?  Also, if future-me 
adds one additional hiera call to the init.pp, does that mean I have to 
track down every hiera data source and add a default value to each one?  

Which brings me to my next question:

2.  It seems that things could get messy very quickly if I am declaring 
parameters via hiera (let's take this mcollective example) and I have 
multiple hiera source files for which these values are declared.  As an 
example, let's say I have a custom fact which determines that a node is a 
'server' based on hostname. I then create a hiera data source called 
'server.yaml' and assign the mcollective parameters to that data source and 
all is well in the universe.  

But if I later I want to create a custom hostname data source for that 
server called 'nodename.yaml' and assign parameters from that source, I now 
have two places to check for declared values.  Additionally, if I go to the 
mcollective init.pp file, I simply see the source for that variable is 
being called from hiera but since I have two data sources, how will 
future-me know which one to check?  Further more, if I have a colleague 
that is just familiar enough with our infrastructure to check the init.pp 
and indeed he/she sees that the data is coming from hiera, he/she won't 
know where to look if we've defined the data in our 'server.yaml' our 
'node.yaml' and our 'common.yaml'.  Obviously this is a simplistic example 
but am I thinking about this wrong?  Perhaps I've missed/overlooked a major 
piece of the overall hiera design?  Or, I'm simply a jackass and I'm "using 
it wrong?" 

3.  If I want to add multiple 'classes' to say, common.yaml, is there a 
particular way in which I should is the below structure the preferred 
method and if so, does hiera parse these from top to bottom or am I likely 
to run into resource ordering problems in the future?:

classes:
  - one class
  - two class
  - three class

# class one parameters
stuff
blah

# class two parameters
stuff
blah

# class three parameters
stuff
blah


Thank you in advance to whomever replies with thoughts as I realize this is 
quite a long post.

Cheers,

Mike

-- 
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/1c26c35b-f0c0-4caf-9ef7-9dfb9070fc2e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to