Very thanks for your detailed explanation :) For the last question, what doubt me is only fact variables in a template which is invoked by a define will throw the warning, if the template is invoked by a class, everything is ok.
On Wed, Nov 16, 2011 at 10:54 PM, jcbollinger <john.bollin...@stjude.org>wrote: > > > On Nov 16, 3:59 am, flex <frostyn...@gmail.com> wrote: > > I read the guide athttp:// > docs.puppetlabs.com/guides/scope_and_puppet.htmlandothers' > > mail, i am a little confused now, below is my understanding: > > > > 1. top scope only refers to site.pp, not include node definitions and > facts. > > > Top scope refers to anything outside all class and node definitions. > Top scope variables can appear in any manifest file, but site.pp is a > very good choice because it is always processed, and first. Top scope > variables in most other locations may sometimes fail to be visible in > manifests other than the ones where they appear. > > If you put a class or node definition in site.pp, that class's or > node's variables are not in top scope. > > Facts certainly are in top scope; in some manifest sets they are the > *only* variables in top scope. > > > > 2. in puppet class, using variables not local, must specify the > namespace, > > like $class::variable, > > if it's a top scope variable or a fact variable or a variable in node > > definition, using $::variable. > > > For Puppet 2.7.x and below, this is not always the case: you can > access variables in the current dynamic scope by their simple names. > Top scope variables are always in the current dynamic scope, but a > narrower scope might define a variable having the same simple name, so > it is always safest to use $::variable when that's what you mean. > Dynamic scope can apply to class variables, too, but again it's safest > to use refer to non-local variables by their fully-qualified names. > > Starting in Puppet 2.8, however, it will be mandatory to refer to non- > local variables by their fully-qualified names. In preparation for > that, Puppet 2.7.x emits warning when your manifests resolve non-local > variables from the dynamic scope. > > > > 3. in template erb files, always using scope.lookupvar("class::variable") > > to get the value, even if the erb and the variable used in the same > module > > or it is a fact variable > > > The docs suggest that templates can use all the simple variable names > that can be resolved in the scope where they are invoked, but I cannot > independently confirm that. Certainly, wherever you need or want to > use a qualified name, scope.lookupvar() is your tool. > > > > are these points correct? > > > > btw, only some of my old code give dynamic lookup warnings under puppet > > 2.7, does this mean the others not need to modify? > > > I doubt it would be safe to say that manifests that do not elicit > dynamic lookup warnings will not need any modification to work with > Puppet 2.8. Also, do understand that it is not necessarily the case > that every manifest is processed for every client, so you have to take > care in judging which code gives warnings and which doesn't. > > > John > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To post to this group, send email to puppet-users@googlegroups.com. > To unsubscribe from this group, send email to > puppet-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-users?hl=en. > > -- System Administrator, Focus on System Management and Basic Development -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.