I feel your pain.

On Sat, Aug 11, 2012 at 10:24 PM, Zachary Alex Stern
<z...@enternewmedia.com> wrote:
> Also, fwiw, I've read that document on scoping beginning to end several
> times. Doesn't mean much to me I'm afraid - pretty new to all this.
>
>
> On Saturday, August 11, 2012 10:36:48 PM UTC-4, Eric Shamow wrote:
>>
>> The best reference to explain how variable scoping works in Puppet is this
>> one -
>>
>> http://docs.puppetlabs.com/guides/scope_and_puppet.html
>>
>> Scoping has changed with 2.7, so you may find some confusing references
>> online that follow the pre-2.7 rules. In general the 2.7 changes are
>> designed to introduce some sanity to variable scopes and eliminate dynamic
>> scoping, which causes all kinds of pain.
>>
>> The easiest way to think about scoping in general is that a scope is
>> defined by its container. If I put something physical in a box, I have
>> access to it the moment I open the box, and other objects inside the box can
>> interact with it. If, however, I now put that box inside a second box, the
>> objects in the second box cannot interact directly with the objects in the
>> first - the first object is protected by its container.
>>
>> Scoping mostly works the same way. The right way to get at the variable is
>> to always explicitly scope, as you began to get at below with your
>> scope.lookupvar example. As that can be a bit of a pain to repeat, you can
>> always copy the value into a local variable:
>>
>> class puppet::config {
>> include puppet::params
>> $puppetserver = puppet::params::puppetserver
>> …
>> }
>>
>> -Eric
>>
>> --
>>
>> Eric Shamow
>> Professional Services
>> http://puppetlabs.com/
>> ©631.871.6441
>>
>> Join us for PuppetConf 2012 at the Mission Bay Convention Center in San
>> Francisco, California on September 27th and 28th --> http://bit.ly/pcsig12
>>
>>
>> On Saturday, August 11, 2012 at 8:45 PM, Zachary Stern wrote:
>>
>> > I'm having a really hard time grasping how variables are scoped in
>> > puppet (not really much of a programmer).
>> >
>> > I've got a manifest that looks like this:
>> > ###
>> > class puppet::config {
>> > include puppet::params
>> > file { '/etc/puppet/puppet.conf':
>> > ensure => present,
>> > content => template('puppet/puppet.conf.erb'),
>> > owner => 'root',
>> > group => 'admins',
>> > require => Class['puppet::install'],
>> > notify => Class['puppet::service'],
>> > }
>> > }
>> > ###
>> >
>> >
>> > I've then got a manifest like this, which has a class being included
>> > above:
>> > ###
>> > class puppet::params {
>> > $puppetserver = 'command.enterawesome.com
>> > (http://command.enterawesome.com)'
>> > }
>> > ###
>> >
>> > The template being used in the first class includes the variable
>> > $puppetserver, but somehow, the include statement isn't enough for the
>> > variable to be defined within the scope of the manifest/template
>> > above.
>> > What gives?
>> > It works just fine if I include a statement like this in the erb file:
>> > <%= scope.lookupvar('puppet::params::puppetserver') %>
>> >
>> > But I'd really like to understand scoping better. What is it I need to
>> > do to just refer to the variable by name? Why isn't the include
>> > statement enough? Isn't in including the puppet::params class inside
>> > the puppet::config class, and therefore having the variable defined in
>> > that context? Apparently not. But I don't understand why. I wan't to
>> > end up at a point where the variable is in the proper scope, such that
>> > I can just have a statement like <%= puppetserver %> inside of the
>> > template I'm using.
>> >
>> > Thanks in advance!
>> >
>> > --
>> > 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
>> > (mailto:puppet...@googlegroups.com).
>> > To unsubscribe from this group, send email to
>> > puppet-users...@googlegroups.com
>> > (mailto:puppet-users+unsubscr...@googlegroups.com).
>> > For more options, visit this group at
>> > http://groups.google.com/group/puppet-users?hl=en.
>>
>>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/puppet-users/-/IgWXSc13m04J.
>
> 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.



-- 
Regards,

Douglas Garstang
http://www.linkedin.com/in/garstang
Email: doug.garst...@gmail.com
Cell: +1-805-340-5627

-- 
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.

Reply via email to