Come to think of it - this may not be a cfe problem at all - if the shell used is sh, then only backticks will work, not $(...) (which is a bash feature). Hmm, have to look more into this.
On 19 April 2011 08:56, Erlend Leganger <erlend.legan...@gmail.com> wrote: > Perfect, this works fine - but you have to use backticks. I guess the > $(..) construct clashes with cfe's dual way of acessing variables > ($(var) and ${var}). I always thought cfe should stick with ${var} > only (I do), but I guess that would break a lot of policies out there. > > Anyways, problem solved, below is the updated complete example. > > Thanks, > Erlend > > root@canal:master$ cat tester-0.cf > #------------------------------------------------------------------------ > body common control{ > bundlesequence=>{"tester"}; > } > > #------------------------------------------------------------------------ > bundle agent tester{ > commands: > any:: > "/usr/bin/echo `/usr/bin/hostname`", > contain=>use_shell; > } > > #------------------------------------------------------------------------ > body contain use_shell{ > useshell =>"true"; > } > root@canal:master$ /var/cfengine/bin/cf-agent -f ./tester-0.cf > Q: "...r/bin/echo `/us": canal > I: Last 1 quoted lines were generated by promiser "/usr/bin/echo > `/usr/bin/hostname`" > root@canal:master$ > > > On 19 April 2011 08:30, Seva Gluschenko <seva.glusche...@gmail.com> wrote: >> Erlend, >> >> look at the body contain which allows you to place command execution >> in shell (disabled by default). >> >> 2011/4/19 Erlend Leganger <erlend.legan...@gmail.com>: >>> I was trying to maintain /etc/defaultrouter using cfengine communit >>> v3.1.4. When the file changes, you either have to reboot the server >>> for it to take effect or use the route command to delete the current >>> default route and add the new. I tried with the policy below, but get >>> errors. >>> >>> Here is a complete policy that demonstrates the problem. >>> >>> root@canal:master$ cat tester-0.cf >>> #------------------------------------------------------------------------ >>> body common control{ >>> bundlesequence=>{"tester"}; >>> } >>> >>> #------------------------------------------------------------------------ >>> bundle agent tester{ >>> commands: >>> any:: >>> "/usr/bin/echo $(/usr/bin/hostname)"; >>> } >>> root@canal:master$ /var/cfengine/bin/cf-agent -f ./tester-0.cf >>> Q: "...r/bin/echo $(/u": $(/usr/bin/hostname) >>> I: Last 1 quoted lines were generated by promiser "/usr/bin/echo >>> $(/usr/bin/hostname)" >>> root@canal:master$ >>> >>> Using "echo $(hostname)" works fine on the command line, but not in >>> cfengine; the subshell is ignored (I do know about env variable >>> $HOSTNAME, this just demonstrates the problem). Replacing the bash >>> $(..) construct with backtics gives the same result. Any tips? >>> >>> - Erlend >>> >>> >>> >>> >>> #------------------------------------------------------------------------ >>> bundle agent xyz_defaultrouter{ >>> files: >>> phyxx:: >>> "/etc/defaultrouter" >>> handle => "xyz_defaultrouter", >>> comment => "Set correct default router", >>> >>> copy_from=>xyz_cp_file("$(g.fileserver)","$(g.filedepot)/defaultrouter.std") >>> , >>> perms=>xyz_perms("root","sys","644"), >>> classes => xyz_satisfied("xyz_reset_defaultrouter"); >>> >>> commands: >>> xyz_reset_defaultrouter:: >>> "/usr/sbin/route delete default $(/usr/bin/netstat >>> -r|/usr/bin/grep default| >>> /usr/bin/awk '{print $2}')"; >>> "/usr/sbin/route add default $(/usr/bin/cat /etc/defaultrouter) 1"; >>> >>> reports: >>> xyz_reset_defaultrouter:: >>> "xyz_defaultrouter: updated default router"; >>> } >>> >>> >>> >>> root@canal:/$ rm /etc/defaultrouter >>> root@canal:/$ /var/cfengine/bin/cf-agent -KI >>> -> Copying from 10.0.0.230:/export/cfengine/depot/defaultrouter.std >>> -> Group of /etc/defaultrouter was 0, setting to 3 >>> -> Object /etc/defaultrouter had permission 600, changed it to 644 >>> -> Group of /etc/defaultrouter was 0, setting to 3 >>> -> Object /etc/defaultrouter had permission 0, changed it to 644 >>> -> Executing '/usr/sbin/route delete default $(/usr/bin/netstat >>> -r|/usr/bin/grep default|/usr/bin/awk '{print $2}')' >>> ...(timeout=-678,owner=-1,group=-1) >>> !! Finished command related to promiser "/usr/sbin/route delete >>> default $(/usr/bin/netstat -r|/usr/bin/grep default|/usr/bin/awk >>> '{print $2}')" -- an error occurred (returned 1) >>> Q: "...sbin/route dele": route: $(/usr/bin/netstat: unexpected '/' >>> I: Last 1 quoted lines were generated by promiser "/usr/sbin/route >>> delete default $(/usr/bin/netstat -r|/usr/bin/grep >>> default|/usr/bin/awk '{print $2}')" >>> -> Completed execution of /usr/sbin/route delete default >>> $(/usr/bin/netstat -r|/usr/bin/grep default|/usr/bin/awk '{print $2}') >>> -> Executing '/usr/sbin/route add default $(/usr/bin/cat >>> /etc/defaultrouter) 1' ...(timeout=-678,owner=-1,group=-1) >>> !! Finished command related to promiser "/usr/sbin/route add default >>> $(/usr/bin/cat /etc/defaultrouter) 1" -- an error occurred (returned >>> 1) >>> Q: "...sbin/route add ": route: $(/usr/bin/cat: unexpected '/' >>> I: Last 1 quoted lines were generated by promiser "/usr/sbin/route add >>> default $(/usr/bin/cat /etc/defaultrouter) 1" >>> -> Completed execution of /usr/sbin/route add default $(/usr/bin/cat >>> /etc/defaultrouter) 1 >>> R: xyz_defaultrouter: updated default router >>> -> Executing '/usr/bin/bash /var/cfengine/local/bin/cfe-pulse.sh' >>> ...(timeout=-678,owner=-1,group=-1) >>> -> Completed execution of /usr/bin/bash >>> /var/cfengine/local/bin/cfe-pulse.sh >>> root@canal:/$ >>> >>> >>> root@canal:/$ rm /etc/defaultrouter >>> root@canal:/$ /var/cfengine/bin/cf-agent -KI >>> -> Copying from 10.0.0.230:/export/cfengine/depot/defaultrouter.std >>> -> Group of /etc/defaultrouter was 0, setting to 3 >>> -> Object /etc/defaultrouter had permission 600, changed it to 644 >>> -> Group of /etc/defaultrouter was 0, setting to 3 >>> -> Object /etc/defaultrouter had permission 0, changed it to 644 >>> -> Executing '/usr/sbin/route delete default `/usr/bin/netstat >>> -r|/usr/bin/grep default|/usr/bin/awk '{print $2}'`' >>> ...(timeout=-678,owner=-1,group=-1) >>> !! Finished command related to promiser "/usr/sbin/route delete >>> default `/usr/bin/netstat -r|/usr/bin/grep default|/usr/bin/awk >>> '{print $2}'`" -- an error occurred (returned 1) >>> Q: "...sbin/route dele": route: /usr/bin/netstat -r|/usr/bin/grep >>> default|/usr/bin/awk '{print $2}': unexpected '/' >>> I: Last 1 quoted lines were generated by promiser "/usr/sbin/route >>> delete default `/usr/bin/netstat -r|/usr/bin/grep default|/usr/bin/awk >>> '{print $2}'`" >>> -> Completed execution of /usr/sbin/route delete default >>> `/usr/bin/netstat -r|/usr/bin/grep default|/usr/bin/awk '{print $2}'` >>> -> Executing '/usr/sbin/route add default `/usr/bin/cat >>> /etc/defaultrouter` 1' ...(timeout=-678,owner=-1,group=-1) >>> !! Finished command related to promiser "/usr/sbin/route add default >>> `/usr/bin/cat /etc/defaultrouter` 1" -- an error occurred (returned 1) >>> Q: "...sbin/route add ": route: /usr/bin/cat /etc/defaultrouter: unexpected >>> '/' >>> I: Last 1 quoted lines were generated by promiser "/usr/sbin/route add >>> default `/usr/bin/cat /etc/defaultrouter` 1" >>> -> Completed execution of /usr/sbin/route add default `/usr/bin/cat >>> /etc/defaultrouter` 1 >>> R: xyz_defaultrouter: updated default router >>> z >>> _______________________________________________ >>> Help-cfengine mailing list >>> Help-cfengine@cfengine.org >>> https://cfengine.org/mailman/listinfo/help-cfengine >>> >> >> >> >> -- >> SY, Seva Gluschenko. >> > _______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine