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 <[email protected]> wrote:
> Erlend,
>
> look at the body contain which allows you to place command execution
> in shell (disabled by default).
>
> 2011/4/19 Erlend Leganger <[email protected]>:
>> 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
>> [email protected]
>> https://cfengine.org/mailman/listinfo/help-cfengine
>>
>
>
>
> --
> SY, Seva Gluschenko.
>
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine