FAQ
As far as I'm aware, in the default setup, there is no top level hieradata.
as the comment says, the default datadir is

/etc/puppetlabs/code/environments/%{environment}/hieradata

So each environment will have it's own hieradata directory with it's own
common.yaml. /etc/puppetlabs/code/hieradata will never be looked in.

I can see some possible ways to accomplish your goal. The braindead one is
to just link common.yaml into each environment's hieradata.

A slightly more interesting approach would look like this:

---
:backends:
   - yaml
:hierarchy:
   - "%{::environment}/%{::trusted.certname}" # or however you want files
organized under the environments
   - common

:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /etc/puppetlabs/code/environments/%{environment}/hieradata on *nix
# - %CommonAppData%\PuppetLabs\code\environments\%{environment}\hieradata
on Windows
# When specifying a datadir, make sure the directory exists.
   :datadir: /etc/puppetlabs/code/hieradata

Then your hieradata folder would look like this:

/etc/puppetlabs/code/hieradata/
   common.yaml
   production/
     node1.example.com
     node2.example.com
   staging/
     node3.example.com
   dev/
     node4.example.com

On Thursday, July 23, 2015 at 2:23:34 PM UTC-7, Stack Kororā wrote:

Greetings,

I need help; I have been going in circles for too long now and I am sure
it is something silly that I over looked. I am attempting to use
environments with a new server build for Puppet 4 (never could get it
working under the Puppet 3 series; but I never put /that/ much effort into
it either). I have a lot of servers that I really don't want to manage by
hand or manually set anything per server. I would much rather have the
agent contact the puppet server to find out what group it should be in.
Yes, there is documentation on this but I can't get it to work and almost
all of my internet sleuthing has returned results for the old way of doing
things which doesn't appear to be working with Puppet 4 and Hiera 3. Any
help would be much appreciated.

My objective: Have a top-level hiera source that tells agents which
environment to use for that host. Have hiera data in the environments
provide further details (ntp servers and what not) for configuring the host.

From my understanding of this[1] it should work. I also found several
online blog examples doing something similar but using the old puppet3 way
of doing things.
[1] https://docs.puppetlabs.com/guides/external_nodes.html

Everything in the production environment works all the time with Hiera. No
other environment works with Hiera calls. I have found it easier to test
for the ntp configuration because unless the system and environment are
"production", testing for the environment just gives 'nil' which doesn't
tell me squat about what is wrong. At least asking for the ntp gives me
errors to look at. :-)

First, lets look at my top level hiera. Pretty default. You can see that I
attempted to force the location for the yaml, but that didn't work either
and I don't want _all_ the servers in the top level anyway.

$ cat /etc/puppetlabs/code/hiera.yaml
---
:backends:
- yaml
:hierarchy:
- "nodes/%{::trusted.certname}"
- common

:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /etc/puppetlabs/code/environments/%{environment}/hieradata on *nix
# - %CommonAppData%\PuppetLabs\code\environments\%{environment}\hieradata
on Windows
# - /etc/puppetlabs/code/hieradata
# When specifying a datadir, make sure the directory exists.
:datadir:



Now, lets look at the common file for the production environment.

$ cat /etc/puppetlabs/code/environments/production/hieradata/common.yaml
---
ntp::servers:
- 192.168.109.2
- 192.168.109.3
environment: 'production'

$ puppet apply --certname=puppetmaster01.me.fqdn -e
"notice(hiera('ntp::servers'))"
Notice: Scope(Class[main]): [192.168.109.2, 192.168.109.3]
Notice: Compiled catalog for puppetmaster01.me.fqdn in environment
production in 0.43 seconds
Notice: Applied catalog in 0.09 seconds

Great! Hiera is working! Now lets move that common file to the top level
so that we can specify which environment to use (again testing with ntp so
we get more than just 'nil' back).

$ mv /etc/puppetlabs/code/environments/production/hieradata/common.yaml
/etc/puppetlabs/code/hieradata/common.yaml
$ puppet apply --certname=puppetmaster01.me.fqdn -e
"notice(hiera('ntp::servers'))"
Error: Evaluation Error: Error while evaluating a Function Call, Could not
find data item ntp::servers in any Hiera data file and no default supplied
at line 1:8 on node puppetmaster01.me.fqdn


I found a blog that said the puppetserver has to be restarted after every
yaml change (I think that is /way/ off base as that hasn't been quite my
experience) but even doing a restart doesn't change the outcome.


Where I am stuck:
* I can't get any host to work with any environment except "production".
Nothing seems to work. Not hiera, nor puppet agent -t. The host just isn't
found.
* I can't get the top level hiera to provide any details to the agent.

Any help would be greatly appreciated!
Thanks!
--
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 puppet-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/dadfcc02-f381-4b1a-8cda-fbac999d7e37%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 2 of 7 | next ›
Discussion Overview
grouppuppet-users @
categoriespuppet
postedJul 23, '15 at 9:23p
activeJul 24, '15 at 1:05p
posts7
users3
websitepuppetlabs.com

People

Translate

site design / logo © 2022 Grokbase