On Fri, Feb 11, 2011 at 12:42:58PM -0500, Matthew Pounsett wrote:
> 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.
>
caution - newbie replying
what if you create the device directories within
devices::device_node instead of service::app? somehow you have to
parse out the path components of $dir and ensure them one by one.
Why is it puppet does not have a nice trick for "mkdir -p"?
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Users" 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-users?hl=en.
--
-ashley
Did you try poking at it with a stick?
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" 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-users?hl=en.