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

Reply via email to