I'm having an issue solving dependencies inside defines, where the paths to various resources are variable. It seems like puppet isn't expanding all of the variables when it constructs the catalog, so it's unable to find the resources necessary to build things in the right order.
I've constructed a simple proof of concept to demonstrate the problem. I'm hoping someone can provide some advice on how this case should be handled, because clearly I've misunderstood how puppet is intended to be used to handle this sort of case. Here is my site.pp, with a single machine loading up the module that builds a standard service. Each instance of the service has its own homedir with its own data, logs, etc. node "puppet-bsd2.virtual" { include service service::app { "first": service_num => "1"; "second": service_num => "2"; } } Here's the init.pp manifest for the 'service' module. It includes the 'devices' module which is used for creating device files in a chroot environment, and sets up the homedir for each instance of the service. include devices class service { file { "/opt": ensure => directory, owner => root, group => wheel, mode => 755; "/opt/home": ensure => directory, owner => root, group => wheel, mode => 755; } define app ( $homedir = "/opt/home", $service_num ) { file { "$homedir/${service_num}": ensure => directory, owner => root, group => wheel, mode => 0750; "$homedir/${service_num}/dev": ensure => directory, owner => root, group => wheel, mode => 0750; } devices::device_node { "${homedir}/${service_num}/dev/null": dir => "$homedir/${service_num}/dev/"; "${homedir}/${service_num}/dev/random": dir => "$homedir/${service_num}/dev/"; } } } And finally, the devices module. class devices { define device_node ( $dir ) { exec { "create-device-${name}": creates => "${name}", cwd => ${dir}, command => "/usr/bin/touch ${name}", } } } The problem is one of order of operations. With the above manifests, puppet always tries to write the device files before it creates the 'var' directory that contains them. According to the 'require' documentation, 'cwd' inside an exec clause should auto-require the directory referenced. This wasn't working, and so I tried to change the 'cwd' to a 'require => File...' in order to make it more explicit. This is what exposed the real problem to me: Feb 11 17:18:40 puppet-bsd2 puppet-agent[68963]: Could not run Puppet configuration client: Could not find dependency File[/opt/home/2/dev/] for Exec[create-device-/opt/home/2/dev/null] at /usr/local/etc/puppet/production/modules/devices/manifests/init.pp:12 How do other people deal with these sorts of dependencies, where the files and directories being created have variable paths based on the arguments passed to a definition? Is there a better way to get where I'm trying to go with this? Any clue is highly appreciated. -- 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.