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.

Reply via email to