Suppose you have two modules 'foo' and 'bar'. You also have two
defines, 'foo::do_stuff' and 'bar::more_stuff'.
define foo::do_stuff (
$var1 = 'a',
$var2 = 'b'
) {
bar::more_stuff { 'test': }
}
define bar::more_stuff (
$optional_var = 'ignore'
) {
file { '/tmp/test':
content => template('bar/random.erb')
}
+++ random.erb +++
var1 = <%= var1 %>
var2 = <%= var2 %>
So, here, puppet complains about the scope of var1 and var2 but what
should the correct scope be? foo::do_stuff::var1, etc...? But how does
that work with multiple define calls to foo::do_stuff?
This, of course, can be avoided by putting the template under
foo/templates and forcing the passage of content to bar::more_stuff
but I'm not quite sure *why* this isn't supposed to work and what to
do about it with the notice that 2.8 will force the scoping of all
variables.
Thanks,
Trevor
--
Trevor Vaughan
Vice President, Onyx Point, Inc
(410) 541-6699
tvau...@onyxpoint.com
-- This account not approved for unencrypted proprietary information --
> --
> You received this message because you are subscribed to the Google Groups "Puppet Users" group.
> To post to this group, send email to puppet...@googlegroups.com.
> To unsubscribe from this group, send email to puppet-users...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
>
For example:
Web Server module define -> Firewall code define -> ERB using higher
level variables.
There's no reason to stuff everything into a big data store when you
can easily pass it down. *But* if you try to use the top level
variable in the second define call ERB, then you've got issues.
I feel that this needs to be either forbidden (break the compile) or
allowed. But we'd need to know how to allow it.
Trevor
If you were actually passing the variable, yes. But you're not, you're expecting to reach into a non-class (essentially a grab-bag of resources) and extract data as though it were a class. It isn't and AFAIK you can't. You'll have to put the data in an actual class and address it from there.
Trevor
Foo::Do_stuff['name']
Did you try:
Foo::Do_stuff['name']::var1
Unfortunately, there's not really a way to know what 'name' would be
from the lower level define unless you were sure to call it with the
same name.
If you did that, you could use Foo::Do_stuff[$name]::var1 but I don't
really see another way of doing it.
Probably a bug.
Trevor
I'm guessing that there's no way to know the calling scope.
Filed as bug 11584 even though these will all be compile failures as
of 2.8 (in theory).
Trevor
I just ran into an interesting scenario where I didn't know how to
scope my variables and I'd just like to share for the crowd.Suppose you have two modules 'foo' and 'bar'. You also have two
defines, 'foo::do_stuff' and 'bar::more_stuff'.define foo::do_stuff (
$var1 = 'a',
$var2 = 'b'
) {
bar::more_stuff { 'test': }
}define bar::more_stuff (
$optional_var = 'ignore'
) {
file { '/tmp/test':
content => template('bar/random.erb')
}+++ random.erb +++
var1 = <%= var1 %>
var2 = <%= var2 %>
The issue is that, should you call that define more than once, there's no way for Puppet to know which one to use unless it walks directly up the call
stack first.
Trevor
- --
Trevor Vaughan
Vice President, Onyx Point, Inc.
email: tvau...@onyxpoint.com
phone: 410-541-ONYX (6699)
pgp: 0x6C701E94
- -- This account not approved for unencrypted sensitive information --
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iQEcBAEBAgAGBQJO/HDxAAoJECNCGV1OLcypqScIAIlaCSNBRncSh4/1zGXyuvX5
CA35+lpr4TaQ8JweGltLmY0Ceb3RQcLyiqXdna3pZ1+kLNiKnrlysaRk6/e91zO7
0ngbhMGbOJLK0TyHFPq+5m+VjB0DvEvCaNRYIabQZWOwVKRLCpQYaFOoQPLyZ3f2
JX3YsvdhqhreVxqFKv7SlStc1cLxSoh8+TjWTwxQsa9Sq6Ff9P+iY+zTyHbZU7IP
opBLbg1uIS1xIYSYILZKtkDvQjAVfY8oYvmslz0MXKyS6TTZMVYGs8F8zJUZSpC8
lO8LEAyLtXsPIAGKNevfKpka3KxZ2wQ7mM70ydK3ShPEYe77V9K/oXBGeg2dh7E=
=/Fg0
-----END PGP SIGNATURE-----
I just think that this should be a failure case since it is currently
(and probably has always been) something that shouldn't be done but
happened to previously work.
Trevor
> --
> You received this message because you are subscribed to the Google Groups "Puppet Users" group.
> To post to this group, send email to puppet...@googlegroups.com.
> To unsubscribe from this group, send email to puppet-users...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
>
--
Trevor Vaughan
Vice President, Onyx Point, Inc
(410) 541-6699