Issue #17799 has been updated by Walter Heck.

More from the mailinglist topic:
<pre>
On Sun, Nov 18, 2012 at 6:47 PM, Stefan Heijmans
<[email protected]> wrote:
> No, i's not, it is correct, see
> http://docs.puppetlabs.com/guides/scope_and_puppet.html
>
> At the moment you 'include mysql' only the top scope package variable is
> known, so there fore mysql package will be installed.
> swap them around and mysql-server package will get installed.
but I am specifically referring to _not_ the top-scope variable by
using $mysql_server::package. This is a scope that doesn't have that
variable (yet, anyway). I don't expect Puppet to just jump to a higher
level scope (top-scope in this case) to go and look for my variable
there.
</pre>

and then:

<pre>
I agree, it looks like a bug to me.  A variable reference should never evaluate 
a variable that doesn't match the given name.  I would file a ticket.

The issue may be less straightforward than it first appears, however.  Consider 
the difference between $mysql_server::package and $::mysql_server::package.  In 
the vast majority of cases, I would expect them to evaluate to the same thing 
(including manifesting the same bug in this case).  But what if there were also 
this class:

class mysql::mysql_server {
  $package = 'mysql-server55'
}

Assume that mysql::mysql_server is declared before class mysql.  What value do 
you then expect when class mysql dereferences $mysql_server::package?  That is, 
do you get "mysql-server" from $::mysql_server::package or "mysql-server55" 
from $::mysql::mysql_server::package?  I think you get the latter, and I think 
that's reasonable.  Moreover, I would guess that the support for that behavior 
is where the bug is hiding.


John
</pre>
----------------------------------------
Bug #17799: Scope problem in 2.7.12 (PE 2.5.3)
https://projects.puppetlabs.com/issues/17799#change-77435

Author: Walter Heck
Status: Unreviewed
Priority: Normal
Assignee: 
Category: 
Target version: 
Affected Puppet version: 2.7.12
Keywords: 
Branch: 


Copy-paste from the mailing list:
<pre>
I was playing around with scopes, and I noticed the following
behaviour, which strikes me as odd? This was done with Puppet
Enterprise 2.5.3 which is really Puppet 2.7.12.
I'm not sure what I would expect, quite likely an error message or at
the very least 'mysql-server' package gettign installed. Instead, it
just seems to choose the top-scope variable 'mysql'

$package = 'mysql'

class mysql {
  package { $mysql_server::package:
    ensure => present
  }
}

class mysql_server {
  include mysql
  $package = 'mysql-server'
}

include mysql_server


This yields:
[root@master test]# puppet apply manifests/init.pp
notice: /Stage[main]/Mysql/Package[mysql]/ensure: created
notice: Finished catalog run in 6.25 seconds
</pre>


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to