I've run into the following issue with parameters that are dependent on 
each other. Suppose I have the following class:

  class foo(
    $owner,
    $prefix  = "/opt/${owner}",
    $etc_dir = "${prefix}/etc"
   ) {

   file{"${etc_dir}":
    ensure => directory,
    owner  => $owner,
    group   => $owner,
    mode   => 0660,

    ...

 }


The order that the parameters are defined appears to be non-deterministic, 
so that sometimes $etc_dir is defined before $prefix. Which means that $etc 
is set to '/etc', and of course, this restricts the permissions on /etc, 
which breaks the server (including preventing any user, including root, 
from sudoing!).  Fortunately, this was found while testing manifests on 
disposable virtual machines. I shudder to think what would have happened if 
we didn't figure out the cause and deployed this on actual servers.

So, am I correct in assuming that the order of parameter setting is 
non-deterministic (and so should avoid setting them like above), or is 
there something else going on?

If parameter order is not deterministic, I do think it should be explicitly 
documented, with a warning about what can go wrong. (Apologies if I've been 
daft and missed an existing mention of this somewhere.)

FWIW, I added a note to http://projects.puppetlabs.com/issues/4408 about 
this issue.





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