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