On April 25, 2018 8:51:01 PM EDT, aginwala <[email protected]> wrote: >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 >>> >> >>
What shell is sh on your system? _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
