On Sep 28, 5:02 pm, rvlinden <rene.vanderlinde...@gmail.com> wrote: > Hi, > > I'm using puppet 2.7.3 on RHEL/CentOS and I have an issue which is now > a big blocking issue within my environment. What I'm trying to > accomplish wit puppet is a create a mountpoint, mount a filesystem on > it and install an application on that filesystems are set proper user/ > group and permissions on it, but it fails big time. > > The issues I currently run into are about 3 things > > 1. The file type does not allow multiple directories to be created at > once ('mkdir -p')
Surely that's a convenience issue, not a blocker. In any event, I am confident that if all the parent directories are intended to have the same properties then it should be possible to use a recursive defined type to ensure all are present. > 2. exec & file type create autorequire dependensies which creates > dependency cycles See below. > 3. Puppet does not allow duplicate resouces Indeed not. How would that make sense? It does provide virtual resources, which can address some of the scenarios where people otherwise would want to duplicate resource declarations. You declare the resource once, virtually, for all nodes that could possibly need it, then you realize that resource every place where otherwise you would declare it. After reading the rest of your post, however, I suspect the problem is not really duplicate resources. My guess is that your complaint is really that Puppet cannot manage both a mount point and the root of the filesystem mounted on it. These are distinct resources, but the underlying operating system design makes it difficult to distinguish them, and Puppet cannot do so. Indeed, the mount point's properties are invisible -- and thus unmanageable -- when a file system is mounted on it, so I attribute this issue to the OS, not to Puppet. [...] > These are the relations I created myself within puppet > > 1. exec mkdir /a/b/c => mount /a/b/c => file /a/b/c > 2. exec logical volume => mount /a/b/c > > This setup does not result in a cycle, but when puppet adds an > autorequire between exec mkdir /a/b/c and file a/b/c, it causes the > whole thing to cycle. > > Quote from the manual > > Autorequires: If Puppet is managing an exec’s cwd or the executable > file used in an exec’s command, the exec resource will autorequire > those files. If Puppet is managing the user that an exec should run > as, the exec resource will autorequire that user. Right, but how does that explain the behavior you see? Surely /a/b/c is not the working directory or executable of your Exec. I would guess that it is instead Mount autorequiring its mount point that is causing the cycle. That's not documented (which constitutes a documentation bug if Puppet does this), but it seems sort of logical. Also, there is a feature request asking for this (http:// projects.puppetlabs.com/issues/5015), though it is marked "Code Insufficient". If you can verify that behavior, however, then I would file a bug ticket on it, as at minimum there is a documentation bug. Alternatively, if you can confirm that the Exec is the source of the autorequire then I would definitely file a ticket for that, as it would unquestionably be buggy. > I don't mind if I have to rewrite my code or start from scratch, but I > need help to create my mountpoint location with root:root/755 and > after mounting allow the same location to have a different owner:group/ > permissions. If autorequirements are indeed the root of the problem then the easiest thing to do might be to declare explicit relationships in the correct direction. Autorequirements should always be overridden by explicitly declared ones. If you find that to not be the case then I urge you to file a bug ticket about it. John -- 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.