On 01/03/18 16:03, Christopher Wood wrote:
> As background, for "reasons" I am looking at individual domains in hiera as keys. I do have questions beyond "why would I even".
>
> A) hiera lookup key format
>
> I notice that if I use puppet lookup to test things I get similar behaviour as using lookup() from a manifest, a key with dots in it is truncated. Notice how the node hierarchy understand the key as "www" below(1). I could just use underscores but I'd rather understand what was going on first.
>
A '.' is an operator that "digs" into a data structure. If you are
looking up the key "foo", and it results in a hash, and this hash has a
key "bar", you can get its value by looking up "foo.bar".
You can quote the period to make it a verbatim period char. For example
by looking up "'foo.bar'", or "foo'.'bar" would lookup the entire key
including the period.
The '%' char has special meaning.
> Is there a list of permitted characters in a hiera key lookup?
>
You should read up on the hiera documentation to get all the details.
It is on puppet's documentation site.
> B) hierarchy interpolation
>
>
https://puppet.com/docs/puppet/5.4/hiera_intro.html#hierarchies-interpolate-variables
>
> Is there anything else a hierarchy can interpolate? I'm thinking it would be easier to explain to people that 'www.boitc.test' information was listed under hieradata/domains/www.boitc.test.yaml rather than in the longer hieradata/domains.yaml.
>
> Failing that, is it future-proof to use $title in a hierarchy in the same manner as $classname seems sometimes used?
>
That is not a good design, it makes keys have different value depending
from where they are looked up. In addition it forces hiera to have to
evict the caches so it is bad for performance as well.
Only use top scope variables (for example facts) in your hierarchy.
>
> (1) The lookup that is misunderstood in the environment data provider.
>
> puppet lookup --node
host.domain.com -d 'www.boitc.test'
>
quote the '.' to make it work
> Searching for "www.boitc.test"
> Global Data Provider (hiera configuration version 5)
> No such key: "www.boitc.test"
> Environment Data Provider (hiera configuration version 5)
> Using configuration "/etc/puppetlabs/code/environments/puppetmasters_tls/hiera.yaml"
> Hierarchy entry "nodes"
> Path "/etc/puppetlabs/code/environments/puppetmasters_tls/hieradata/nodes/host.domain.com.eyaml"
> Original path: "nodes/%{::trusted.certname}.eyaml"
> No such key: "www"
>
>
- henrik
--
Visit my Blog "Puppet on the Edge"
http://puppet-on-the-edge.blogspot.se/