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?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.
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 avariable (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.
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$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 ].
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.
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 =>
[...] will /always/ go to 'default text' for me. It has yet to pull back
hiera data.
If that's true then something is dreadfully wrong in your environment.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. IPuppet'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.
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?class testhiera ( $test = $hieratest::test ) {
file { "/tmp/$test" : ensure => present}
}
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 thespecifically 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.
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.