All-
Is there a canonical way to access hierarchical facts like
$facts['os']['release']['major'] or $facts['networking']['fqdn'] from
an ERB template? I've been searching for a best practice answer and
so far I've only found conflicting advice.
I'm specifically asking about facts, not variables from other
classes/scope.
I've found recommendations suggesting each of these:
<%= $facts['os']['release']['major'] %>
<%= @facts['os']['release']['major'] %>
<%= $facts.dig("os","release","major") %>
<%= @facts.dig("os","release","major") %>
as well as suggestions to use scope[] or scope.lookupvar() or use dotted
fact notation, but I haven't figured out how to make either the scope or
dotted route work in ERB.
The "$facts.dig()" suggestion comes directly from the Puppet 8
compatibility wiki entry:
https://github.com/puppetlabs/puppet/wiki/Puppet-8-Compatibility
but it doesn't seem to work for me. Using the @facts.dig() does, though.
So far the two methods I've found that work are
<%= @facts['os']['release']['major'] %>
or
<%= @facts.dig("os","release","major") %>
Is there any reason to prefer one over the other, or some other method
that I haven't found yet?
I don't want to convert our existing ERB templates to EPP.
I know I could set local variables in a puppet class like
$osreleasemajor = $facts['os']['release']['major']
$fqdn = $facts['networking']['fqdn']
and then access the local variables in the template, but if possible I
would like to avoid that approach.
Thanks,
Tim
--
Tim Mooney
Tim.M...@ndsu.edu
Enterprise Computing & Infrastructure /
Division of Information Technology /
701-231-1076 (Voice)
North Dakota State University, Fargo, ND 58105-5164