Wow! Thanks for the responses John!
> On Thursday, October 9, 2014 8:52:00 AM UTC-5, jcbollinger wrote:
> If the master had successfully looked up your datum then the result would
> have been as you expected. The behavior you present is characteristic of
> (and well documented for) the case where the automatic lookup fails,
> leaving the master to fall back to the default value given in the class
> definition. The problem is not in your Puppet manifests, and your CLI
> tests demonstrate that it is not in your data themselves, but those are
not
> the only possibilities.
If it isn't hiera and it isn't puppet, what other possibilities are there?
Any idea on how I can debug this better? I would love to see in the puppet
logs something like "found a variable with no definition, looking up in
hiera in this file...nope didn't find it...trying this other file...ah
found it" but I haven't seen anything on how to better troubleshoot /how/
puppet is determining if a variable is in hiera or not.
> How's hiera involved in that? You now have $test as an uninitialized
local
> variable (no longer a class parameter). It expands to nothing when you
> interpolate it into your filename, so you're managing File["/tmp/"], which
> is equivalent to File["/tmp"]. That file (directory) already exists, and
> that's all you ask Puppet to ensure, so Puppet does nothing.
Wow. That totally makes sense. I was under the impression (very likely a
mistaken impression apparently) that puppet would look at $test, not find
anything in it, and then do look up in hiera for the full scope of the
variable (aka: class::variable -> testhiera::test). So this explains that
some of the "oddity" i've seen is just a misunderstanding of the
documentation. Thanks for pointing that out!
On Thursday, October 9, 2014 9:36:38 AM UTC-5, jcbollinger wrote:
>> $bar = hiera('myfoo::bar', 'defaultvalue')
>> However, the puppet docs basically say do this for 2.7 but not for 3+
>> [ https://docs.puppetlabs.com/hiera/1/puppet.html ].
> In Puppet 2, that was the only way you could do it. After Puppet 3 was
> released, it was common for module authors to attempt to support both P2
and
> P3, which tied them to that form. Even with official support for the P2
> series ending, there is probably still interest in compatibility from some
> quarters.
>
> As for using only automatic parameter binding in P3, that's basically a
code
> style argument, its position right in the documentation notwithstanding.
The
> advice is not bad as far as it goes, but do note that it also presents an
> apparently acceptable (albeit downplayed) alternative: explicitly document
> the hiera keys your class uses. It seems like you've probably been around
> enough to see a code-style war or two, so I'll leave it there.
OK. So it isn't going to cause me problems, it is just backwards
compatibility and/or a code style choice. Then in that case, I may start
using it just so that I have it explicitly called for my own use when I
look at the code in 6 months. :-)
[snip]
>> 1.2) class myclass ($parameter_one = "default text") { ...content =>
$parameter_one, ...}
>> [...] will /always/ go to 'default text' for me. It has yet to pull back
the
>> hiera data.
> If that's true then something is dreadfully wrong in your environment.
Hrm...that's not good. But this test VM is a very new build of Scientific
Linux 6.5 with the latest puppet. I really haven't made many changes. Not
sure what I could have goofed on it. Any suggestions for debugging what is
wrong? I mean nothing is really being kicked out in the log files (but that
doesn't mean there isn't a problem).
> Class parameter defaults do not interfere with automated data binding.
> Puppet's automated test suite verifies this, so if you're seeing different
> behavior then there is some sort of local modification or environment
issue
> that is causing breakage. I hope you'll forgive me if I judge it more
likely
> that your tests are misleading you.
No worries. I get it. Chances are much more likely I goofed something up. I
just don't know what. :-)
>> 2) $ cat modules/testhiera/manifests/init.pp
>> class testhiera ( $test = $hieratest::test ) {
>> file { "/tmp/$test" : ensure => present}
>> }
> How is that different from your 1.2, which you say doesn't work?
Not sure i understand your question. The 1.2 that doesn't work I am setting
a default value in hopes that the hiera value is taken. In this example, I
am explicitly calling the hiera value...Now functionally it may be the same
(or at least it is supposed to be), but that isn't how I see it behave.
> It seems like you may have a misconception: automated data binding applies
> specifically to class parameters, as an aspect of resolving their
values. It
> does not apply to class variables that are not parameters, and it is not
> automagically applied to parameters of classes that have not yet been
evaluated.
>
> Your code (2) is dangerous for one of two reasons:
>
> If the code is written as you intended, then it relies for a class
parameter
> default on a class variable of a different class, without doing anything
to
> ensure that that other class (hieratest) has been evaluated. You can find
> extensive discussion of this issue and others related to using other
classes'
> variables for parameter defaults by googling "puppet params class
pattern".
>
> If you meant to write "class testhiera ( $test = $testhiera::test )", then
> you are specifying the default value for class parameter $teshiera::test
to
> be itself. In that case, that default value will be used only in
situations
> where it has not been intialized, so I think it's functionally equivalent
to
> "class testhiera ( $test = undef )".
>
> Either way, your code will work fine as long as the hiera lookup for your
> class parameter succeeds (so that the default value is not consulted).
It's
> what will happen when the lookup accidentally or intentionally fails that
may
> come back to bite you in the assets.
The second case was my intent, and that might explain a lot of the
behaviour I have seen.
I have plans for tonight, but I am going to try hacking on hiera again this
weekend. Fingers crossed I can make good progress in understanding hiera.
:-)
Thank you for your help on this!
~Stack~
--
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/f6a59e5f-e254-479c-a189-a6d6f1963444%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.