----- Original Message ----- > From: "Andrew Parker" <a...@puppetlabs.com> > To: puppet-dev@googlegroups.com > Sent: Thursday, April 19, 2012 9:43:36 PM > Subject: Re: [Puppet-dev] Changes to variable scoping in Telly > > > On Apr 19, 2012, at 1:28 PM, R.I.Pienaar wrote: > > > > > > > ----- Original Message ----- > >> From: "Andrew Parker" <a...@puppetlabs.com> > >> To: puppet-dev@googlegroups.com > >> Sent: Thursday, April 19, 2012 8:42:33 PM > >> Subject: Re: [Puppet-dev] Changes to variable scoping in Telly > >> > >> I've got a branch of puppet that has dynamic scoping removed. > >> Considering the impact that this will have on things and my > >> personal > >> uncertainty about whether people will still be able to achieve > >> everything they want to with puppet, I'd really like to get people > >> to grab it and try it out. > >> > >> https://github.com/zaphod42/puppet/tree/feature/13970/remove-dynamic-scoping > > > > This Just Works for me, but I've deliberately never had any dynamic > > lookup > > in my code as I've always used extlookup/hiera to avoid this > > problem so thats > > not a surprise, someone else will need to test with more broken > > manifests :P > > > > Yeah, I expect that this will bite people a lot more who didn't > religiously hold themselves to certain patterns. > > > So I am guessing the thing that would happen is variables that were > > previously > > filled in would be undef without dynamic scope or what would be the > > the exact > > effects of this? > > > > Good question, it should be undef, but I'll add a test for that. In > fact I'll take all of the old tests for the old dynamic behavior and > update them for what should happen now.
there's been a recurring question about a strict mode for puppet - so that it will, when enabled, cause a compile failure when you try to read a undef variable ie. "foo-${bar}" would compile fail if bar is undefined. This seems like something that might help a lot in catching problems if indeed the behaviour is as you say above > > > Do you have sample code showing what worked before and failed > > after? and how > > would that failure/change in behaviour manifest? > > > > That is something that we'll need to put together so that there is > clear documentation about what changes are going to be needed to be > made in the new system. As a first pass, the test cases should > cover those situations. > > >> > >> On Apr 19, 2012, at 11:45 AM, R.I.Pienaar wrote: > >> > >>> > >>> > >>> ----- Original Message ----- > >>>> From: "Andrew Parker" <a...@puppetlabs.com> > >>>> To: puppet-dev@googlegroups.com > >>>> Sent: Thursday, April 19, 2012 7:16:40 PM > >>>> Subject: Re: [Puppet-dev] Changes to variable scoping in Telly > >>>> > >>>> > >>>> On Apr 19, 2012, at 9:38 AM, R.I.Pienaar wrote: > >>>> > >>>>> ----- Original Message ----- > >>>>>> From: "Andrew Parker" <a...@puppetlabs.com> > >>>>>> To: puppet-dev@googlegroups.com > >>>>>> Sent: Thursday, April 19, 2012 5:30:29 PM > >>>>>> Subject: Re: [Puppet-dev] Changes to variable scoping in Telly > >>>>>> > >>>>>> Absolutely. Debugging is always made fiendishly difficult when > >>>>>> there > >>>>>> is "action at a distance" stuff going on. Limiting that kind > >>>>>> of > >>>>>> interaction is why globals are frowned upon in most > >>>>>> programming. > >>>>>> Is > >>>>>> there a lot of use of globals (topscope) other than facts (and > >>>>>> enc > >>>>>> parameters, I guess) in puppet? > >>>>>> > >>>>> > >>>>> Today there is a lot of it going around. The bulk of modules > >>>>> would > >>>>> be > >>>>> written with something like: > >>>>> > >>>>> class foo::install { > >>>>> if $foo_version { $version = $foo_version } else { $version = > >>>>> "present"} > >>>>> > >>>>> package{"foo": ensure => $version} > >>>>> } > >>>>> > >>>>> and then people will "configure" these modules either in > >>>>> site.pp > >>>>> with > >>>>> globals or in a node with node scope variables. > >>>>> > >>>>> node "blah" { > >>>>> $foo_version = "1.2.3" > >>>>> > >>>>> include foo::install > >>>>> } > >>>>> > >>>>> This is very common, it used to be the only real option outside > >>>>> of > >>>>> using > >>>>> extlookup and hiera. And there are vast amounts of code out in > >>>>> the > >>>>> real > >>>>> world and on the forge built around this pattern. > >>>>> > >>>>> worse, you also had: > >>>>> > >>>>> class someother { > >>>>> $foo_version = "1.2.4" > >>>>> > >>>>> include foo::install > >>>>> } > >>>>> > >>>>> and so depending on the parse order of the actual include lines > >>>>> the > >>>>> outcome > >>>>> might be different in the end, this being at the whim of the > >>>>> autoloader and > >>>>> such it was a bit tricksy. > >>>>> > >>>>> All of this code either needs big refactors or just doesnt work > >>>>> with 2.7. > >>>>> > >>>> > >>>> Thanks for these examples, they help on lot in my understanding > >>>> of > >>>> common patterns (I hope at some point to go through code on the > >>>> forge and try to get some more understanding). > >>>> > >>>> Since I'm not entirely clear on all the changes from 2.7 to 2.6, > >>>> what > >>>> changed to make these things stop working in 2.7? From my > >>>> understanding of the 2.7 variable lookup system it seems like > >>>> they > >>>> should work in 2.7. > >>> > >>> My examples isnt showing the particular bug I was thinking about > >>> - > >>> I > >>> will need to go dig through IRC logs to find the particulars. > >>> > >>> However in the above examples accessing $foo_version would log a > >>> deprecation > >>> warning saying you must use fully qualified variable path. But > >>> for > >>> node > >>> variables there is no fully qualified variable path so you're > >>> just > >>> stuck > >>> and forced to make peace with a all the warnings since there's no > >>> non > >>> param classes way to fix that. This is less drastic than 'doesnt > >>> work' but > >>> for many its unacceptable either way as no clear way exist to fix > >>> this dire > >>> warning of impending future doom: > >>> > >>> warning: Dynamic lookup of $nodevar at /home/rip/test.pp:4 is > >>> deprecated. > >>> Support will be removed in Puppet 2.8. Use a fully-qualified > >>> variable name > >>> (e.g., $classname::variable) or parameterized classes. > >>> > >>> The proposal that started this thread is about that but I believe > >>> its the > >>> wrong way, we need a node scope so people can address node scope > >>> variables > >>> different from top scope variables (what will happen if in a node > >>> I > >>> set the > >>> value of a fact if node scope vars become top scope vars?) > >>> > >>> And we're suggesting rather than new and wonderful ways to > >>> address > >>> scopes > >>> ie $::topscopevar lets just use hashes. > >>> > >>> In puppet code we'd have: > >>> > >>> $facts["operatingsystem"] > >>> > >>> in templates we'd have: > >>> > >>> @facts["operatingsystem"] > >>> > >>> all nice and simple vs the current situation of > >>> $::operatingsystem > >>> vs > >>> scope.lookupvar("::operatingsystem") > >>> > >>>> > >>>>> Until there is wide adoption of param classes or some data > >>>>> system > >>>>> this > >>>>> will unfortunately still be the way. > >>>>> > >>>>> The proposed hash like syntax will make for much lighter > >>>>> refactoring apart > >>>>> from all the other gains expressed in that ticket. > >>>>> > >>>> > >>>> Is the main thing standing in the way of param class adoption > >>>> the > >>>> changes that you referenced above that are keeping people moving > >>>> to > >>>> 2.7? Or are they in some way inadequate (Jo mentions this in his > >>>> email)? > >>> > >>> I think a capable data system is required to make param classes > >>> viable, whats > >>> wrong with them would be an entirely different thread (of which I > >>> think there > >>> are several in the list archives probably approaching 100s of > >>> messages :P) > >>> > >>> -- > >>> You received this message because you are subscribed to the > >>> Google > >>> Groups "Puppet Developers" group. > >>> To post to this group, send email to puppet-dev@googlegroups.com. > >>> To unsubscribe from this group, send email to > >>> puppet-dev+unsubscr...@googlegroups.com. > >>> For more options, visit this group at > >>> http://groups.google.com/group/puppet-dev?hl=en. > >>> > >> > >> -- > >> You received this message because you are subscribed to the Google > >> Groups "Puppet Developers" group. > >> To post to this group, send email to puppet-dev@googlegroups.com. > >> To unsubscribe from this group, send email to > >> puppet-dev+unsubscr...@googlegroups.com. > >> For more options, visit this group at > >> http://groups.google.com/group/puppet-dev?hl=en. > >> > >> > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Puppet Developers" group. > > To post to this group, send email to puppet-dev@googlegroups.com. > > To unsubscribe from this group, send email to > > puppet-dev+unsubscr...@googlegroups.com. > > For more options, visit this group at > > http://groups.google.com/group/puppet-dev?hl=en. > > > > -- > You received this message because you are subscribed to the Google > Groups "Puppet Developers" group. > To post to this group, send email to puppet-dev@googlegroups.com. > To unsubscribe from this group, send email to > puppet-dev+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-dev?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to puppet-dev@googlegroups.com. To unsubscribe from this group, send email to puppet-dev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.