On Wed, 25 Apr 2012 10:29:23 -0700 (PDT)
Shantanu <
knowsh...@gmail.com> wrote:
>
> On Apr 25, 11:46 am, Craig Dunn <
cr...@craigdunn.org> wrote:
> > On 25/04/2012 17:01, Shantanu wrote:
> >
> >
> >
> > > I would like to 'exec' an installation script 'onlyif' an
> > > installation directory is empty. I tried using following bash
> > > one-liner however it didn't work:
> > > <code>
> > > exec{$one_install_script:
> > > require => File[$one_install_script],
> > > onlyif => "[ \"$(/bin/ls -A $one_location)\" ]&& exit 1
> > > || exit 0"
> > > }
> >
> > Puppet wont let you run commands that dont have fully qualified
> > paths, try adding this and it should work...
> >
> > path => "/bin"
> >
>
> Almost worked, it didn't fail while applying the catalog however it
> failed with following error.
>
> {{{
> Exec[/tmp/one_install_script]: Could not evaluate: Could not find
> command '['
> }}}
That's because [ is usually in /usr/bin, not /bin :
$ which [
/usr/bin/[
so path => [ '/bin', '/usr/bin' ] would probably have worked.
> As suggested by Florian using 'provider => shell' takes care of PATH
> and shell built-ins as well.
That's probably just as good a solution.
On an unrelated note, something like the following might be more what
you're trying to achieve, since you have a somewhat reversed logic and
aren't checking for the directory's existence at all (untested) :
onlyif => "[ -d $one_location -a -z \"$(ls -A $one_location)\" ]"
Matthias