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

Reply via email to