You want:

file { "blah":
  ...
}
exec {"blah2":
  ...
  require => File['blah']
}

That way you ensure the file is created before you try to run the exec.

--
Nathan Clemons
http://www.livemocha.com
The worlds largest online language learning community



On Fri, Jun 17, 2011 at 10:43 AM, Annie Rana <annier...@gmail.com> wrote:

> Hi,
>
> Thanks much for help. Some how I managed to execute the original shell
> script using command in exec "command=>'sh /tmp/QoS/QoS.sh'" and I used path
> parameter as well "path=>'/sbin:/sbin/ipatbles:/bin:/usr/bin'" but I have to
> run file and exec recipes separately one after another otherwise exec is
> executed first if both are placed in one recipe and causing file not found
> error. Is there any way to define the sequence of execution?
>
> Regards,
>
> Annie
>
>
> On Fri, Jun 17, 2011 at 4:50 PM, Luke Bigum <luke.bi...@lmax.com> wrote:
>
>> Wouldn't have worked anyway, change "print" to "echo" and I forgot #!/
>> bin/bash... That's what I get for writing code from memory ;)
>>
>> That's strange, I just put this in my Puppet server:
>>
>> node 'puppetmaster' {
>>   file { '/etc/shell_file':
>>    ensure => present,
>>    owner => 'root',
>>    group => 'root',
>>    mode => '0755',
>>     source => 'puppet:///modules/puppet/shell_file',
>>   }
>>
>>  exec { '/etc/shell_file': require => File['/etc/shell_file'] }
>> }
>>
>> [root@co1puppet01 live]# cat ../../modules/live/puppet/files/
>> shell_file
>> #!/bin/bash
>> export LAN=eth1
>> export WAN=eth0
>>
>> CMD="tc filter add dev ${WAN} parent 1:0 prio 4 protocol ip u32 match
>> ip tos 0x880xff classid 1:12"
>> OUT=$($CMD)
>> RET=$?
>> echo "Command '$CMD' returned $RET" 2>&1 > /tmp/QoS.out
>> echo "Command '$CMD' output '$OUT'" 2>&1 >> /tmp/QoS.out
>>
>> CMD="iptables -t mangle -A FORWARD -i ${LAN} -o ${WAN} -p udp --sport
>> 2345 -j TOS --set-tos 0x28"
>> OUT=$($CMD)
>> RET=$?
>> echo "Command '$CMD' returned $RET" 2>&1 >> /tmp/QoS.out
>> echo "Command '$CMD' output '$OUT'" 2>&1 >> /tmp/QoS.out
>>
>> CMD="iptables-save"
>> OUT=$($CMD)
>> RET=$?
>> echo "Command '$CMD' returned $RET" 2>&1 >> /tmp/QoS.out
>> echo "Command '$CMD' output '$OUT'" 2>&1 >> /tmp/QoS.out
>>
>> [root@puppetmaster live]# puppetd --test
>> info: Caching catalog for puppetmaster
>> info: Applying configuration version '1308324915'
>> notice: /Stage[main]//Node[puppetmaster]/Exec[/etc/shell_file]/
>> returns: executed successfully
>> notice: Finished catalog run in 1.04 seconds
>>
>> [root@puppetmaster]# cat /tmp/QoS.out
>> Command 'tc filter add dev eth0 parent 1:0 prio 4 protocol ip u32
>> match ip tos 0x880xff classid 1:12' returned 1
>> Command 'tc filter add dev eth0 parent 1:0 prio 4 protocol ip u32
>> match ip tos 0x880xff classid 1:12' output ''
>> Command 'iptables -t mangle -A FORWARD -i eth1 -o eth0 -p udp --sport
>> 2345 -j TOS --set-tos 0x28' returned 2
>> Command 'iptables -t mangle -A FORWARD -i eth1 -o eth0 -p udp --sport
>> 2345 -j TOS --set-tos 0x28' output ''
>> Command 'iptables-save' returned 0
>> Command 'iptables-save' output '# Generated by iptables-save v1.3.5 on
>> Fri Jun 17 15:48:48 2011
>> *mangle
>> :PREROUTING ACCEPT [3642:790381]
>> :INPUT ACCEPT [2591:636935]
>> :FORWARD ACCEPT [0:0]
>> :OUTPUT ACCEPT [2551:866979]
>> :POSTROUTING ACCEPT [2551:866979]
>> COMMIT
>> # Completed on Fri Jun 17 15:48:48 2011
>> # Generated by iptables-save v1.3.5 on Fri Jun 17 15:48:48 2011
>> *filter
>> :INPUT ACCEPT [2637:639987]
>> :FORWARD ACCEPT [0:0]
>> :OUTPUT ACCEPT [2588:875945]
>> COMMIT
>> # Completed on Fri Jun 17 15:48:48 2011'
>>
>> I'm running out of ideas. You don't have noexec on /tmp do you? No,
>> you said you could run it as root... Anyone else?
>>
>> On Jun 17, 4:31 pm, Annie Rana <annier...@gmail.com> wrote:
>> > Hi Luke,
>> >
>> > I replaced my shell script with the one you wrote. Same old error
>> message
>> > appeared again 'change from notrun to 0 failed: /tmp/QoS/QoS.sh returned
>> 1
>> > instead of o at /etc/puppet/manifests/site.pp'
>> > . Your script didn't generate any log at client machine. Now I am sure
>> about
>> > one thing that there is no issue with the shell script itself. The exec
>> > command is having hiccup even before executing the shell. I even tried
>> > command paremeter in exec but no use. Do you know anyother way to
>> execute
>> > bash shell in puppet?
>> >
>> > Thanks much,
>> >
>> > Annie
>> >
>> > On Fri, Jun 17, 2011 at 4:30 PM, Annie Rana <annier...@gmail.com>
>> wrote:
>> > > Hi Luke,
>> >
>> > > I replaced my shell script with the one you wrote. Same old error
>> message
>> > > appeared again 'change from notrun to 0 failed: /tmp/QoS/QoS.sh
>> returned 1
>> > > instead of o at /etc/puppet/manifests/site.pp'. Your script didn't
>> generated
>> > > any log at client machine. Now I am sure about one thing that there is
>> no
>> > > issue with the shell script itself. The exec command is having hiccup
>> even
>> > > before executing the shell. I even tried command paremeter in exec but
>> no
>> > > use. Do you know anyother way to execute bash shell in puppet?
>> >
>> > > Thanks much,
>> >
>> > > Annie
>> >
>> > > On Fri, Jun 17, 2011 at 4:06 PM, Luke Bigum <luke.bi...@lmax.com>
>> wrote:
>> >
>> > >> I'm out of ideas and I'd resort to hacking the script a bit to get
>> > >> some debugging output. Try just this in QoS.sh to try identify what's
>> > >> failing:
>> >
>> > >> export LAN=eth1
>> > >> export WAN=eth0
>> > >> CMD="tc filter add dev ${WAN} parent 1:0 prio 4 protocol ip u32 match
>> > >> ip tos 0x880xff classid 1:12"
>> > >> OUT=$($CMD) > /tmp/QoS.out 2>&1
>> > >> RET=$?
>> > >> print "Command $CMD returned $RET" >> /tmp/QoS.out 2>&1
>> > >> CMD="iptables -t mangle -A FORWARD -i ${LAN} -o ${WAN} -p udp --sport
>> > >> 2345 -j TOS --set-tos 0x28"
>> > >> OUT=$($CMD) >> /tmp/QoS.out 2>&1
>> > >> RET=$?
>> > >> print "Command $CMD returned $RET" >> /tmp/QoS.out 2>&1
>> > >> CMD="iptables-save"
>> > >> OUT=$($CMD) >> /tmp/QoS.out 2>&1
>> > >> RET=$?
>> > >> print "Command $CMD returned $RET" >> /tmp/QoS.out 2>&1
>> >
>> > >> Or something like that.
>> >
>> > >> On Jun 17, 4:01 pm, Annie Rana <annier...@gmail.com> wrote:
>> > >> > Thanks again Peter but sorry it didn't work out either.
>> >
>> > >> > On Fri, Jun 17, 2011 at 3:52 PM, Peter Bukowinski <
>> pmb...@gmail.com>
>> > >> wrote:
>> > >> > > In your QoS.sh file, make sure to use explicit paths to
>> executables,
>> > >> e.g:
>> >
>> > >> > > use '/sbin/iptables -blah …' NOT 'iptables -blah …'
>> >
>> > >> > > --
>> > >> > > Peter M. Bukowinski
>> > >> > > Systems Engineer
>> > >> > > Janelia Farm Research Campus, HHMI
>> >
>> > >> > > On Friday, June 17, 2011 at 10:44 AM, Annie Rana wrote:
>> >
>> > >> > > > Hi Luke,
>> > >> > > > What's your shell script expected to
>> > >> > > > do?
>> > >> > > > The shell script would generate Iptables rules
>> >
>> > >> > > > How do you know it didn't work?
>> > >> > > > I can check using ipatbles -L or iptables -t mangle -L commands
>> >
>> > >> > > > If you run it by hand in a root shell, does it work then?
>> > >> > > > Yes
>> >
>> > >> > > > If so,
>> > >> > > > there might be an environment problem when running from Puppet,
>> like
>> > >> > > > $PATH or something. Try set the parameter "logoutput => true"
>> in the
>> > >> > > >  exec resource.
>> > >> > > > I did but no affect.
>> >
>> > >> > > > Thanks again, much appreciated your help and time.
>> > >> > > > On Fri, Jun 17, 2011 at 3:26 PM, Luke Bigum <
>> luke.bi...@lmax.com
>> > >> (mailto:
>> > >> > > luke.bi...@lmax.com)> wrote:
>> > >> > > > > How do you know it didn't work? What's your shell script
>> expected
>> > >> to
>> > >> > > > >  do? If you run it by hand in a root shell, does it work
>> then? If
>> > >> so,
>> > >> > > > >  there might be an environment problem when running from
>> Puppet,
>> > >> like
>> > >> > > > >  $PATH or something. Try set the parameter "logoutput =>
>> true" in
>> > >> the
>> > >> > > > >  exec resource.
>> >
>> > >> > > > >  On Jun 17, 3:18 pm, Annie Rana <annier...@gmail.com(mailto:
>> > >> > > annier...@gmail.com)> wrote:
>> > >> > > > > > Thanks but it couldn't work though i got the message that
>> shell
>> > >> > > script is
>> > >> > > > > > successfully executed.
>> >
>> > >> > > > > > On Fri, Jun 17, 2011 at 2:44 PM, Luke Bigum <
>> > >> luke.bi...@lmax.com(mailto:
>> > >> > > luke.bi...@lmax.com)> wrote:
>> > >> > > > > > > Annie,
>> >
>> > >> > > > > > >
>> http://docs.puppetlabs.com/references/stable/type.html#exec
>> >
>> > >> > > > > > > By default the expected return code is probably zero,
>> your
>> > >> script
>> > >> > > is
>> > >> > > > > > > returning 1. Whether this is correct or not I don't know,
>> but
>> > >> you
>> > >> > > can
>> > >> > > > > > > tell puppet to expect a different return code:
>> >
>> > >> > > > > > > exec { '/etc/shell_file':
>> > >> > > > > > > require => File['/etc/shell_file'],
>> > >> > > > > > > returns => 1,
>> > >> > > > > > > }
>> >
>> > >> > > > > > > On Jun 17, 2:36 pm, Annie Rana <annier...@gmail.com(mailto:
>> > >> > > annier...@gmail.com)> wrote:
>> > >> > > > > > > > I apologize for posting wrong log messages, here is the
>> > >> correct
>> > >> > > log:
>> >
>> > >> > > > > > > > notice: Starting catalog run
>> > >> > > > > > > > notice: //File[/tmp/QoS/QoS.sh (http://QoS.sh
>> )]/ensure:
>> > >> created
>> > >> > > > > > > > err: //Exec[/tmp/QoS/QoS.sh (http://QoS.sh)]/returns:
>> > >> change
>> > >> > > from notrun to 0 failed:
>> > >> > > > > > > > /tmp/QoS/QoS.sh (http://QoS.sh) returned 1 instead of
>> 0 at
>> > >> > > > > > > /etc/puppet/manifests/site.pp:10
>> > >> > > > > > > > notice: Finished catalog run in 0.46 seconds
>> >
>> > >> > > > > > > > Any help please?
>> >
>> > >> > > > > > > > On Fri, Jun 17, 2011 at 2:09 PM, Annie Rana <
>> > >> annier...@gmail.com(mailto:
>> > >> > > annier...@gmail.com)> wrote:
>> > >> > > > > > > > > Hi Peter, thanks for your reply. I managed to copy
>> the
>> > >> shell
>> > >> > > file
>> > >> > > > > > > puppet
>> > >> > > > > > > > > client using the file resource recipe you specified
>> but
>> > >> exec is
>> > >> > > > > > > throwing an
>> > >> > > > > > > > > error, which is as follows:
>> >
>> > >> > > > > > > > > info: No classes to store
>> > >> > > > > > > > > info: Caching catalog at
>> > >> /var/lib/puppet/state/localconfig.yaml
>> > >> > > > > > > > > notice: Starting catalog run
>> > >> > > > > > > > > err: //File[/tmp/QoS/QoS.sh (http://QoS.sh)]/ensure:
>> > >> change
>> > >> > > from absent to file failed:
>> > >> > > > > > > > > Could not set file on ensure: No such file or
>> directory -
>> > >> > > > > > > > > /tmp/QoS/QoS.sh.puppettmp at
>> > >> /etc/puppet/manifests/site.pp:7
>> > >> > > > > > > > > notice: //Exec[/tmp/QoS/QoS.sh (http://QoS.sh)]:
>> > >> Dependency
>> > >> > > file[/tmp/QoS/QoS.sh (http://QoS.sh)] has 1
>> > >> > > > > > > > > failures
>> > >> > > > > > > > > warning: //Exec[/tmp/QoS/QoS.sh (http://QoS.sh)]:
>> > >> Skipping
>> > >> > > because of failed
>> > >> > > > > > > dependencies
>> > >> > > > > > > > > notice: Finished catalog run in 0.38 seconds
>> >
>> > >> > > > > > > > > When I tried running the shell script manually using
>> the
>> > >> > > following
>> > >> > > > > > > command
>> >
>> > >> > > > > > > > > '/tmp/QoS/QoS.sh (http://QoS.sh);echo$?'
>> >
>> > >> > > > > > > > > , it worked fine printing 0 at the end. Any help what
>> is
>> > >> wrong
>> > >> > > with
>> > >> > > > > > > exec
>> > >> > > > > > > > > resource recipe?
>> >
>> > >> > > > > > > > > Thanks in advance for your time.
>> >
>> > >> > > > > > > > > Regards,
>> >
>> > >> > > > > > > > > A.
>> >
>> > >> > > > > > > > > On Thu, Jun 16, 2011 at 8:42 PM, Peter Bukowinski <
>> > >> > > pmb...@gmail.com (mailto:pmb...@gmail.com)
>> > >> > > > > > > > wrote:
>> >
>> > >> > > > > > > > > > It sounds like you haven't set up the puppet
>> fileserver
>> > >> yet.
>> > >> > > Choose a
>> > >> > > > > > > > > > directory that will hold files you want to copy to
>> > >> clients. I
>> > >> > > use
>> > >> > > > > > > > > > /opt/files, so that's what is in my example. Create
>> > >> > > fileserver.conf in
>> > >> > > > > > > the
>> > >> > > > > > > > > > same directory as puppet.conf and add these lines:
>> >
>> > >> > > > > > > > > > [files]
>> > >> > > > > > > > > > path /opt/files
>> > >> > > > > > > > > > allow *.client.domain
>> >
>> > >> > > > > > > > > > Put your shell file in the path you specified. Now
>> you
>> > >> just
>> > >> > > need to
>> > >> > > > > > > set up
>> > >> > > > > > > > > > a file and exec resource. Note the source item in
>> the
>> > >> file
>> > >> > > resource
>> > >> > > > > > > and the
>> > >> > > > > > > > > > require item in exec.
>> >
>> > >> > > > > > > > > > file { '/etc/shell_file':
>> > >> > > > > > > > > > ensure => present,
>> > >> > > > > > > > > > owner => 'root',
>> > >> > > > > > > > > > group => 'root',
>> > >> > > > > > > > > > mode => '0755',
>> > >> > > > > > > > > > source => 'puppet://puppet/files/shell_file',
>> > >> > > > > > > > > > }
>> >
>> > >> > > > > > > > > > exec { '/etc/shell_file': require =>
>> > >> File['/etc/shell_file']
>> > >> > > }
>> >
>> > >> > > > > > > > > > --
>> > >> > > > > > > > > > Peter M. Bukowinski
>> > >> > > > > > > > > > Systems Engineer
>> > >> > > > > > > > > > Janelia Farm Research Campus, HHMI
>> >
>> > >> > > > > > > > > > On Thursday, June 16, 2011 at 3:17 PM, annierana
>> wrote:
>> >
>> > >> > > > > > > > > > > Hi all, I am new to puppet. I need a sample
>> recipe to
>> > >> > > write/copy a
>> > >> > > > > > > > > > > shell file on puppet client. The shell file
>> exists on
>> > >> > > puppet server.
>> > >> > > > > > > > > > > Once the file is written, I also want to execute
>> it. I
>> > >> have
>> > >> > > tried
>> > >> > > > > > > > > > > using file resource with ensure command to copy
>> at
>> > >> /etc but
>> > >> > > > > > > permission
>> > >> > > > > > > > > > > was denied and moreover with a different
>> directory
>> > >> path
>> > >> > > (\tmp) it
>> > >> > > > > > > just
>> > >> > > > > > > > > > > created an empty file. Can anyone please help?
>> >
>> > >> > > > > > > > > > > Regards,
>> >
>> > >> > > > > > > > > > > A.
>> >
>> > >> > > > > > > > > > > --
>> > >> > > > > > > > > > > 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 (mailto:
>> puppet-users@googlegroups.com)
>> > >> > > > > > > (mailto:
>> > >> > > > > > > > > > puppet-users@googlegroups.com (mailto:
>> > >> > > puppet-users@googlegroups.com)).
>> > >> > > > > > > > > > > To unsubscribe from this group, send email to
>> > >> > > > > > > > > > puppet-users+unsubscr...@googlegroups.com (mailto:
>> > >> > > puppet-users%2bunsubscr...@googlegroups.com) (mailto:
>> > >> > > > > > > > > > puppet-users+unsubscr...@googlegroups.com (mailto:
>> > >> > > puppet-users%2bunsubscr...@googlegroups.com)).
>> >
>> > ...
>> >
>> > read more »
>>
>> --
>> 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.
>>
>>
>  --
> 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.
>

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

Reply via email to