The root cause is ovn-ctl is using sh instead of bash. Parsing works fine
if we use bash

e.g below is the comparision:
root@test3:~# cat test.sh
#!/bin/bash
aaa="-vconsole:off -vfile:info"
test(){
c="a"
eval local x=\$a${c}a
echo 'log values are '$x
}
root@test3:~# ./test.sh
log values are -vconsole:off -vfile:info

#switching to sh
root@test3:~# cat test.sh
#!/bin/sh
aaa="-vconsole:off -vfile:info"
test(){
c="a"
eval local x=\$a${c}a
echo 'log values are'$x
}
root@test3:~# ./test.sh
./test.sh: 1: local: -vfile:info: bad variable name

Shortest way is to skip bash for log and use direct var assignment or will
try to figure out something that works for both sh and bash using eval. Let
me know your thoughts on that!

On Wed, Apr 25, 2018 at 2:06 PM, aginwala <[email protected]> wrote:

>
>
> On Wed, Apr 25, 2018 at 12:54 PM, Ben Pfaff <[email protected]> wrote:
>
>> On Thu, Apr 12, 2018 at 03:40:33PM -0700, aginwala wrote:
>> > eval doesn't understand white spaces which was introduced in commit
>> > 79c7961b8b3c4b7ea0251dea2ffacfa84c84fecb for starting clustered ovn dbs
>> >
>> > Hence, we need to explicitely handle it.
>> > e.g. /usr/share/openvswitch/scripts/ovn-ctl
>> --db-nb-addr=192.168.220.101 --db-nb-create-insecure-remote=yes \
>> >     --db-sb-addr=192.168.220.101 --db-sb-create-insecure-remote=yes \
>> >     --db-nb-cluster-local-addr=192.168.220.101 \
>> >     --db-sb-cluster-local-addr=192.168.220.101 \
>> >     --ovn-northd-nb-db=tcp:192.168.220.101:6641,tcp:192.168.220
>> .102:6641,tcp:192.168.220.103:6641 \
>> >     --ovn-northd-sb-db=tcp:192.168.220.101:6642,tcp:192.168.220
>> .102:6642,tcp:192.168.220.103:6642 \
>> >     start_northd
>> >
>> > gives error: /usr/share/openvswitch/scripts/ovn-ctl: 1: local:
>> -vfile:info: bad variable name
>> > As a result ovsdb failes to even initialize and start. This commit
>> fixes the same.
>> >
>> > Signed-off-by: aginwala <[email protected]>
>> > ---
>> >  ovn/utilities/ovn-ctl | 4 ++--
>> >  1 file changed, 2 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/ovn/utilities/ovn-ctl b/ovn/utilities/ovn-ctl
>> > index 25dda52..9a1ad75 100755
>> > --- a/ovn/utilities/ovn-ctl
>> > +++ b/ovn/utilities/ovn-ctl
>> > @@ -409,8 +409,8 @@ set_defaults () {
>> >      OVN_CONTROLLER_LOG="-vconsole:emer -vsyslog:err -vfile:info"
>> >      OVN_NORTHD_LOG="-vconsole:emer -vsyslog:err -vfile:info"
>> >      OVN_NORTHD_LOGFILE=""
>> > -    OVN_NB_LOG="-vconsole:off -vfile:info"
>> > -    OVN_SB_LOG="-vconsole:off -vfile:info"
>> > +    OVN_NB_LOG='"-vconsole:off' '-vfile:info"'
>> > +    OVN_SB_LOG='"-vconsole:off' '-vfile:info"'
>> >      OVN_NB_LOGFILE="$logdir/ovsdb-server-nb.log"
>> >      OVN_SB_LOGFILE="$logdir/ovsdb-server-sb.log"
>>
>> This doesn't make sense to me.  The line
>>
>>     eval local log=\$OVN_${DB}_LOG
>>
>> should parameter-expand to:
>>
>>     eval local log=$OVN_SB_LOG
>>
>> which should be executed as:
>>
>>     local log=$OVN_SB_LOG
>>
>> which should assign "-vconsole:off -vfile:info", without the double
>> quotes, to $log (since variable assignment in shell doesn't do word
>> splitting).
>>
>> Then, later,
>>
>>     set "$@" $log --log-file=$logfile
>>
>> should do word splitting on $log.
>>
>> Do you understand what is going on here?
>>
>
> >>>
> Hi :
>
> Yes for sure. But eval do not understand white spaces in the string 
> "-vconsole:off
> -vfile:info"  which breaks on line local log=$OVN_SB_LOG.  set "$@" $log
> --log-file=$logfile
>  is not even there yet. Hope you got the idea what I mean. Easily
> reproduced on ubuntu box as I am using ubuntu.
>
>
>
>> Thanks,
>>
>> Ben.
>> _______________________________________________
>> dev mailing list
>> [email protected]
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>
>
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to