vagn scott
2011-Aug-01 15:09 UTC
[Puppet Users] prep for 2.8: scopes and variables: nodes are not classes
prep for 2.8: scopes and variables: nodes are not classes
I have been preparing for 2.8 by
experimenting with 2.7.X and seeing
what it takes to get rid of the
warnings. I would like to share my
results in a number of upcoming posts.
Begin with the simple question of
hard-wiring scopes. the ''shocking''
revelation is that variables defined
in nodes are no longer visible outside
the node. So, if you rely on that for
configuration, you should rewrite the
node as a class, and then include that
class in a trivial node. You can then
get at the variables by explicitly
mentioning the scope of the class.
This post doesn''t talk about default
values, inheritance, or specialization.
I will talk about that later.
Attached are three scripts
01_config.pp
old style
defines variables in nodes
relies on dynamic scope
02_config.pp
broken
failed attempt to qualify variables
nodes are not classes
nodes cannot be named as a scope
03_config.pp
fixed, new style
all variables defined in classes
nodes as containers for classes
no variables defined in nodes
Of course it is still possible
to define resources and variables
in nodes. But the variables will
not be visible in any class scope and
cannot be used to implicitly configure
classes.
Comments and corrections welcome.
--vagn
results of running the three scripts:
vagn@nika:~/puppet-nika/patterns$ ./01_config.pp
notice: Scope(Class[main]): puppet version: 2.7.2
notice: Scope(Class[Legacy]): var1_global is global
warning: Dynamic lookup of $var2_base_node at
/u0/home/vagn/puppet-nika/patterns/01_config.pp:21 is deprecated.
Support will be removed in Puppet 2.8. Use a fully-qualified variable
name (e.g., $classname::variable) or parameterized classes.
notice: Scope(Class[Legacy]): var2 defined in base node
warning: Dynamic lookup of $var3_node at
/u0/home/vagn/puppet-nika/patterns/01_config.pp:22 is deprecated.
Support will be removed in Puppet 2.8. Use a fully-qualified variable
name (e.g., $classname::variable) or parameterized classes.
notice: Scope(Class[Legacy]): var3 defined in default (aka host) node
notice: Finished catalog run in 0.15 seconds
vagn@nika:~/puppet-nika/patterns$ ./02_config.pp
notice: Scope(Class[main]): puppet version: 2.7.2
notice: Scope(Class[Legacy]): var1_global is global
warning: Scope(Class[Legacy]): Could not look up qualified variable
''base::var2_base_node''; class base could not be found at
/u0/home/vagn/puppet-nika/patterns/02_config.pp:21
notice: Scope(Class[Legacy]):
warning: Scope(Class[Legacy]): Could not look up qualified variable
''default::var3_node''; class default could not be found at
/u0/home/vagn/puppet-nika/patterns/02_config.pp:22
notice: Scope(Class[Legacy]):
notice: Finished catalog run in 0.15 seconds
vagn@nika:~/puppet-nika/patterns$ ./03_config.pp
notice: Scope(Class[main]): puppet version: 2.7.2
notice: Scope(Class[Foo]): var1_global is global
notice: Scope(Class[Foo]): var2 defined in base node
notice: Scope(Class[Foo]): var3 defined in default (aka host) node
notice: Finished catalog run in 0.15 seconds
vagn@nika:~/puppet-nika/patterns$
--
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+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.
