I also forgot to mention that when you pass fact variables to perform a Hiera lookup via the command line, you should fully qualify the variables in the same way as you did in hiera.yaml. Your command should look like
hiera -c hiera.yaml ldap_servers ::env=test See https://docs.puppetlabs.com/hiera/1/command_line.html#command-line-variables -Alex On Wed, Apr 29, 2015 at 2:00 PM, Alex Elman <[email protected]> wrote: > Grant, > > A variable that starts with two colons (::variable) fully qualifies a > top-scope variable. See page 28 in "Extending Puppet" for more information > about variable scope. That discussion doesn't mention that Facter facts are > considered top scope. > > It's best practice to avoid using local variables when defining the Hiera > hierarchy. The best practices described here > https://docs.puppetlabs.com/hiera/1/puppet.html#best-practices and here > https://docs.puppetlabs.com/hiera/1/variables.html#passing-variables-to-hiera > both mention reasons to avoid specifying your hierarchy with local > variables. Specifically, > > "In Hiera, a re-used fact name can have more distant effects, so you >> still need to defend against it." > > > %{::env} directly refers to the Facter fact whereas %{{env}} is free to > interpolate from other scopes before ever reaching the top-scope. The > examples you see that don't use double colons are probably referencing > variables in node or class scope. > > > -Alex > > On Wed, Apr 29, 2015 at 12:04 PM, Grant Schoep <[email protected]> > wrote: > >> I'm using: >> CentOS 7.1 >> Puppet 3.6.2 >> Hiera 1.3.4 >> >> I'm following some very simple examples and learning how to use hiera. >> One thing has me confused. Is sometimes I see examples having :: and some >> not. >> >> I have three files in use here. >> >> *____________* >> *my hiera.yaml file* >> --- >> :backends: >> - yaml >> >> :hierarchy: >> - "nodes/%{::fqdn}" >> - "env/%{::env}" >> - common >> >> :yaml: >> :datadir: /etc/puppet/hieradata >> __________ >> >> *My /etc/puppet/hieradata/common.yaml* >> --- >> ldap_servers: >> - 10.1.1.2 >> - 10.1.1.3 >> ___________ >> >> *My /etc/puppet/hieradata/env/test.yaml* >> --- >> ldap_servers: >> - 10.1.1.4 >> _______________ >> >> >> If I run "hiera ldap_servers" I get >> ["10.1.1.2", "10.1.1.3"] >> >> If I run "hiera ldap_servers env=test" I STILL get >> ["10.1.1.2", "10.1.1.3"] >> >> I would have expected >> ["10.1.1.4"] >> >> >> Many examples I have seen, including the one in "Extending Puppet, by >> Alessandro Franceschi" Seem to says this should work (the env part). >> >> I mucked around with it and removed changed my - "env/%{::env}" line to >> - "env/%{env}" in my hiera.yaml file. And presto it works as expected now, >> just returning the 10.1.1.4 >> >> >> So my question is, what is the "::" doing? I see many examples with and >> without it. >> >> 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 [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/puppet-users/8314abdd-d125-4c00-946f-986e5105445d%40googlegroups.com >> <https://groups.google.com/d/msgid/puppet-users/8314abdd-d125-4c00-946f-986e5105445d%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Alex Elman > -- Alex Elman -- 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/CAD-8G_qf%2BmaDDHndOjj8nH37_9%3D_5%2Bdkvhf_fJggbUs4nfe6Mg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
