Issue #1565 has been updated by Luke Kanies. Assigned to changed from Luke Kanies to Markus Roberts Target version changed from unplanned to Statler Affected version set to 0.22.1
I think this will get solved by Markus's 'futures' work. ---------------------------------------- Bug #1565: puppet parser not order independant http://projects.puppetlabs.com/issues/1565 Author: Ryan McBride Status: Needs design decision Priority: Normal Assigned to: Markus Roberts Category: language Target version: Statler Affected version: 0.22.1 Keywords: Branch: The puppet parser has number of issues regarding order-of evaluation: # It does not always ensure that included classes are evaluated before qualified variables referring to them are evaluated. ([[LanguageTutorial#qualified-variables]]) # It may evaluate classes before the scope in which they are defined is evaluated. # the defined() function is "unfortunately dependent on the parse order of the configuration when testing whether a resource is defined." ([[FunctionReference#defined]]) As far as I understand it, the intent is that puppet is a declarative language, in which order of evaluation should not matter, and it would be nice to have these issues cleared up. Conversely, if puppet continues to be "somewhat order dependant", stronger mechanisms to provide control over order-of-execution or at least make order-of-execution more predictable are necessary. I believe the former is preferable. The following example demonstrates the first two of these problems (tested on both 0.24.5 and HEAD): <pre> ###################################### # define some classes class apache { apache_setup { "config" : } } define apache_setup ( $chroot = true, $ssl = false ) { # sanity checking, platform-specific defaults $_chroot = $chroot $_ssl = $ssl class apache_config { $ssl = $_ssl $chroot = $_chroot # more variables here } include apache_config # actuall apache setup goes here } class trac { case $apache_config::chroot { true: { notice("chroot = true") # do something } default: { # do something else notice("chroot = ${apache_config::chroot}") } } } ###################################### # Now use what we've set up class apache_ssl inherits apache { # override the defaults Apache_setup["config"] { ssl => true, chroot => false } } include apache_ssl #include apache_config include trac </pre> If this example is executed as-is, we recieve the error, it has clearly been included in apache_setup. (issue 1 above) <pre> Class apache_config has not been evaluated so its variables cannot be referenced at /tmp/foo:26 on node 000AE43B1909 </pre> If we uncomment the 'include apache_config' directive at the bottom of the example to ensure that puppet sees the class as being included, puppet evaluates apache_config _before_ the apache class and apache_setup define; the scope in which apache_config is defined is not evaluated, and the variables it depends on are evaluated as empty strings. (issue 2 above) <pre> notice: Scope(Class[trac]): chroot = </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.
