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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]>
>> 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 <[email protected]>
>> 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 <[email protected]> wrote:
>> > >> > Thanks again Peter but sorry it didn't work out either.
>> >
>> > >> > On Fri, Jun 17, 2011 at 3:52 PM, Peter Bukowinski <
>> [email protected]>
>> > >> 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 <
>> [email protected]
>> > >> (mailto:
>> > >> > > [email protected])> 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 <[email protected](mailto:
>> > >> > > [email protected])> 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 <
>> > >> [email protected](mailto:
>> > >> > > [email protected])> 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 <[email protected](mailto:
>> > >> > > [email protected])> 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 <
>> > >> [email protected](mailto:
>> > >> > > [email protected])> 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 <
>> > >> > > [email protected] (mailto:[email protected])
>> > >> > > > > > > > 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
>> > >> > > [email protected] (mailto:
>> [email protected])
>> > >> > > > > > > (mailto:
>> > >> > > > > > > > > > [email protected] (mailto:
>> > >> > > [email protected])).
>> > >> > > > > > > > > > > To unsubscribe from this group, send email to
>> > >> > > > > > > > > > [email protected] (mailto:
>> > >> > > puppet-users%[email protected]) (mailto:
>> > >> > > > > > > > > > [email protected] (mailto:
>> > >> > > puppet-users%[email protected])).
>> >
>> > ...
>> >
>> > 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 [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.
>>
>>
> --
> 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.
>
--
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.